Изолированность транзакций в БД: MVCC, блокировки
Изолированность транзакций в БД гарантирует, что параллельные транзакции не влияют друг на друга. Предотвращает видимость промежуточных результатов транзакции для других до её завершения, сохраняя целостность данных. Это одно из свойств ACID.
Как обеспечить изолированность
- MVCC (multiversion concurrency control) — создание отдельной версии данных для каждой транзакции.
- Блокировка — ограничение доступа к данным.
MVCC
Принцип работы
Во время транзакции создается копия данных, в которой происходят изменения:
- Если транзакция завершилась успешно, копия становится основным источником, старая версия удаляется.
- Если во время транзакции произошла ошибка, старая версия остается основной, а копия удаляется.
Пример
Два пользователя одновременно меняют карточку товара:
- Они открывают карточку товара, создается две копии записи о товаре.
- Одновременно меняют поля товара. Обе копии могут стать основной записью.
- Перед сохранением БД пытается слить две записи в одну.
- Если конфликтов нет (менялись разные поля), транзакции завершаются успешно.
- Если появились конфликты, обе транзакции откатываются.