Вопрос проверяет понимание механизмов изоляции транзакций в СУБД.
СУБД используют два основных подхода:
Блокировки (pessimistic) - запрещают доступ к данным
Версионность (optimistic) - работа со снимками данных
MVCC (Multiversion Concurrency Control) - комбинированный подход
Основные механизмы:
Блокировки (Locking)
Exclusive locks (X) - для записи
Shared locks (S) - для чтения
Проблемы: deadlocks, снижение производительности
Управление версиями (MVCC)
Каждая транзакция видит снимок данных на момент своего начала
Postgres хранит несколько версий строк
Автоматическая очистка старых версий (VACUUM)
Гибридные подходы
Оптимистичные блокировки для чтения
Пессимистичные для записи
Пример в Postgres:
BEGIN;
SELECT * FROM accounts WHERE id = 1; -- Снимок данных
UPDATE accounts SET balance = 100 WHERE id = 1; -- Создает новую версию строки
COMMIT;