Как реализовать MVCC?

Я нашел много ресурсов в Интернете, дающих общие обзоры концепций MVCC (управление многоверсионным параллелизмом), но нет подробных технических ссылок о том, как именно это должно работать или реализовываться. Есть ли какие-либо документы в Интернете или книги в автономном режиме, содержащие достаточно теории (и в идеале немного практической помощи), на которых можно основывать реализацию? Я хочу более или менее подражать тому, что делает PostgreSQL.

(Для информации я буду реализовывать его в SAS с использованием SAS/Share, который обеспечивает некоторые примитивы блокировки и одновременный доступ для чтения/записи к базовому хранилищу данных, но ничего в отношении изоляции транзакций или правильных функций СУБД. Если кто-то знаком с SAS/Share и считает, что это невыполнимая задача, пожалуйста, кричите!)


person jl6    schedule 03.03.2011    source источник
comment
Есть ли какая-то причина, по которой вы хотите использовать SAS/SHARE, а не, скажем, РСУБД?   -  person sasfrog    schedule 04.03.2011
comment
Руководители ИТ-отделов/проектов каменного века, у которых есть интересные мнения о концепции использования правильного инструмента для работы.   -  person jl6    schedule 27.03.2011
comment
Вот это да. И их не смущает, что вы высекаете плоский круглый предмет из скалы в поле, окруженном торговцами колесами?!   -  person sasfrog    schedule 27.03.2011


Ответы (3)


Обработка транзакций: концепции и методы и Транзакционные информационные системы: теория, алгоритмы и практика управления параллелизмом и восстановления являются официальным источником обработки транзакций.

Обе эти книги также упоминаются в PostgreSQL Wiki.

person Zimbabao    schedule 03.03.2011

Я написал сообщение в блоге об этом:

https://elliot.land/post/implementing-your-own-transactions-with-mvcc

person Elliot Chance    schedule 20.12.2015
comment
@Matt - спасибо, что сообщили мне. Я исправил ссылку. - person Elliot Chance; 03.06.2019

Таблица в PostgreSQL может хранить несколько версий одной и той же строки.

Более того, есть два дополнительных столбца:

  • tmin — маркировка идентификатора транзакции, которая вставила строку
  • tmax — пометка идентификатора транзакции, которая удалила строку

Обновление выполняется путем удаления и вставки новой записи, а процесс VACUUM собирает старые версии, которые больше не используются.

person Vlad Mihalcea    schedule 01.03.2017