Вопрос проверяет понимание стратегий управления конкурентным доступом к данным в базах данных и распределенных системах.
Оптимистичная блокировка (optimistic locking) и пессимистичная блокировка (pessimistic locking) — это два подхода к управлению одновременным доступом к данным. Оптимистичная блокировка предполагает, что конфликты между транзакциями происходят редко, поэтому она не блокирует данные сразу, а проверяет их целостность только в момент фиксации. Пессимистичная блокировка, наоборот, исходит из того, что конфликты вероятны, и блокирует ресурс на всё время работы с ним.
При оптимистичной блокировке каждая транзакция читает данные, работает с ними, а перед записью проверяет, не изменились ли они другой транзакцией. Обычно это реализуется через версионирование (поле version) или временные метки. Если данные изменились, транзакция откатывается и повторяется.
-- Пример с версией в SQL
UPDATE products
SET price = 100, version = version + 1
WHERE id = 1 AND version = 5;
-- Если затронуто 0 строк — конфликтПессимистичная блокировка блокирует строку или таблицу сразу при чтении, не позволяя другим транзакциям изменять данные до завершения текущей. Это гарантирует, что никто не вмешается, но снижает производительность при высокой нагрузке.
-- Пример с SELECT FOR UPDATE в SQL
BEGIN;
SELECT * FROM products WHERE id = 1 FOR UPDATE;
-- Другие транзакции ждут
UPDATE products SET price = 100 WHERE id = 1;
COMMIT;Вывод: выбор зависит от сценария — оптимистичная блокировка проще и быстрее при редких конфликтах, пессимистичная надёжнее при частых изменениях.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
Postgres
SQL
Ключевые слова
Подпишись на Golang Developer в телеграм