Коротко про блокування - software development and related activities

Блокування - в реляційних базах даних це установка мітки на запис, що запис заблоковано для змін. Існує два види блокувань - оптимістична і песимістична.

оптимістична блокування

При оптимістичній блокування на базі даних реальної блокування не відбувається. Замість цього використовується наступний підхід - якщо під час виконання транзакції вона змінює дані, які були змінені після її початку, то транзакція переривається з виключенням. Використання оптимістичних блокувань дозволяє уникнути взаємних блокувань (dead-lock). Для реалізації оптимістичною блокування часто використовується Версіонування даних - в таблицю додається колонка, яка зберігає поточну версію. При виконанні update в запиті в секції where передається версія даних, яка була забрана на зміну. Якщо update повернув 0 змінених рядків, значить дані були вже змінені і транзакцію необхідно запускати заново. Замість версії можна зберігати час останньої зміни даних.

песимістична блокування

При песимістичною блокування для запису ставиться ексклюзивна блокування на рівні бази даних, забороняючи таким чином доступ до даних з інших транзакцій. Існує кілька видів песимістичних блокувань:
  1. блокування при читанні
  2. блокування при записі
При блокуванні при читанні запис блокується коли вона запитується з бази даних. Недолік методу в тому, що таким чином можна заблокувати навіть ті дані, які не змінюються в рамках поточної транзакції. При блокуванні при запису блокування даних відбувається при їх оновленні в базі даних до кінця поточної транзакції. Блокування з даних знімається або при Ком, або при відкат транзакції.

Порівняння оптимістичних і песимістичних блокувань

При розробці програмного забезпечення необхідно вибирати стратегію блокувань даних. При цьому слід враховувати наступне:
  1. Якщо ситуація поновлення одних і тих же даних в один момент часу щодо рідкісна, то вигідніше використовувати оптимістичну блокування. В цьому випадку не будуть відбуватися дорога операція блокування ресурсів.
  2. Якщо ж можливість виникнення ситуації поновлення одних і тих же даних досить висока, то краще використовувати песимістичну блокування, це знизить кількість перерваних транзакцій.
  3. Також слід враховувати, що при оптимістичною блокування в разі переривання транзакції її потрібно запускати заново.