База данных: что такое Multiversion Concurrency Control (MVCC) и кто его поддерживает? [закрытый]

недавно Джефф опубликовано относительно его проблемы с блокировками базы данных, связанными с чтением. управление параллелизмом мультиверсии (MVCC) утверждает, что решает эту проблему. Что это такое, и какие базы данных поддерживает?

обновлено: они поддерживают его (какие другие?)

  • oracle
  • postgresql

15 ответов


Oracle имеет отличную систему управления несколькими версиями с очень долгого времени (по крайней мере, с oracle 8.0)

следующее должно помочь.

  1. пользователь A запускает транзакцию и обновляет 1000 строк с некоторым значением во время T1
  2. пользователь B читает те же 1000 строк во время T2.
  3. пользователь A обновляет строку 543 со значением Y (исходное значение X)
  4. пользователь B достигает строки 543 и обнаруживает, что транзакция работает со времени Т1.
  5. база данных возвращает немодифицированную запись из журналов. Возвращаемое значение-это значение, которое было зафиксировано в момент меньше или равно T2.
  6. если запись не может быть восстановлена из журналов повтора, это означает, что база данных не настроена соответствующим образом. Нужно больше места для журналов.
  7. таким образом достигается согласие чтения. Возвращаемые результаты всегда одинаковы в отношении времени начала транзакции. Так в транзакция достигается согласованность чтения.

Я попытался объяснить в самых простых терминах...существует много multiversioning в базах данных.


управление параллелизмом нескольких версий PostgreSQL

а также в этой статье который показывает диаграммы того, как MVCC работает при выдаче инструкций INSERT, UPDATE и DELETE.


следующие имеют реализацию MVCC:

SQL Server 2005 (не по умолчанию, SET READ_COMMITTED_SNAPSHOT ON)

Oracle (начиная с версии 8)

MySQL 5 (только с таблицами InnoDB)

PostgreSQL

Жар

Informix

Я уверен, что Sybase и IBM DB2 Mainframe/LUW не имеют реализации MVCC


XtremeData dbX поддерживает MVCC.

кроме того, dbX может использовать примитивы SQL, реализованные на оборудовании FPGA.


Firebird делает это, они называют это MGA (Multi Generational Architecture).

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

Oracle перезаписывает сами данные и использует сегменты отката/отмены табличных пространств для других сеансов и отката.


SAP HANA также использует MVCC. SAP HANA - это полная вычислительная система в памяти, поэтому стоимость MVCC для select очень низкая... :)


здесь ссылка на страницу PostgreSQL doc на MVCC. Выбор цитаты (акцент мой):

основным преимуществом использования модели MVCC управления параллелизмом, а не блокировки является то, что в MVCC блокировки, полученные для запроса (чтения) данных, не конфликтуют с блокировками, полученными для записи данных, и поэтому чтение никогда не блокирует запись и запись никогда не блокирует чтение.

вот почему Джефф был так смущен его тупики. Чтение никогда не должно вызывать их.


SQL Server 2005 и выше предлагают MVCC в качестве опции; однако это не значение по умолчанию. MS называет это изоляцией моментальных снимков, если память служит.


MVCC также может быть реализован вручную, добавив столбец номера версии в таблицы и всегда делая вставки вместо обновлений.

стоимость этого намного больше базы данных, и медленнее выбирает, так как каждый из них нуждается в подзапросе, чтобы найти последнюю запись.

Это отличное решение для систем, которые требуют 100% аудита для всех изменений.


MySQL также использует MVCC по умолчанию, если вы используете таблицы InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html


McObject объявил в 11/09, что он добавил дополнительный менеджер транзакций MVCC в свою встроенную базу данных eXtremeDB:

http://www.mcobject.com/november9/2009

eXtremeDB, первоначально разработанный как система баз данных в памяти (IMDS), теперь доступен в версиях с гибридным (в памяти/на диске) хранения, высокой доступности, 64-разрядной поддержки и многое другое.


есть хорошее объяснение MVCC - с диаграммами - и некоторые номера производительности для eXtremeDB в этой статье, написанной соучредителем и генеральным директором McObject в журнале RTC:

http://www.rtcmagazine.com/articles/view/101612

очевидно, MVCC становится все более полезным в качестве масштаба приложения, чтобы включить многие задачи, выполняемые на нескольких ядрах процессора.


DB2 версии 9.7 имеет лицензионную версию postgress plus. Это означает, что эта функция (в правильном режиме) поддерживает эту функцию.


Berkeley DB также поддерживает MVCC.

и когда BDB двигатель хранения используется в MySQL, MySQL также поддерживает MVCC.

Berkeley DB - очень мощная, настраиваемая полностью кислотная СУБД. Он поддерживает несколько различных методов индексирования, репликации master-slave, может использоваться как хранилище чистых ключевых значений с собственным динамическим API или запрашиваться с SQL, если это необходимо. Стоит взглянуть.

другой документ, ориентированный на СУБД обнимать MVCC было бы CouchDB. MVCC здесь также является большим плюсом для встроенной одноранговой репликации.


от http://vschart.com/list/multiversion-concurrency-control/

Couchbase, OrientDB, В CouchDB, В PostgreSQL, Проект Волан-Де-Морт, С BigTable, Фирконом Сервера, HyperGraphDB, Моросить, Сервис Cloudant, В IBM ПО DB2, Корпорация InterSystems Caché И, В Interbase