Pular para o conteúdo principal

Key-Range Partitions

Descrição​

Key-Range Partitions divide o espaço de chaves ordenadas em intervalos contíguos, e cada intervalo vira uma partição lógica. As partições são então atribuídas aos nós do cluster. Chaves próximas na ordem ficam na mesma partição, o que torna eficientes as leituras por faixa.

Uma consulta por intervalo (por exemplo, nomes de "a" a "f") é roteada apenas às partições cujos intervalos se sobrepõem à faixa pedida, sem varrer o cluster inteiro. O mapa de intervalos → nós precisa ficar disponível para quem roteia as requisições.

Como a distribuição das chaves nem sempre é uniforme, sistemas que usam esse padrão costumam dividir (split) uma partição que cresceu demais ou ficou quente, e mesclar partições pequenas. Isso é uma prática comum em bancos como HBase, CockroachDB e TiKV, não parte essencial do padrão.

Problemas que resolve​

  • Com particionamento por hash, uma consulta por faixa de chaves precisa consultar todas as partições.
  • É preciso manter a ordem das chaves para varreduras (scans) sequenciais eficientes.
  • É preciso localizar rapidamente as partições que cobrem um dado intervalo.
  • O tamanho das partições deve poder acompanhar a distribuição real dos dados.

Quando usar​

  • Cargas com consultas por intervalo ou varreduras ordenadas frequentes.
  • Armazenamentos ordenados de chave-valor ou tabulares (estilo Bigtable).
  • Quando o volume de dados cresce de forma imprevisível e as partições precisam se dividir dinamicamente.

Quando evitar​

  • Quando as chaves são monotônicas (timestamps, IDs sequenciais): as escritas se concentram na última partição, criando um ponto quente.
  • Quando só há acesso por chave exata e a uniformidade de carga é prioridade (prefira Fixed Partitions).
  • Quando não há infraestrutura para manter o mapa de intervalos e coordenar divisões.

Trade-offs​

GanhoCusto / Risco
Consultas por faixa acessam poucas partiçõesRisco de pontos quentes com chaves sequenciais ou populares
Ordem das chaves preservadaDistribuição de carga menos uniforme que o hash
Partições podem se dividir conforme os dados crescemA divisão e a movimentação exigem coordenação e consistência do mapa
Localização por busca no mapa de intervalosMetadados mais complexos que uma função de hash
  • Escolher bem os limites iniciais (pré-divisão) evita concentrar a carga no começo.
  • A atualização do mapa de intervalos precisa ser consistente, senão clientes roteiam para o nó errado.
  • Observabilidade: monitorar tamanho e taxa de requisições por intervalo.

Diagrama​

A consulta é roteada apenas à partição cujo intervalo cobre a faixa pedida; as demais partições não são acessadas.

Padrões relacionados​

  • Fixed Partitions — alternativa baseada em hash, sem suporte eficiente a faixas
  • Consistent Core — mantém o mapeamento de partições de forma consistente
  • Sharding (nuvem) — particionamento horizontal, incluindo estratégia por intervalo

Referência​