Curso
O que é particionamento de dados? Um guia completo para iniciantes
Independentemente de você estar criando aplicativos centrados no cliente ou executando pipelines de análise complexos, uma coisa fica clara: a forma como você armazena e acessa os dados pode melhorar ou prejudicar o desempenho.
Vi em primeira mão como os sistemas funcionam de forma muito mais suave quando os dados são estruturados cuidadosamente, e é aí que entra o particionamento de dados. É uma daquelas técnicas que podem melhorar drasticamente a velocidade de consulta, a eficiência do armazenamento e a escalabilidade.
Nesta postagem, explicarei o particionamento de dados, os diferentes tipos disponíveis e as práticas recomendadas que aprendi ao longo do caminho.
O que é particionamento de dados?
O particionamento de dados é uma técnica para dividir grandes conjuntos de dados em pedaços menores e gerenciáveis, chamados de partições. Cada partição contém um subconjunto de dados e é distribuída em vários nós ou servidores. Essas partições podem ser armazenadas, consultadas e gerenciadas como tabelas individuais, embora logicamente pertençam ao mesmo conjunto de dados.
O particionamento de dados melhora o desempenho e a escalabilidade do banco de dados. Por exemplo, se você procurar um ponto de dados em toda a tabela, levará mais tempo e usará mais recursos do que se procurasse em uma partição específica. É por isso que os dados são armazenados como partições.
Tipos de particionamento de dados
O particionamento de dados abrange vários tipos, cada um com uma estratégia e benefícios exclusivos. Nesta seção, discuto os tipos mais comuns.
Particionamento horizontal
Em vez de armazenar todos os dados em uma única tabela, você pode usar o particionamento horizontal. divide os dados em linhasou seja, diferentes conjuntos de linhas são armazenados como partições.
Todas as partições do particionamento horizontal contêm o mesmo conjunto de colunas, mas diferentes grupos de linhas.
- Exemplo: Digamos que você tenha um conjunto de dados meteorológicos para vários estados em três países diferentes. Você pode particionar isso em três tabelas, dividindo as linhas por cada país.
Temperatura |
Estado |
País |
Temporada |
-30° F |
Alaska |
USA |
Inverno |
48.2° F |
Queensland |
Austrália |
Verão |
100° F |
Andhra Pradesh |
Índia |
Verão |
35° F |
Califórnia |
USA |
Inverno |
96° F |
Texas |
USA |
Verão |
62° F |
Tasmânia |
Austrália |
Inverno |
Partição horizontal por país:
Temperatura |
Estado |
País |
Temporada |
-30° F |
Alaska |
USA |
Inverno |
35° F |
Califórnia |
USA |
Inverno |
35° F |
Califórnia |
USA |
Inverno |
Temperatura |
Estado |
País |
Temporada |
48.2° F |
Queensland |
Austrália |
Verão |
62° F |
Tasmânia |
Austrália |
Inverno |
Temperatura |
Estado |
País |
Temporada |
100° F |
Andhra Pradesh |
Índia |
Verão |
Particionamento vertical
Particionamento vertical divide os dados por colunasde modo que cada partição contém o mesmo número de linhas, mas menos colunas.
A chave de partição ou a coluna primária estará presente em todas as partições, mantendo o relacionamento lógico.
O particionamento vertical é popular quando as informações confidenciais devem ser armazenadas separadamente dos dados normais. Ele permite que colunas confidenciais sejam salvas em uma partição e dados padrão em outra.
Outro caso de uso comum é o agrupamento de colunas que são atualizadas com frequência em uma partição e o restante em uma partição separada.
- Exemplo: Se as colunas de número de telefone e salário do funcionário na tabela abaixo forem confidenciais, vamos particionar a tabelade acordo.
Emp_id |
Emp_name |
Designação |
Emp_email |
Emp_phone |
Salário do funcionário |
z0yu9h |
Alex |
Cientista de dados |
alex@yoho.com |
+101 890 456 |
250K |
f8o5pj |
Adam |
Engenheiro de dados |
adam@prodgy.com |
+630 789 365 |
230K |
z006yu |
Matt |
Analista de dados |
matt@oltk.com |
+857 342 937 |
166K |
a6u895 |
Elina |
Engenheiro de operações |
elina@wal.com |
+892 494 782 |
190K |
g68w90 |
Joseph |
Engenheiro de software |
joseph@yoho.com |
+852 603 389 |
210K |
Emp_id
é o identificador exclusivo na tabela acima, portanto, todas as partições o têm.
Partição 1:
Emp_id |
Emp_name |
Designação |
Emp_email |
z0yu9h |
Alex |
Cientista de dados |
alex@yoho.com |
f8o5pj |
Adam |
Engenheiro de dados |
adam@prodgy.com |
z006yu |
Matt |
Analista de dados |
matt@oltk.com |
a6u895 |
Elina |
Engenheiro de operações |
elina@wal.com |
g68w90 |
Joseph |
Engenheiro de software |
joseph@yoho.com |
Partição 2:
Emp_id |
Emp_phone |
Salário do funcionário |
z0yu9h |
+101 890 456 |
250K |
f8o5pj |
+630 789 365 |
230K |
z006yu |
+857 342 937 |
166K |
a6u895 |
+892 494 782 |
190K |
g68w90 |
+852 603 389 |
210K |
Particionamento de faixa
O particionamento de intervalo divide os dados com base em um intervalo de valores para uma coluna específica.
Normalmente, cada partição tem um limite inferior e superior para a coluna chave, e um registro que esteja dentro desse intervalo é atribuído a essa partição.
- Exemplo: Digamos que os dados de vendas estejam disponíveis de 2021 a 2023. Podemos dividir isso por ano de modo que as vendas de 2021 a 2022 caiam em uma partição e de 2022 a 2023 em outra.
Product_id |
Data |
Lucro |
z0yu9h |
2021-03-17 |
$100K |
f8o5pj |
2022-04-04 |
$234K |
z006yu |
2022-09-13 |
$789K |
a6u895 |
2021-07-23 |
$237K |
g68w90 |
2022-02-26 |
$2345K |
Partição 1:
product_id |
Data |
Lucro |
z0yu9h |
2021-03-17 |
$100K |
a6u895 |
2021-07-23 |
$237K |
Partição 2:
product_id |
Data |
Lucro |
f8o5pj |
2022-04-04 |
$234K |
z006yu |
2022-09-13 |
$789K |
Particionamento de hash
Uma função hash é aplicada à chave da partição e o resultado determina qual registro deve ser armazenado em qual partição. Nessa técnica, o número de partições é decidido com antecedência.
O restante obtido pela divisão do valor de hash pelo número de partições determina em qual partição esse registro específico deve ser armazenado. Vamos ver isso com um exemplo:
- Exemplo: Digamos que, para o produto com ID
z0yu9h
,hash(‘z0yu9h’) = 101
e número de partições = 4, então 101%4 = 1. Portanto, esse registro é armazenado na primeira partição.
Dessa forma, os valores de hash são calculados para a coluna da chave de partição dividida pelo número de partições, e o resultado determina a partição final.
Particionamento de listas
O procedimento é semelhante ao particionamento de intervalo, mas, em vez de dividir os dados por um intervalo de valores, o particionamento de lista divide os dados com base em um conjunto predefinido de valores.
Veja novamente a tabela de temperatura como exemplo.
Temperatura |
Estado |
País |
Temporada |
30° F |
Alaska |
USA |
Inverno |
48.2° F |
Queensland |
Austrália |
Verão |
100° F |
Andhra Pradesh |
Índia |
Verão |
35° F |
Califórnia |
USA |
Inverno |
96° F |
Texas |
USA |
Verão |
62° F |
Tasmânia |
Austrália |
Inverno |
Nos dados acima, a coluna "Season" contém uma lista de valores [‘winter’, ‘summer’]
. Portanto, o particionamento da lista na temporada é parecido com o seguinte:
Partição 1:
Temperatura |
Estado |
País |
Temporada |
30° F |
Alaska |
USA |
Inverno |
35° F |
Califórnia |
USA |
Inverno |
62° F |
Tasmânia |
Austrália |
Inverno |
Partição 2:
Temperatura |
Estado |
País |
Temporada |
48.2° F |
Queensland |
Austrália |
Verão |
100° F |
Andhra Pradesh |
Índia |
Verão |
96° F |
Texas |
USA |
Verão |
Particionamento composto
Uma partição composta é uma combinação de duas técnicas de particionamento. Primeiro, uma tabela é dividida usando uma estratégia e, em seguida, cada partição é dividida usando outra técnica.
As estratégias de particionamento são discutidas com frequência em entrevistas técnicas - veja as principais perguntas da entrevista de DBA para 2025.
Casos de uso de particionamento de dados
Agora que avaliamos os diferentes tipos de estratégias de particionamento, vamos examinar quando o particionamento de dados é útil.
Bancos de dados distribuídos
Os sistemas distribuídos são coleções de nós fisicamente localizados em servidores separados, mas conectados entre si por meio de uma rede. Os exemplos incluem o Apache Cassandra, o Amazon DynamoDB e o Google Bigtable.
Esses sistemas usam internamente o particionamento de dados para organizar e distribuir dados entre os nós.
Operações OLAP
O OLAP representa dados multidimensionais como cubos, permitindo que os usuários explorem os dados de diferentes ângulos. Embora esses cubos representem dados pré-agregados, os dados subjacentes ainda são vastos, portanto, as consultas precisam de mais otimização usando o particionamento de dados.
Por exemplo, a aplicação do particionamento de cubo (uma técnica de particionamento de dados) divide os dados em cubos menores com base em critérios específicos. Quando você consulta os dados, a pesquisa é realizada em um cubo específico, ignorando os irrelevantes, reduzindo as operações de E/S.
Da mesma forma, o particionamento de dimensão pode ser aplicado para dividir os dados por nível, hierarquia ou coluna.
Gerenciamento de registros
Os logs contêm informações sobre os eventos, transações e operações que ocorrem em um sistema. Eles são usados para rastrear falhas, bugs, casos extremos e até mesmo mensagens de sucesso.
O particionamento de logs acelera o processo de depuração e fornece a você as informações necessárias mais rapidamente. Por exemplo, se você tiver particionado os logs por período de tempo, poderá recuperá-los facilmente por data, semana, mês ou ano.
Pipelines de machine learning
Nos casos de uso de machine learning, os dados são divididos em conjuntos de treinamento, validação e teste. Essa abordagem garante que os insights do conjunto de teste não sejam revelados ao modelo durante o treinamento para evitar o ajuste excessivo.
Além disso, se os dados de treinamento forem enormes, uma única máquina não poderá processar e alimentar todos os dados em um modelo. Assim, os dados são divididos em partes e inseridos no modelo por meio do particionamento de dados.
Ferramentas para particionamento de dados
O particionamento de dados pode ser implementado em bancos de dados SQL e NoSQL. Vamos discuti-los nesta seção.
Bancos de dados SQL
PostgreSQL
O PostgreSQL oferece suporte integrado para particionamento de intervalo, lista e hash. Por exemplo, a consulta a seguir cria uma partição para cada ano a fim de acessar com eficiência os lucros de vendas e o total de vendas de cada ano fiscal.
CREATE TABLE sales(
city_id int not null,
sales_year date not null,
total_sales int,
sales_profits int
) PARTITION BY RANGE (sales_year);
MySQL
O MySQL oferece suporte a diferentes tipos de particionamento horizontal, como intervalo, lista, hash e particionamento de chave. Até o momento (versão 8.4), ele não oferece suporte ao particionamento vertical.
A consulta MySQL abaixo divide os dados dos funcionários em três grupos, p1
, p2
e p3
, de acordo com as datas de ingresso. Todos os funcionários que ingressaram antes de 2000 se enquadram na partição p1
. Os funcionários que ingressaram entre 2000 e 2010 se enquadram na partição p2
, e os funcionários que ingressaram entre 2010 e 2020 se enquadram na partição p3
.
CREATE TABLE employee(
firstname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
salary INT,
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (2010),
PARTITION p3 VALUES LESS THAN (2020)
);
Microsoft SQL Server
O SQL Server oferece recursos de particionamento por meio de funções de partição e esquemas de partição. Uma função de partição especifica como os dados são divididos, enquanto o esquema de partição determina o grupo de arquivos em que a partição será armazenada.
Nas consultas a seguir:
- Nome da função:
sales_by_year
- Nome do esquema:
sales_filegroup
- Nomes de grupos de arquivos:
fg01
,fg02
,fg03
,fg04
Função de partição:
create partition function sales_by_year (date)
as range right for values
('2024-01-01', '2024-02-01', '2024-03-01', ‘2024-04-01’);
Esquema de partição:
CREATE PARTITION SCHEME sales_filegroup
AS PARTITION sales_by_year
TO (fg01, fg02, fg03, fg04);
Aqui, os arquivos armazenam dados da seguinte forma:
fg01
- datas anteriores a "2024-01-01",fg02
- '2024-01-01' a '2024-01-31'fg03
- '2024-02-01' a '2024-02-29'fg04
- '2024-03-01' a '2024-03-31'
Como mencionamos range right
na consulta, cada data limite é incluída na próxima partição.
Se você estiver usandoo SQL Server, este tutorial do SQL Server apresenta os principais conceitos e ferramentas para gerenciar dados particionados. Para que você tenha um caminho de aprendizagem estruturado, a trilha SQL Server Fundamentals apresenta os principais recursos necessários para criarbancos de dados SQL de alto desempenho.
Bancos de dados NoSQL
Amazon DynamoDB
O DynamoDB lida automaticamente com o particionamento internamente. Quando você escreve um item em uma tabela do DynamoDB, ele passa por um roteador de solicitações. O roteador analisa a chave de partição e aplica uma função de hash. A saída da função hash determina a partição específica onde o registro será armazenado.
Todo esse processo é automatizado no DynamoDB, de modo que o usuário não precisa se preocupar com a função hash ou com a forma como as partições são gerenciadas.
Mongodb
O MongoDB distribui dados entre servidores por meio do conceito de sharding. Os dados são particionados com base em uma chave de fragmento, que deve ser escolhida com cuidado para evitar distribuições desiguais.
Normalmente, a chave do fragmento deve ter alta cardinalidade e deve ser a coluna usada com frequência nas consultas. Essas perguntas da entrevista do MongoDB abrangem quase todos ostópicos importantes, além da fragmentação.
Apache Cassandra
O particionador Cassandra é um algoritmo de hashing que determina qual nó em um cluster deve armazenar uma partição específica. A chave de partição é analisada pelo algoritmo para produzir um token. Esse token é então comparado com os valores de token atribuídos aos nós. Por fim, os dados são armazenados no nó que corresponde ao token.
Os algoritmos de partição comuns incluem Murmur3Partitioner
, RandomPartitioner
e ByteOrderedPartitioner
.
Como implementar o particionamento de dados?
Agora, vamos discutir as etapas necessárias para implementar corretamente o particionamento de dados.
Etapa 1: Compreender os dados e os padrões de acesso
Avalie minuciosamente como o seu aplicativo consulta o banco de dados, quais dados são acessados com frequência, o tamanho dos dados e os gargalos de desempenho. Esses insights ajudarão você a definir objetivos claros para o particionamento e a identificar colunas-chave frequentemente envolvidas em operações de dados.
Etapa 2: Escolha uma técnica de particionamento
Abordamos técnicas comuns anteriormente, e aqui está como você pode decidir entre elas:
- Particionamento horizontal: Quando você tem milhões e bilhões de linhas que seriam armazenadas em uma única tabela e levariam a problemas de memória, você deve escolher o particionamento horizontal. Ele armazena um conjunto diferente de linhas em tabelas diferentes.
- Particionamento vertical: Se um grupo de colunas for acessado com frequência e outras forem consultadas ocasionalmente, você poderá implementar o particionamento vertical para armazenar colunas separadamente com base em seus padrões de acesso.
- Abordagem híbrida: Quando você tem conjuntos de dados maiores que exigem a redução do número de linhas e, ao mesmo tempo, a otimização das consultas para um subconjunto de colunas, deve escolher uma abordagem híbrida. Ele combina as vantagens do particionamento horizontal e do particionamento vertical.
Etapa 3: Criar partições
A seguir, você verá um exemplo de consulta SQL para criar partições usando o particionamento de hash.
CREATE TABLE employees (
emp_id INT NOT NULL,
name VARCHAR(30),
hired DATE NOT NULL DEFAULT '2024-01-01',
job_id INT,
location_id INT
)
PARTITION BY HASH(location_id)
PARTITIONS 4;
No código acima, a coluna "location_id" é passada para a função hash, e o resultado determina a partição à qual o registro deve ser atribuído. A linha de código partitions 4
especifica o número total de partições que devem ser criadas.
Marque esta útil folha de dicas básicas de SQL parafazer referência à sintaxe básica do SQL à medida que você implementa partições.
Etapa 4: Monitorar e otimizar partições
- Monitore continuamente suas operações de dados e garanta que as partições estejam atualizadas e válidas.
- À medida que o aplicativo se expande, talvez você precise adicionar mais partições ou escolher uma abordagem diferente, como uma partição híbrida, para acomodar as demandas em constante mudança.
- Certifique-se de que o tamanho e a estratégia da partição beneficiem as operações frequentes realizadas no banco de dados.
- Certifique-se de que os dados estejam distribuídos uniformemente entre as partições; caso contrário, talvez você precise reequilibrá-los.
Desafios e considerações sobre o particionamento de dados
As otimizações vêm com compensações e desafios, como em tudo no mundo do software. Aqui estão os que você deve considerar:
- Inclinação da partição: A distorção da partição significa que algumas partições recebem mais dados e trabalho de processamento, enquanto outras permanecem ociosas. Para evitar isso, escolha a chave de partição correta e uma estratégia que distribua os dados de maneira uniforme em todas as partições.
- Custos indiretos de manutenção: À medida que os dados crescem, você precisa reavaliar as estratégias de particionamento existentes e garantir que elas sejam relevantes para os dados atuais. Caso contrário, talvez você precise reparticionar ou mesclar partições.
- Migrações de dados: No caso de você migrar seus dados para uma nova arquitetura, é necessário um cuidado extra para garantir que as partições sejam compatíveis com o novo ambiente. Além disso, a movimentação de dados entre partições envolve complexidades como o gerenciamento da consistência dos dados entre os shards.
- Curva de aprendizado acentuada: O particionamento de dados adiciona complexidade a um sistema ou à arquitetura da nuvem. Eles não são simples de consultar, migrar ou analisar, o que resulta em uma curva de aprendizado acentuada para iniciantes.
Práticas recomendadas para o particionamento de dados
Como você pode ver, o particionamento de dados torna-se complexo à medida que o volume de dados aumenta. Entretanto, a implementação dessas práticas garantirá que o particionamento melhore a eficiência sem afetar o desempenho.
- Alinhar partições com padrões de consulta: A escolha da estratégia de partição e da chave de partição corretas pode melhorar significativamente o desempenho do banco de dados. Entenda as operações de dados e os padrões de consulta mais comuns em seu banco de dados e selecione uma chave de partição que esteja frequentemente envolvida em consultas e, ao mesmo tempo, garanta a distribuição uniforme dos dados.
- Monitore regularmente: Atualmente, os aplicativos são dinâmicos e estão em constante evolução com as mudanças de tendências e demandas. Portanto, é importante monitorar regularmente suas partições para que se alinhem aos padrões de acesso atuais e para que você as reparticione novamente quando necessário.
- Minimizar a sobrecarga: O gerenciamento manual de partições em grande escala é complexo. No entanto, os bancos de dados NoSQL, como o Apache Cassandra e o Amazon DynamoDB, automatizam o processo sem exigir muito trabalho extra. Além disso, algumas ferramentas de automação ajustam as partições à medida que os dados aumentam, permitindo o reparticionamento ou a mesclagem de partições de acordo com suas necessidades.
Conclusão
O particionamento eficaz de dados é essencial para manter o desempenho e a escalabilidade à medida que seus dados crescem. Com a estratégia certa implementada, você pode reduzir a latência das consultas, otimizar o armazenamento e simplificar a manutenção. É uma medida prática com um impacto mensurável.
Para saber mais sobre como o particionamento permite que os sistemas distribuídos sejam dimensionados, confira este guia sobre partições do Kafka. Para entender como as estruturas relacionais influenciam as decisões de particionamento, comece com este curso sobre bancos de dados relacionais.
Torne-se um engenheiro de dados
Srujana é redatora freelancer de tecnologia e tem um diploma de quatro anos em Ciência da Computação. Escrever sobre vários tópicos, incluindo ciência de dados, computação em nuvem, desenvolvimento, programação, segurança e muitos outros, é algo natural para ela. Ela gosta de literatura clássica e de explorar novos destinos.
Saiba mais sobre design de banco de dados com estes cursos!
Curso
Introdução ao SQL Server
Curso
Projeto de banco de dados
blog
O que é um banco de dados gráfico? Um guia para iniciantes

blog
O que é análise de dados? Um guia especializado com exemplos
blog
O que é o Data Wrangling? Um guia prático com exemplos

Tim Lu
12 min
blog
Contratos de dados desmistificados: Tudo o que você precisa saber

Mike Shakhomirov
11 min

Tutorial
Tutorial do MySQL: Um guia abrangente para iniciantes
Tutorial