> Что такое грязное чтение, фантомное чтение и неповторяемое чтение в транзакциях (Go)
Уровень: junior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
Грязное чтение (dirty read) - чтение данных, которые были изменены другой транзакцией, но ещё не зафиксированы (не выполнен COMMIT). Если та транзакция откатится, прочитанные данные окажутся некорректными.
Пример: транзакция A обновляет баланс пользователя с 100 на 200, транзакция B читает 200, затем A откатывается - B видит несуществующее значение.
Неповторяемое чтение (non-repeatable read) - ситуация, когда при повторном чтении одной и той же строки в рамках одной транзакции получаются разные результаты из-за того, что другая транзакция изменила и зафиксировала эту строку между двумя чтениями.
Пример: транзакция A читает баланс = 100, транзакция B обновляет его до 200 и фиксирует, A снова читает - получает 200.
Фантомное чтение (phantom read) - при повторном выполнении одного и того же запроса в рамках транзакции появляются новые строки (или исчезают старые), которые были добавлены (или удалены) другой зафиксированной транзакцией.
Пример: транзакция A запрашивает пользователей с балансом > 0, получает 2 строки; транзакция B добавляет нового пользователя с балансом 50 и фиксирует; A повторяет запрос - видит 3 строки.
Уровни изоляции транзакций в SQL (и Go-драйверах, например, database/sql) решают эти проблемы:
- READ UNCOMMITTED - допускает грязное чтение.
- READ COMMITTED - предотвращает грязное чтение, но допускает неповторяемое и фантомное.
- REPEATABLE READ - предотвращает грязное и неповторяемое чтение, но допускает фантомное.
- SERIALIZABLE - полностью исключает все три аномалии.
> Похожие задачи по Go
Чем должна отличаться новая компания от текущей
Как должна выглядеть компания, в которую хочешь пойти работать
Как принимается решение, кому звонить при проблемах в нерабочее время
Как обнаружить, что процесс начал занимать больше времени
> Похожие задачи по backend
Чем должна отличаться новая компания от текущей
Как должна выглядеть компания, в которую хочешь пойти работать
Как принимается решение, кому звонить при проблемах в нерабочее время
Как обнаружить, что процесс начал занимать больше времени
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью