Estratégias de fragmentação: intervalo, hash e diretório
Compare a fragmentação por intervalo, hash e baseada em diretório e escolha uma chave de fragmentação que equilibre a carga e permaneça estável.
Estratégias de fragmentação: intervalo, hash e diretório é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
O que é fragmentação?
Dividir um banco de dados lógico entre vários servidores físicos ("fragmentos"), cada um contendo um subconjunto dos dados. Isso é feito quando um único servidor já não consegue lidar com a carga de trabalho.
Fragmentação ≠ replicação
- Replicação — os mesmos dados em vários servidores (para HA e escalabilidade de leitura)
- Fragmentação — dados diferentes em servidores diferentes (para escalabilidade de gravação e capacidade)
Frequentemente, você combina as duas: cada fragmento é replicado para oferecer HA.
Três estratégias de fragmentação
- Intervalo — fragmentar por intervalo de valores (IDs de 1 a 1M no fragmento A, de 1M a 2M no fragmento B)
- Hash — aplicar hash à chave de fragmentação e calcular o módulo N
- Diretório — uma tabela separada mapeia a chave para o fragmento
Fragmentação por intervalo
É simples e funciona bem para séries temporais e IDs ordenados. Risco: fragmentos sobrecarregados se os dados recentes receberem todo o tráfego.
-- Conceptually:
-- Shard A: user_id 1 - 1,000,000
-- Shard B: user_id 1,000,001 - 2,000,000
-- Shard C: user_id 2,000,001 - 3,000,000Fragmentação por hash
Oferece distribuição uniforme por padrão. É difícil adicionar fragmentos (o reparticionamento move todas as chaves):
-- shard_id = hash(user_id) % N
-- N=4: any user_id evenly distributed across 4 shardsFragmentação por diretório
Uma tabela de consulta mapeia cada chave para seu fragmento:
CREATE TABLE shard_routing (
user_id BIGINT PRIMARY KEY,
shard_id INT NOT NULL
);
-- Looking up a user costs a directory query first; cache it.Hash consistente
O hash por módulo é frágil ao adicionar fragmentos. O hash consistente minimiza as chaves que precisam ser movidas:
-- Each shard owns a ring segment.
-- Adding a new shard moves only ~1/N of the keys.Escolhendo uma chave de fragmentação
A chave de fragmentação determina tudo. Boas chaves de fragmentação:
- Distribuem os dados uniformemente
- Estão presentes na maioria das consultas (evitando a expansão entre fragmentos)
- São imutáveis (ou mudam raramente)
<p>Common picks: user_id, tenant_id, customer_id. Avoid: timestamps for write-heavy workloads (creates hot shards).</p>Um inquilino por fragmento
SaaS multi-inquilino: cada inquilino fica em um fragmento dedicado. É simples de entender e facilita isolar inquilinos que geram tráfego excessivo.
Projeto preparado para reparticionamento
Projete pensando no reparticionamento futuro:
- Use fragmentos virtuais (por exemplo, 1024 lógicos mapeados para fragmentos físicos)
- Facilite a migração de um fragmento lógico para outro servidor físico
- Evite código da aplicação que fixe a quantidade de fragmentos
Consultas entre fragmentos
Este é o problema mais difícil. JOINs e relatórios entre fragmentos exigem expansão e lógica de agregação na aplicação. Esse tema será abordado na próxima lição.
Transações entre fragmentos
As transações atômicas entre fragmentos precisam de confirmação em duas fases (2PC) ou de sagas. A recomendação usual é projetar o sistema para que as transações permaneçam dentro de um único fragmento.
Recapitulação
Há três estratégias; escolha de acordo com o formato do seu tráfego.
- Intervalo — simples, mas com risco de fragmentos sobrecarregados
- Hash — uniforme, mas rígida
- Diretório — flexível, mas acrescenta latência
- Hash consistente para um reparticionamento gradual
Verificação rápida
Você fragmenta uma tabela de usuários por hash(user_id). O sistema passa de 4 fragmentos para 5. Quantas chaves precisam ser movidas?
Perguntas Frequentes
A aula “Estratégias de fragmentação: intervalo, hash e diretório” é grátis?
Sim — o texto completo de “Estratégias de fragmentação: intervalo, hash e diretório” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Estratégias de fragmentação: intervalo, hash e diretório”?
Compare a fragmentação por intervalo, hash e baseada em diretório e escolha uma chave de fragmentação que equilibre a carga e permaneça estável. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Estratégias de fragmentação: intervalo, hash e diretório”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Estratégias de fragmentação: intervalo, hash e diretório
- Consultas entre fragmentos: o problema difícil
- Citus e PostgreSQL distribuído
- Quando NÃO fragmentar