В чем разница между шардированием и репликацией

«В чем разница между шардированием и репликацией» — вопрос из категории Базы данных, который задают на 26% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Шардирование — это горизонтальное разделение данных между разными серверами (шардами), где каждый шард хранит свою часть данных. Увеличивает пропускную способность.

Репликация — это копирование одних и тех же данных на несколько серверов (реплик). Повышает отказоустойчивость и читающую производительность.

Пример шардирования в Go:

func getShard(userID string) int {
    hash := fnv.New32a()
    hash.Write([]byte(userID))
    return int(hash.Sum32() % 10) // 10 шардов
}

Пример репликации:

func writeToAllReplicas(data []byte) {
    for _, replica := range replicas {
        replica.Write(data) // пишем во все реплики
    }
}

Ключевое отличие: шардирование распределяет нагрузку, репликация дублирует данные.