DBAtlas · Atlas de operações de banco de dados

Decisão: sharding ou replicação (escalabilidade)?

A decisão de escalabilidade do banco depende de o gargalo estar nas leituras ou nas gravações e de os dados caberem em um único nó. A estratégia errada significa complexidade desnecessária ou um gargalo não resolvido. Esta árvore primeiro lembra as opções mais baratas e simples (escala vertical, cache) e depois ajuda a escolher corretamente entre read replicas e sharding.

Você tentou primeiro o caminho mais simples: escala vertical e tuning de consultas?

Antes de partir para uma arquitetura distribuída, aproveite o ganho mais barato: aumentar o hardware (CPU/RAM/IOPS), adicionar índices ausentes e corrigir consultas caras resolve a maioria dos gargalos. Adicione complexidade somente quando essas opções se esgotarem.

  • Não / ainda não cheguei ao limite
  • Sim, escala vertical e tuning não bastam

O gargalo está nas leituras, ou nas gravações/volume de dados?

Isole a origem do problema de escalabilidade: muitas consultas de leitura estão sufocando um único nó (carga de leitura), ou a taxa de gravação ou o tamanho total dos dados excede a capacidade de um único nó (carga de gravação/volume)? Essa distinção é a diferença fundamental entre réplicas e sharding.

  • O tráfego de leitura predomina, as gravações cabem em um único nó
  • A taxa de gravação ou o volume de dados excede um único nó

As leituras são repetitivas/cacheáveis, ou atuais e variadas?

Divida o gargalo de leitura mais um passo: os mesmos resultados são lidos repetidamente (um cache é muito eficaz), ou as leituras pedem dados variados, amplos e atuais (é necessária capacidade de leitura extra)? Isso decide entre uma camada de cache e read replicas.

  • Os mesmos dados são lidos repetidamente, uma leve defasagem é aceitável
  • Leituras variadas/atuais, é necessária capacidade bruta de leitura

Recomendação: escala vertical + tuning de consultas primeiro

O primeiro e mais barato caminho antes de partir para uma arquitetura distribuída. Aumentar o hardware e corrigir consultas/índices resolve a maioria dos problemas de escalabilidade sem adicionar complexidade operacional.

Recomendação: read replicas (escala de leitura)

As gravações permanecem em um único nó (o primário) enquanto o tráfego de leitura é distribuído para uma ou mais réplicas. É a forma padrão de aumentar a capacidade bruta de leitura e a resiliência em cargas com muitas leituras.

Recomendação: camada de cache

Manter resultados relidos com frequência em uma camada rápida em memória reduz drasticamente a carga do banco. Com o padrão correto, responde sem ir ao banco, reduzindo tanto a latência quanto a carga.

Recomendação: sharding (escala de gravação/dados)

Os dados são divididos por uma shard key e distribuídos entre vários nós independentes; cada nó é dono de uma fatia dos dados e de suas gravações. É a forma de escalar a taxa de gravação e o volume total de dados, mas adiciona complexidade significativa.

Abrir no DBAtlas →