Partitioning
Partitioning – Dividindo Grandes Tabelas em Seções Lógicas
Partitioning é uma técnica para dividir grandes tabelas em seções lógicas menores (partições), o que ajuda a acelerar a execução de consultas, simplificar a administração de dados e melhorar a escalabilidade do sistema.
Principais Tipos de Partitioning
Partitioning por Faixa de Valores (Range Partitioning)
A tabela é segmentada em múltiplas partições conforme um determinado intervalo de valores definido em uma ou mais colunas.
- Exemplo: Divisão de dados por anos.
- Exemplo SQL (PostgreSQL):
[/code]CREATE TABLE transactions (
transaction_id SERIAL PRIMARY KEY,
transaction_date DATE NOT NULL,
total DECIMAL NOT NULL
) PARTITION BY RANGE (transaction_date);CREATE TABLE transactions_2022 PARTITION OF transactions
FOR VALUES FROM ('2022-01-01') TO ('2022-12-31');CREATE TABLE transactions_2023 PARTITION OF transactions
FOR VALUES FROM ('2023-01-01') TO ('2023-12-31');
[/code]
List Partitioning (Particionamento por Lista)
Os dados são distribuídos em partições com base em uma lista de valores predefinida.
- Útil para categorias fixas, como regiões ou tipos de clientes.
- Exemplo: Particionamento por país.
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
country TEXT NOT NULL
) PARTITION BY LIST (country);CREATE TABLE customers_usa PARTITION OF customers
FOR VALUES IN ('USA');CREATE TABLE customers_europe PARTITION OF customers
FOR VALUES IN ('Germany', 'France', 'UK');
Hash Partitioning (Particionamento por Hash)
Os dados são distribuídos de forma uniforme entre várias partições usando uma função hash.
- Ideal para balanceamento de carga.
- Exemplo: Dividindo dados de usuários em quatro partições.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT NOT NULL
) PARTITION BY HASH (id);CREATE TABLE users_p0 PARTITION OF users FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE users_p1 PARTITION OF users FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE users_p2 PARTITION OF users FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE users_p3 PARTITION OF users FOR VALUES WITH (MODULUS 4, REMAINDER 3);
Composite Partitioning (Particionamento Composto)
Combinação de diferentes tipos de partitioning, como Range + Hash.
- Exemplo: Particionar os dados por ano (Range) e depois dividir por hash do user_id (Hash).
Vantagens do Partitioning
- Consultas mais rápidas – Índices são aplicados apenas às partições relevantes, reduzindo a quantidade de dados analisados.
- Gerenciamento simplificado – Dados antigos podem ser excluídos ou arquivados sem bloquear a tabela principal.
- Balanceamento de carga – Distribui a carga de trabalho entre as partições usando hash.
- Backups eficientes – Permite criar backups de seções específicas.
Desvantagens e Limitações
- Lógica de consulta mais complexa.
- Nem todos os sistemas de banco de dados suportam a criação dinâmica de partições.
- Em alguns casos, a indexação em tabelas particionadas pode ser menos eficiente.
Suporte a Partitioning em Diferentes SGBDs
- PostgreSQL – Suporte completo desde a versão 10.
- MySQL – Suporta Range, List e Hash, mas com algumas limitações.
- Oracle – Sistema avançado de partitioning, incluindo subpartições.
- SQL Server – Suporta Range e List por meio de Partitioned Tables.
FAQ sobre Partitioning
Quando o partitioning deve ser usado?
Se você tem tabelas grandes (milhões ou bilhões de linhas) frequentemente utilizadas em consultas analíticas ou que exigem exclusão/arquivamento regular de dados antigos, o partitioning pode melhorar o desempenho e simplificar a administração.
O partitioning melhora a velocidade de todas as consultas?
Não necessariamente. Ele é mais eficiente quando as consultas filtram os dados usando a chave da partição (por exemplo, data ou categoria). Se uma consulta acessar várias partições, o ganho de desempenho pode ser mínimo.
É possível adicionar novas partições dinamicamente?
Na maioria dos SGBDs (como PostgreSQL e Oracle), é possível configurar a criação automática de partições. No MySQL, porém, as partições devem ser adicionadas manualmente.
Como funciona a indexação em tabelas particionadas?
Cada partição pode ter seu próprio índice, mas isso pode gerar sobrecarga adicional ao pesquisar em toda a tabela. A estratégia de indexação depende do tipo de dados e das consultas utilizadas.
É possível modificar a estrutura de uma partição sem afetar as outras?
Não. Alterar a estrutura de uma única partição (por exemplo, adicionando uma coluna) afeta toda a tabela, pois o esquema deve permanecer consistente em todas as partições.
O partitioning é uma técnica de otimização valiosa para bancos de dados de grande escala, especialmente quando os dados se agrupam naturalmente por datas, categorias ou distribuição por hash.