Sobes.tech
Junior — Middle

Podes falar sobre os diferentes métodos de distribuição de dados numa base para escalabilidade?

sobes.tech IA

Resposta da IA

Para escalar bases de dados, frequentemente utilizam-se vários métodos de distribuição de dados:

  • Sharding (Particionamento) — dividir os dados em partes (shards) com base numa chave específica. Cada shard é armazenado num servidor separado. Por exemplo, utilizadores com IDs de 1 a 10.000 num shard, de 10.001 a 20.000 noutro.

  • Replicação — copiar dados para vários servidores para aumentar a disponibilidade e resistência a falhas. As gravações são feitas no mestre, as leituras podem ser feitas a partir das réplicas.

  • Particionamento — divisão lógica de tabelas dentro de uma mesma base por intervalos ou funções hash.

  • Caching — armazenamento em memória de dados frequentemente solicitados (Redis, Memcached) para reduzir a carga na base.

Exemplo de sharding baseado numa função hash:

func getShard(key string, shardCount int) int {
    h := fnv.New32a()
    h.Write([]byte(key))
    return int(h.Sum32()) % shardCount
}

Este método permite distribuir uniformemente os dados por vários shards.