Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
🖥 Оптимистичная и пессимистичная блокировка в базах данных

Оптимистичная блокировка предполагает, что конфликтов при параллельном доступе к данным будет мало. Изменения данных происходят без блокировки, но при попытке сохранения изменений проверяется, что данные не изменились с момента последнего чтения.

Алгоритм:
1️⃣ Чтение данных.
2️⃣ Обновление данных в памяти.
3️⃣ Попытка записи изменений с проверкой версии или временной метки.
4️⃣ Если данные были изменены другим процессом, транзакция откатывается и повторяется.

Например, можно использовать поле version в таблице. При чтении данных запоминаем значения этого поля, а записываем данные с условием что поле version не изменилось. SQL-запрос может быть примерно таким:

update table set field1='data1', field2='data2', version=<version>+1 where id=<id> and version=<version>

После выполнения запроса нужно проверить сколько записей обновилось, если ни одной, то значит другой процесс изменил запись, и нужно начать с начала.

Пессимистичная блокировка предполагает, что конфликты будут частыми. Данные блокируются при чтении, чтобы предотвратить их изменение другими транзакциями до завершения текущей транзакции.

Алгоритм:
1️⃣ Чтение данных с блокировкой.
2️⃣ Обновление данных.
3️⃣ Запись изменений.
4️⃣ Снятие блокировки после завершения транзакции.

Как пример, может быть использован запрос SELECT ... FOR UPDATE для блокировки строк при чтении.

#java #database #optimistic #pessimistic #locking
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54