Sobes.tech
Назад к вопросам
Senior
3

Как работает optimistic locking с полем version? Объясни детально на примере двух транзакций.

Компании, где спрашивали
EXPERA

Ответ от нейросети

sobes.tech AI

Optimistic locking с полем version — это стратегия управления конкурентным доступом к данным, при которой каждая запись в базе данных содержит поле версии (например, целочисленное). При обновлении записи транзакция проверяет, что версия записи не изменилась с момента чтения, и увеличивает её.

Пример с двумя транзакциями:

  1. Транзакция A читает запись с version = 1.
  2. Транзакция B тоже читает ту же запись с version = 1.
  3. Транзакция A изменяет данные и пытается сохранить запись, проверяя, что версия всё ещё 1. Обновление проходит успешно, версия увеличивается до 2.
  4. Транзакция B пытается сохранить свои изменения, проверяя, что версия равна 1. Но версия уже стала 2 после обновления A.
  5. Обновление B отклоняется (обычно выбрасывается исключение), так как данные устарели.

Таким образом, optimistic locking позволяет избежать конфликтов без блокировок, предполагая, что коллизии редки. Если конфликт возникает, транзакция должна быть повторена или отменена.

Это обеспечивает целостность данных при параллельных изменениях, предотвращая потерю обновлений.