Sobes.tech
Senior

Cum funcționează blocarea optimistă cu câmpul de versiune? Explică în detaliu cu un exemplu de două tranzacții.

sobes.tech AI

Răspuns de la 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 позволяет избежать конфликтов без блокировок, предполагая, что коллизии редки. Если конфликт возникает, транзакция должна быть повторена или отменена.

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