Назад к вопросам
Senior
3
Как работает optimistic locking с полем version? Объясни детально на примере двух транзакций.
Компании, где спрашивали
EXPERA
Ответ от нейросети
sobes.tech AI
Optimistic locking с полем version — это стратегия управления конкурентным доступом к данным, при которой каждая запись в базе данных содержит поле версии (например, целочисленное). При обновлении записи транзакция проверяет, что версия записи не изменилась с момента чтения, и увеличивает её.
Пример с двумя транзакциями:
- Транзакция A читает запись с
version = 1. - Транзакция B тоже читает ту же запись с
version = 1. - Транзакция A изменяет данные и пытается сохранить запись, проверяя, что версия всё ещё 1. Обновление проходит успешно, версия увеличивается до 2.
- Транзакция B пытается сохранить свои изменения, проверяя, что версия равна 1. Но версия уже стала 2 после обновления A.
- Обновление B отклоняется (обычно выбрасывается исключение), так как данные устарели.
Таким образом, optimistic locking позволяет избежать конфликтов без блокировок, предполагая, что коллизии редки. Если конфликт возникает, транзакция должна быть повторена или отменена.
Это обеспечивает целостность данных при параллельных изменениях, предотвращая потерю обновлений.