Что такое оптимистичные блокировки
1️⃣ Как кратко ответить
Оптимистичные блокировки — это метод управления конкурентным доступом к данным, при котором предполагается, что конфликтов при изменении данных не будет. Проверка на наличие конфликтов выполняется только в момент фиксации изменений. Если конфликт обнаружен, операция отклоняется, и пользователь должен повторить попытку.
2️⃣ Подробное объяснение темы
Оптимистичные блокировки — это подход к управлению конкурентным доступом к данным, который используется в системах, где предполагается, что конфликты при изменении данных будут редкими. В отличие от пессимистичных блокировок, где доступ к данным блокируется на время выполнения операции, оптимистичные блокировки позволяют нескольким пользователям одновременно работать с одними и теми же данными без предварительного блокирования.
Принцип работы
-
Чтение данных: Пользователь читает данные из базы данных. На этом этапе данные не блокируются, и другие пользователи могут также читать и изменять их.
-
Изменение данных: Пользователь вносит изменения в данные локально, не блокируя их в базе данных.
-
Проверка на конфликт: При попытке сохранить изменения в базу данных система проверяет, изменились ли данные с момента их последнего чтения. Это делается с помощью специального поля, например, версии записи или временной метки.
-
Фиксация изменений: Если данные не изменились, изменения фиксируются. Если данные были изменены другим пользователем, операция отклоняется, и пользователь должен повторить попытку.
Пример кода
Рассмотрим пример использования оптимистичных блокировок в 1С:
Процедура ОбновитьДанные(Знач Данные)
// Получаем текущую версию данных из базы
ТекущаяВерсия = ПолучитьТекущуюВерсию(Данные.Код);
// Проверяем, совпадает ли версия данных
Если Данные.Версия <> ТекущаяВерсия Тогда
// Если версии не совпадают, значит данные были изменены
ВызватьИсключение "Данные были изменены другим пользователем. Повторите попытку.";
КонецЕсли;
// Обновляем данные в базе
ОбновитьДанныеВБазе(Данные);
КонецПроцедуры
-
ПолучитьТекущуюВерсию(Данные.Код): Функция, которая возвращает текущую версию данных из базы данных. Это может быть временная метка или номер версии записи.
-
Если Данные.Версия <> ТекущаяВерсия Тогда: Проверка на наличие конфликта. Если версия данных, с которой работает пользователь, не совпадает с текущей версией в базе, значит, данные были изменены другим пользователем.
-
ВызватьИсключение: Если обнаружен конфликт, вызывается исключение, информирующее пользователя о необходимости повторить попытку.
-
ОбновитьДанныеВБазе(Данные): Процедура, которая обновляет данные в базе данных, если конфликтов не обнаружено.
Применение
Оптимистичные блокировки эффективны в системах с высокой степенью параллелизма и низкой вероятностью конфликтов, таких как системы управления контентом или приложения для совместной работы. Они позволяют улучшить производительность за счет уменьшения времени блокировки данных и увеличения доступности системы для пользователей.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться