0Pricing
SQL Academy · Aula

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,000

Fragmentaçã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 shards

Fragmentaçã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

  1. Estratégias de fragmentação: intervalo, hash e diretório
  2. Consultas entre fragmentos: o problema difícil
  3. Citus e PostgreSQL distribuído
  4. Quando NÃO fragmentar
← Voltar para SQL Academy