Вопрос проверяет понимание подходов к управлению конкурентным доступом без жёстких блокировок.
Оптимистическая блокировка — это метод контроля конкуренции, при котором блокировка не ставится заранее. Вместо этого при сохранении проверяется, изменились ли данные с момента чтения. Если изменились, операция отклоняется и повторяется. Обычно используется поле версии или timestamp.
Оптимистическая блокировка основана на предположении, что конфликты происходят редко.
Алгоритм:
запись читается вместе с версией
пользователь изменяет данные
при записи выполняется проверка версии
если версия изменилась — возникает конфликт
Таблица:
id | balance | version
Обновление:
UPDATE account
SET balance = 200, version = version + 1
WHERE id = 1 AND version = 3;
Если строка не обновилась:
значит версия изменилась
нужно повторить операцию
Подходит:
web-приложения
редкие конфликты
высокая конкуренция чтения
Не подходит:
частые конфликты
финансовые транзакции высокой критичности
Оптимистическая:
нет блокировки при чтении
проверка при записи
Пессимистическая:
блокировка сразу
гарантированное отсутствие конфликтов
Оптимистическая блокировка уменьшает блокировки и повышает масштабируемость, но требует обработки конфликтов при записи.