Расскажите про подходы к concurrency при одновременном изменении данных в БД двумя потоками (оптимистичный и пессимистичный).

Оптимистичный подход выявляет конфликт при записи по версии, пессимистичный заранее блокирует нужные строки. Выбор зависит от частоты конфликтов и длительности операции.

Короткий ответ

Что ответить на собеседовании

Оптимистичный подход выявляет конфликт при записи по версии, пессимистичный заранее блокирует нужные строки. Выбор зависит от частоты конфликтов и длительности операции.

Подробный разбор

Ответ с пояснениями

Оптимистичный подход выявляет конфликт при записи по версии, пессимистичный заранее блокирует нужные строки. Выбор зависит от частоты конфликтов и длительности операции.

При оптимистичном обновлении условие включает прежнюю версию: UPDATE ... WHERE id = :id AND version = :old. Ноль обновлённых строк означает конфликт, который нужно обработать, а не молча перезаписать данные.

При пессимистичном подходе строку читают с блокировкой внутри короткой транзакции, например SELECT FOR UPDATE. Возможны ожидания и deadlock, поэтому важны единый порядок захвата и таймауты. Два потока приложения могут находиться на разных серверах; внутрипроцессный lock тогда не защищает общую БД.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее