Sobes.tech
Junior — Middle

Môžete rozprávať o rôznych metódach rozdeľovania dát v databáze na škálovanie?

sobes.tech AI

Odpoveď od AI

Za skalovanie databáz sa často používajú rôzne metódy rozdeľovania dát:

  • Sharding (Rozdeľovanie) — rozdelenie dát na časti (shardy) podľa určitého kľúča. Každý shard je uložený na samostatnom serveri. Napríklad používatelia s ID od 1 do 10 000 na jednom sharde, od 10 001 do 20 000 na inom.

  • Replikácia — kopírovanie dát na viacero serverov na zvýšenie dostupnosti a odolnosti voči chybám. Záznamy sa zapisujú na master, čítania môžu byť z replik.

  • Partitioning (Delenie) — logické rozdelenie tabuliek v rámci jednej databázy podľa rozsahov alebo hash funkcií.

  • Caching (Ukladanie do vyrovnávacej pamäte) — uchovávanie často požadovaných dát v pamäti (Redis, Memcached) na zníženie záťaže na databázu.

Príklad sharding na základe hash funkcie:

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

Táto metóda umožňuje rovnomerné rozdeľovanie dát medzi viaceré shardy.