База данных: что такое Multiversion Concurrency Control (MVCC) и кто его поддерживает?
Недавно Джефф опубликовал в отношении своей проблемы с привязками к базе данных, связанным с чтением. Многопоточность Concurrency Контроль (MVCC) утверждает, что разрешает эту проблему. Что это такое и какие базы данных поддерживают его?
обновлено: они поддерживают его (какие другие?)
Ответы
Ответ 1
Oracle имеет отличную систему управления несколькими версиями на месте с очень долгого (по крайней мере, с oracle 8.0)
Следующее должно помочь.
- Пользователь A запускает транзакцию и обновляет 1000 строк с некоторым значением At Time T1
- Пользователь B считывает те же 1000 строк в момент времени T2.
- Пользователь A обновляет строку 543 со значением Y (исходное значение X)
- Пользователь B достигает строки 543 и обнаруживает, что транзакция работает со времен T1.
- База данных возвращает немодифицированную запись из журналов. Возвращаемое значение - это значение, которое было зафиксировано в момент времени, меньший или равный T2.
- Если запись не может быть восстановлена из журналов повтора, это означает, что база данных не настроена соответствующим образом. Для журналов должно быть больше места.
- Таким образом достигается согласованность чтения. Возвращенные результаты всегда совпадают с временем начала транзакции. Таким образом, внутри транзакции достигается согласованность чтения.
Я попытался объяснить в самых простых условиях, возможно... много многообразий в базах данных.
Ответ 2
PostgreSQL Multi-Version Concurrency Контроль
Также как эта статья, в которой представлены схемы того, как работает mvCC при выдаче операторов iNSERT, UPDATE и DELETE.
Ответ 3
Ниже приведена реализация MVCC:
SQL Server 2005 (не по умолчанию, SET READ_COMMITTED_SNAPSHOT ON
)
Oracle (начиная с версии 8)
MySQL 5 (только с таблицами InnoDB)
PostgreSQL
Жар
Informix
Я уверен, что Sybase и IBM DB2 Mainframe/LUW не имеют реализации MVCC
Ответ 4
Firebird делает это, они называют это MGA (Multi Generational Architecture).
Они сохраняют исходную версию неповрежденной и добавляют новую версию, которую может видеть только ее сеанс, когда старая устаревшая версия отключена, а более новая версия включена для всех (файл заполняется данными и потребностями регулярная очистка).
Oracle перезаписывает сами данные и использует сегменты отката/отмены табличных пространств для других сеансов и откаты.
Ответ 5
XtremeDatastrong > dbX поддерживает MVCC.
Кроме того, dbX может использовать примитивы SQL, реализованные в аппаратном обеспечении FPGA.
Ответ 6
SAP HANA также использует MVCC.
SAP HANA - это полная вычислительная система с памятью, поэтому затраты MVCC для выбора очень низкие...:)
Ответ 7
Вот ссылка на страницу документа PostgreSQL в MVCC. Цитата выбора (выделение мое):
Основным преимуществом использования MVC-модели управления concurrency, а не блокировки, является то, что в блокировании MVCC, полученные для запросов (чтения), не конфликтуют с блокировками, полученными для записи данных, и поэтому чтение никогда не блокирует запись и запись никогда не блокирует чтение.
Вот почему Джефф был так смущен своими тупиками. Чтение никогда не должно их вызывать.
Ответ 8
SQL Server 2005 и предлагать MVCC в качестве опции; однако это не значение по умолчанию. MS называет это изоляцией моментального снимка, если память используется.
Ответ 9
MVCC также может быть реализован вручную, добавив столбец номера версии в свои таблицы и всегда делая вставки вместо обновлений.
Стоимость этого - намного большая база данных, и медленнее выбирает, так как каждому нужен подзапрос, чтобы найти самую последнюю запись.
Это отличное решение для систем, требующих 100% аудита для всех изменений.
Ответ 10
MySQL также использует MVCC по умолчанию, если вы используете таблицы InnoDB:
http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html
Ответ 11
McObject объявила в 11/09, что добавила дополнительный менеджер транзакций MVCC в свою встроенную базу данных eXtremeDB:
http://www.mcobject.com/november9/2009
eXtremeDB, первоначально разработанный как система баз данных в памяти (IMDS), теперь доступен в версиях с гибридным (встроенным/на диске) хранилищем, высокой доступностью, поддержкой 64-разрядной версии и т.д.
Ответ 12
Там хорошее объяснение MVCC - с диаграммами - и некоторые показатели производительности для eXtremeDB в этой статье, написанной соучредителем и генеральным директором McObject в журнале RTC:
http://www.rtcmagazine.com/articles/view/101612
Очевидно, что MVCC становится все более выгодным, поскольку приложение масштабируется для включения многих задач, выполняемых на нескольких ядрах ЦП.
Ответ 13
В DB2 версии 9.7 имеется лицензионная версия postgress plus. Это означает, что эта функция (в правильном режиме) поддерживает эту функцию.
Ответ 14
Berkeley DB также поддерживает MVCC.
И когда BDB-хранилище используется в MySQL, MySQL также поддерживает MVCC.
Berkeley DB - очень мощная, настраиваемая СУБД, совместимая с ACID. Он поддерживает несколько различных методов индексирования, репликации master-slave, может использоваться как хранилище с чистым хранилищем ключей с его собственным динамическим API или запрошенным SQL при необходимости. Стоит взглянуть на.
Другая документально ориентированная СУБД, охватывающая MVCC, будет CouchDB. MVCC здесь также является большим плюсом для встроенной одноранговой репликации.
Ответ 15
Из http://vschart.com/list/multiversion-concurrency-control/
Couchbase,
OrientDB,
CouchDB,
PostgreSQL,
Проект Волдеморт,
Большой стол,
Percona Server,
HyperGraphDB,
Полить,
Cloudant,
IBM DB2,
InterSystems Caché,
InterBase