Sobes.tech
Junior — Middle

Můžeš mluvit o různých metodách rozdělení dat v databázi pro škálování?

sobes.tech AI

Odpověď od AI

Pro škálování databází se často používají různé metody rozdělení dat:

  • Sharding (Rozdělení na shardy) — rozdělení dat na části (shardy) podle určitého klíče. Každý shard je uložen na samostatném serveru. Například uživatelé s ID od 1 do 10 000 na jednom shardu, od 10 001 do 20 000 na jiném.

  • Replikace — kopírování dat na více serverů za účelem zvýšení dostupnosti a odolnosti vůči chybám. Záznamy se zapisují na master, čtení může probíhat z replik.

  • Partitioning (Dělení) — logické rozdělení tabulek v rámci jedné databáze podle rozsahů nebo hash funkcí.

  • Caching (Ukládání do mezipaměti) — uchovávání často požadovaných dat v paměti (Redis, Memcached) ke snížení zátěže databáze.

Příklad sharding na základě hash funkce:

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

Tato metoda umožňuje rovnoměrné rozdělení dat mezi více shardů.