База данных:Что такое управление многоверсионным параллелизмом (MVCC) и кто его поддерживает?[закрыто]

StackOverflow https://stackoverflow.com/questions/27499

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

  • Oracle
  • postgresql
Это было полезно?

Решение

В Oracle уже очень давно существует отличная система управления несколькими версиями (по крайней мере, начиная с Oracle 8.0).

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

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

Я попытался объяснить в максимально простых терминах ... многоверсионность в базах данных имеет большое значение.

Другие советы

Ниже приведена реализация MVCC:

SQL Server 2005 (Не используется по умолчанию, SET READ_COMMITTED_SNAPSHOT ON)

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

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

PostgreSQL

Жар - птица

Информикс

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

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

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

XtremeData ( Экстремальные данные ) dbX поддерживает MVCC.

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

Это делает Firebird, они называют это MGA (архитектура нескольких поколений).

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

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

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

Вот такой ссылка на страницу документа PostgreSQL в 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-разрядных версий и многим другим.

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

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

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

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

База данных Беркли также поддерживает MVCC.

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

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

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

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

Couchbase, OrientDB, CouchDB, PostgreSQL, Project Voldemort, BigTable, Percona Server, HyperGraphDB, Drizzle, Cloudant, IBM DB2, Межсистемный кэш, InterBase

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top