Ответ
Пессимистическая блокировка (Pessimistic Locking) — это стратегия управления конкурентным доступом, при которой СУБД заранее блокирует строку или таблицу для изменения, предполагая высокую вероятность конфликта. Другие транзакции, пытающиеся получить доступ к тем же данным, вынуждены ждать снятия блокировки.
Ключевые особенности:
- Принцип: "Лучше заблокировать, чем потом разрешать конфликт".
- Использование: Критичные операции, где целостность данных важнее производительности (например, финансовые транзакции, списание остатков).
- Риски: Может приводить к взаимоблокировкам (deadlocks) и снижению параллелизма.
Пример реализации в SQL (MySQL/PostgreSQL):
-- Транзакция 1 блокирует строку для изменения
BEGIN TRANSACTION;
SELECT * FROM accounts WHERE id = 123 FOR UPDATE; -- Ключевая конструкция FOR UPDATE
-- Выполняем операции с данными...
UPDATE accounts SET balance = balance - 100 WHERE id = 123;
COMMIT; -- Блокировка снимается
-- Транзакция 2 будет ждать завершения Транзакции 1
BEGIN TRANSACTION;
SELECT * FROM accounts WHERE id = 123 FOR UPDATE; -- Этот запрос "зависнет" в ожидании
На практике я использовал пессимистические блокировки в системах бронирования и биллинга, где два пользователя не должны были одновременно купить последний билет или списать деньги с одного счета.