Sobes.tech
Junior — Middle

Czy możesz opowiedzieć o różnych metodach rozkładu danych w bazie danych w celu skalowania?

sobes.tech AI

Odpowiedź od AI

Aby skalować bazy danych, często stosuje się różne metody rozkładu danych:

  • Sharding (Partycjonowanie) — dzielenie danych na części (shardy) według określonego klucza. Każdy shard jest przechowywany na osobnym serwerze. Na przykład użytkownicy z ID od 1 do 10 000 na jednym shardzie, od 10 001 do 20 000 na innym.

  • Replikacja — kopiowanie danych na kilka serwerów w celu zwiększenia dostępności i odporności na awarie. Zapisy trafiają do głównego serwera, odczyty mogą pochodzić z replik.

  • Partycjonowanie — logiczne dzielenie tabel w obrębie jednej bazy na podstawie zakresów lub funkcji hash.

  • Caching (Buforowanie) — przechowywanie często żądanych danych w pamięci (Redis, Memcached), aby zmniejszyć obciążenie bazy.

Przykład sharding oparty na funkcji hash:

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

Metoda ta pozwala równomiernie rozkładać dane na kilka shardów.