Notícias
Novos modelos de linguagem da API Serverspace GPT
Serverspace Black Friday
DF
Daniil Fedorov
fevereiro 28, 2025
Atualizado fevereiro 28, 2025

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.

Usamos cookies para melhorar sua experiência no Serverspace. Ao continuar a navegar em nosso site, você concorda com o Uso de Cookies e com a Política de Privacidade.