Оптимистичная блокировка
Оптимистическая блокировка - это метод, когда вы читаете строку, записываете номер версии, метку последнего изменения или контрольную сумму. Затем вы можете атомарно проверить, не изменилась ли версия, прежде чем изменить запись.
Обновление таблицы products повлияет на 0 строк, если ранее это строка была изменена другим обновлением. Если ранее никаких обновлений не было, то обновление затронет 1 строку, и мы можем сказать, что наше обновление прошло успешно.
Отличие от пессимистичной блокировки¶
В случае пессимистичной блокировки мы всегда лочим запись при запросе из БД, но, возможно, в процессе мы поймем, что не хотим ее менять. Тем не менее, запись уже была заблокирована. В случае оптимистической блокировки мы просто не сохраняем объявление.
Пессимистичная блокировка может привести к дедлокам, в отличие от оптимистичной.
Когда использовать?¶
- Конфликты случаются редко или дешевый перезапуск транзакции
- Необходимо использовать заблокированные данные вне транзакции, например, передать для редактирование в UI.