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.
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 normaltocado pela range queryhotspot (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égia
Ganha
Perde
Por hash
distribuição uniforme, sem hotspot
range query espalha por todos os shards
Por range
range query local e rápida
chave sequencial vira hotspot
Roteamento por shard key (Go)
// por hash: espalha uniforme, sem hotspotfuncshardHash(key, n int) int {
returnint(fnv32(key)) % n
}
// por range: vizinhos no mesmo shard (range query local)funcshardRange(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.