Ответ
Да, можно. В распределённых системах чтение и запись могут выполняться из разных шардов, но это требует правильной настройки репликации и балансировки. Например, в 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)
Важно учитывать:
- Задержки репликации (возможны stale reads)
- Настройки consistency level
- Распределение нагрузки между шардами
Для критичных данных рекомендуется использовать чтение из primary.