Camada Zero · 26 · Sharding & Particionamento

Chega uma hora que o dado não cabe num nó só. Aí você divide entre vários (shards). Como dividir é a decisão: por hash distribui liso, por range mantém vizinhos juntos. Cada escolha resolve um problema e cria outro. Mexe nas duas estratégias aqui embaixo e olha a carga por shard.
4Shards
0Chaves
0Maior carga
0Menor carga
Range query tocou
Insere chaves nas duas estratégias e compara. Depois roda mostrar hotspot (chaves sequenciais, tipo timestamp) e veja o range concentrar tudo num shard só. A range query mostra quantos shards uma consulta por faixa precisa tocar.
carga normal tocado pela range query hotspot (sobrecarregado)
Sharding é a aula 27 (consistent hashing) aplicada a banco, com a aula 28 (replicação) e a 30 (CAP) por baixo. Guardar dado em escala não é um tópico separado: é a trilha de distribuídos aplicada.
EstratégiaGanhaPerde
Por hashdistribuição uniforme, sem hotspotrange query espalha por todos os shards
Por rangerange query local e rápidachave sequencial vira hotspot

Roteamento por shard key (Go)

// por hash: espalha uniforme, sem hotspot
func shardHash(key, n int) int {
    return int(fnv32(key)) % n
}

// por range: vizinhos no mesmo shard (range query local)
func shardRange(key int, bounds []int) int {
    // acha o primeiro limite > key (busca binária, aula 02)
    return sort.Search(len(bounds), func(i int) bool {
        return key < bounds[i]
    })
}

🧠 Desafio — Sharding

Mexe nas duas estratégias aqui de cima antes de responder, principalmente o hotspot e a range query. As duas últimas são de reflexão: escreve a sua e só então revela o modelo.