Pular para o conteúdo

apps/scalability/sharding-partitioning

136 · Escalabilidade & Infraestrutura · ≈ 6 min de estudo

Sharding e Particionamento

Sharding divide os dados entre servidores independentes pela chave escolhida; particionamento divide uma tabela dentro do mesmo servidor. Aqui os dois juntos: as contas se espalham por três PostgreSQL por um anel de consistent hashing, e dentro de cada um a tabela de transações é particionada por mês. Use quando o volume não cabe num servidor — e particione antes de shardear, se ainda cabe.

passos
6
arquivos
3
testes
0
tecnologias
4
Infraestrutura realTypeScriptBunPostgreSQLDocker
Baixar cartão

Cenário

A tabela de transações do banco cresce para bilhões de linhas. A chave de shard é a conta: extrato, saldo e locks de uma conta ficam num único servidor, e a distribuição fica uniforme mesmo com milhões de contas. O extrato de outubro de uma conta lê um shard e uma partição; os totais do dia, que envolvem todas as contas, consultam todos os shards em paralelo. Quando chega a hora de um quarto shard, só cerca de um quarto das contas precisa mudar de lugar.

Planta

Fluxo
10/10
Transacao da conta CC-00042Anel de consistenthashing160 pontos por shardshard-ashard-bshard-ctransactions_2026_09transactions_2026_10transactions_defaultTotais do diaaccountIdaccountIdaccountIdscatter-gather
10

10 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Dados divididos por chave de partição.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    O anel dá a cada shard 160 pontos (nós virtuais) de sha256; a conta vai para o primeiro ponto no sentido horário a partir do seu hash

  2. 02

    Tudo de uma conta vai para o shard dela: gravação, extrato, locks — sem transação entre shards no caminho comum

  3. 03

    Em cada shard, PARTITION BY RANGE (booked_at) por mês: o extrato de um mês é podado para uma partição, e meses antigos podem ser destacados inteiros

  4. 04

    Pergunta que cruza contas (totais do dia) é scatter-gather: todos os shards em paralelo, resultados somados; latência do mais lento, custo em todos

  5. 05

    shardSizes mostra linhas por shard para pegar hot shard cedo

  6. 06

    Adicionar um shard ao anel move ~1/N das contas, todas para o shard novo; hash mod N moveria cerca de três quartos

Trade-offs

O que se ganha, o que se paga

Aspecto Vantagem Desvantagem
Escrita Escala com o número de shards Transação entre contas de shards diferentes não é ACID: saga
Leitura Extrato lê um shard e uma partição Consulta global lê todos os shards
Resharding Consistent hashing move ~1/N Ainda exige migrar essas contas
Operação Falha de um shard não derruba os outros Mais bancos para operar e monitorar

apps/scalability/sharding-partitioning

3 arquivos

src/

  • ring_shard.tsAnel de consistent hashing, alternativa mod N e medida de movimentação
  • router_shard.tsRoteador: gravação e extrato direcionados, scatter-gather e tamanho por shard

sql/

  • 01_schema.sqlschemaTransações particionadas por mês, aplicado em cada shard

Executar · com Docker

  1. docker compose up -d --wait# sobe PostgreSQL
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
PostgreSQL

Por que se relacionam

Teste rápido

Qual é o próximo passo depois de Sharding / Partitioning?

Próximo projeto · Escalabilidade & InfraestruturaService Discovery
Esc

↑ ↓ navegarEnter abrir191 resultados