Можно ли сделать и запись и чтение из разных шардов

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

Ответ

Да, можно. В распределённых системах чтение и запись могут выполняться из разных шардов, но это требует правильной настройки репликации и балансировки. Например, в PostgreSQL с использованием Citus или в MongoDB с шардированными кластерами.

Пример на Go с MongoDB:

// Запись в primary шард
_, err := client.Database("test").Collection("users").InsertOne(ctx, user)
if err != nil { /* обработка ошибки */ }

// Чтение из secondary шарда
opts := options.Find().SetReadPreference(readpref.Secondary())
cursor, err := client.Database("test").Collection("users").Find(ctx, bson.M{}, opts)

Важно учитывать:

  1. Задержки репликации (возможны stale reads)
  2. Настройки consistency level
  3. Распределение нагрузки между шардами

Для критичных данных рекомендуется использовать чтение из primary.