digital-garden/_inbox/MVCC.md

34 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
tags:
- зрелость/🌱
date:
- - 2024-06-19
zero-link:
- "[[00 Базы Данных]]"
parents:
- "[[Транзакция БД]]"
linked:
---
Реализация может отличаться в зависимости от СУБД.
У каждой транзакции есть идентификатор. У каждой записи появляется мета-информация updated_by(tx_id) и deleted_by(tx_id). На основе этой информации можно понять видит ли транзакция эту запись или нет.
Например:
- deleted_by(n+1). Транзакция n эту запись видит.
- deleted_by(n-4). Транзакция n эту запись не видит.
В начале каждой транзакции база данных создает список всех остальных выполняемых на текущий момент транзакций (но еще не зафиксированных или прерванных). Все выполненные этими транзакциями изменения игнорируются, даже если впоследствии они будут зафиксированы.
Все операции записи, выполненные прерванными транзакциями, игнорируются.
Все операции записи, выполненные транзакциями с более поздним идентификатором транзакции (то есть начавшиеся после запуска текущей транзакции), игнорируются независимо от того, были ли они зафиксированы.
Результаты всех остальных операций записи видны запросам приложения.
Проблемы:
- Работа с индексами.
- Не модифицировать страницы, а создавать новые, вплоть до корня.
- Хранить в индексе все версии
## Дополнительные материалы
- [MVCC in PostgreSQL-1. Isolation / Хабр](https://habr.com/ru/company/postgrespro/blog/467437/)