Как масштабируются СУБД

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

Ответ

Горизонтальное масштабирование (шардинг) — разделение данных на части (шарды) и распределение их по разным серверам. Пример с PostgreSQL:

// Упрощенный пример шардинга по модулю
func getShard(userID int) string {
    shards := []string{"db1:5432", "db2:5432", "db3:5432"}
    return shards[userID % len(shards)]
}

Вертикальное масштабирование — увеличение ресурсов сервера (CPU, RAM, диски). Подходит для нагрузок, где шардинг избыточен.

Репликация — master-slave архитектура для чтения/записи. Например, в MongoDB:

// Подключение к репликасету
client, err := mongo.Connect(ctx, options.Client().ApplyURI(
    "mongodb://primary:27017,secondary1:27017,secondary2:27017/?replicaSet=myReplicaSet",
))

Кэширование (Redis/Memcached) и read-only реплики снижают нагрузку на master.

Для OLTP-нагрузок часто комбинируют подходы: шардинг + репликация.