Как мне реализовать MVCC? - PullRequest
       43

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

7 голосов
/ 03 марта 2011

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

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

Ответы [ 3 ]

2 голосов
/ 03 марта 2011
1 голос
/ 01 марта 2017

Я написал в блоге сообщение о , как MVCC работает в PostgreSQL .По сути, таблица в PostgreSQL может хранить несколько версий одной и той же строки.

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

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

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

0 голосов
/ 20 декабря 2015

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

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

...