Ответ
При использовании Master-Slave репликации в БД, если данные записаны в Master, но ещё не реплицированы в Slave, чтение из Slave вернёт устаревшие данные. Это называется "чтение с задержкой" (read-after-write inconsistency).
Пример с MySQL и Golang:
// Запись в Master
_, err := masterDB.Exec("INSERT INTO users (name) VALUES (?)", "Alice")
if err != nil {
log.Fatal(err)
}
// Чтение из Slave (может не видеть новую запись)
var name string
err = slaveDB.QueryRow("SELECT name FROM users WHERE id = LAST_INSERT_ID()").Scan(&name)
if err != nil {
log.Println("User not found in Slave yet:", err)
}
Как избежать:
- Читать критичные данные только из Master.
- Использовать синхронную репликацию (но это снижает производительность).
- Проверять задержку репликации и ждать, если она критична.