0Pricing
SQL Academy · Aula

Consultas entre fragmentos: o problema difícil

Entenda por que junções e transações entre fragmentos são o problema mais difícil em bancos de dados distribuídos e conheça os padrões que as minimizam.

Consultas entre fragmentos: o problema difícil é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 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 custo da fragmentação

A fragmentação escala as gravações e a capacidade, mas torna difíceis as consultas que abrangem vários fragmentos: toda consulta entre fragmentos exige expansão.

Consultas em um único fragmento são fáceis

Se a chave de fragmentação estiver na cláusula WHERE, o roteador enviará uma única consulta para um único fragmento:

-- shard_id = hash(user_id) % N
SELECT * FROM orders WHERE user_id = 42;
-- Router computes shard, sends one query, gets one result.

Consultas com expansão

Sem a chave de fragmentação, o roteador consulta todos os fragmentos e combina os resultados:

-- WHERE status = 'paid' — no user_id
SELECT * FROM orders WHERE status = 'paid' ORDER BY created_at DESC LIMIT 100;
-- Must query all N shards, merge results, sort, take top 100.

Agregações com expansão

Para COUNT/SUM/AVG: obtenha resultados parciais de cada fragmento e depois combine-os no roteador ou na aplicação:

-- On each shard:
SELECT COUNT(*), SUM(total) FROM orders;

-- Aggregator:
final_count = SUM(counts), final_sum = SUM(sums)

-- AVG is trickier — need SUM and COUNT, can't average averages.

JOINs entre fragmentos

Se os dois lados forem fragmentados pela mesma chave (co-localizados), o JOIN será local ao fragmento. Caso contrário, ele será essencialmente impossível em grande escala.

Tabelas de referência (replicadas em todos os lugares)

Tabelas pequenas de "consulta" são replicadas para todos os fragmentos, de modo que os JOINs com elas continuem locais. O Citus as chama de "tabelas de referência".

Evitando padrões entre fragmentos

Estratégias de projeto do esquema:

  • Desnormalize — duplique os dados do pai no fragmento que contém o filho
  • Use a chave de fragmentação em todos os lugares — mesmo quando parecer "desnecessário"
  • Pré-calcule os relatórios em um banco de dados de análise separado

Paginação entre fragmentos

OFFSET 1000 LIMIT 10 em muitos fragmentos é péssimo — cada fragmento precisa produzir 1010 linhas. Em vez disso, use paginação por conjunto de chaves.

Transações distribuídas

A confirmação em duas fases (2PC) coordena confirmações atômicas entre fragmentos. É lenta e frágil durante uma partição. Na prática, projete o sistema para usar padrões de "saga":

// Saga pattern (conceptual):
//   1. Local TX on shard A: mark as pending, log
//   2. RPC to shard B: do its part
//   3. Local TX on shard A: mark as committed
//   4. On failure: compensating transactions

Fragmentos sobrecarregados

Um usuário famoso ou um produto viral — o tráfego concentrado em um único fragmento destrói os benefícios da sua estratégia de escalabilidade. Detecte o problema e divida o fragmento (subfragmentação) ou mova-o.

Chaves estrangeiras entre fragmentos

As chaves estrangeiras de um RDBMS não abrangem vários fragmentos. Você pode impor a integridade referencial na aplicação ou aceitar consistência eventual para os relacionamentos entre fragmentos.

Recapitulação

A fragmentação transfere a dificuldade de "escalar as gravações" para "estruturar as consultas para que permaneçam locais ao fragmento".

  • Consultas em um único fragmento são rápidas
  • A expansão é lenta
  • Desnormalize para manter o trabalho local
  • Tabelas de referência para dimensões compartilhadas
  • Sagas em vez de 2PC

Verificação rápida

Por que um SELECT sem a chave de fragmentação em WHERE é caro em um banco de dados fragmentado?

Perguntas Frequentes

A aula “Consultas entre fragmentos: o problema difícil” é grátis?

Sim — o texto completo de “Consultas entre fragmentos: o problema difícil” é 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 “Consultas entre fragmentos: o problema difícil”?

Entenda por que junções e transações entre fragmentos são o problema mais difícil em bancos de dados distribuídos e conheça os padrões que as minimizam. 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 2 de 4.

Quanto tempo leva a aula “Consultas entre fragmentos: o problema difícil”?

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