Оптимистичный подход выявляет конфликт при записи по версии, пессимистичный заранее блокирует нужные строки. Выбор зависит от частоты конфликтов и длительности операции.
Расскажите про подходы к concurrency при одновременном изменении данных в БД двумя потоками (оптимистичный и пессимистичный).
Оптимистичный подход выявляет конфликт при записи по версии, пессимистичный заранее блокирует нужные строки. Выбор зависит от частоты конфликтов и длительности операции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Оптимистичный подход выявляет конфликт при записи по версии, пессимистичный заранее блокирует нужные строки. Выбор зависит от частоты конфликтов и длительности операции.
При оптимистичном обновлении условие включает прежнюю версию: UPDATE ... WHERE id = :id AND version = :old. Ноль обновлённых строк означает конфликт, который нужно обработать, а не молча перезаписать данные.
При пессимистичном подходе строку читают с блокировкой внутри короткой транзакции, например SELECT FOR UPDATE. Возможны ожидания и deadlock, поэтому важны единый порядок захвата и таймауты. Два потока приложения могут находиться на разных серверах; внутрипроцессный lock тогда не защищает общую БД.