У меня есть приложение, которому нужна база данных + MVCC модель. В идеале он поддерживает постоянное хранение истории, доступ к данным в определенный момент времени и инкрементное резервное копирование.
Я ищу базы данных, которые могут это поддерживать. Я знаю, что CouchDB может (кроме инкрементных резервных копий, я не уверен в этом), но в этом приложении мне действительно нужна реляционная база данных.
Я удивлен что MySQL перечисляет поддержку MVCC в Innodb / Falcon. У меня сложилось впечатление, что, возможно, это касается только состояния базы данных в транзакции, и как только все уровни транзакции зафиксированы, история теряется.
Что о PostgreSQL?
MVCC - это не то, что вы ищете. Похоже, вы хотите иметь возможность запрашивать данные на основе «момента времени», чтобы получить результаты, основанные на состоянии данных в этот указанный момент времени.
Это схема временной базы данных. Вы можете разработать схему реляционной базы данных для временных запросов, но сам SQL делает некоторые типы временных запросов очень громоздкими. Есть / был темпоральный диалект SQL (в спецификация здесь, хотя, похоже, это предмет научные публикации но никогда не был стандартизирован), который должен был сделать временные запросы менее громоздкими, оставаясь при этом «SQL».
Если вы поищете, вы можете найти множество исследований и книг по теме временных данных и реляционной модели. Хорошее моделирование данных может помочь вам в любом случае, хотя, если вы собираетесь использовать SQL в качестве языка запросов, вам может не понравиться внешний вид некоторых запросов.
Редактировать: TimeDB - это интерфейс к Oracle, который добавляет диалект временных запросов. Лицензия, под которой выпущен этот код, совершенно неясна.
McObject объявила в 11/09, что в ее базу данных eXtremeDB добавлен дополнительный менеджер транзакций MVCC:
http://www.mcobject.com/november9/2009
eXtremeDB, первоначально разработанная как система баз данных в памяти (IMDS), теперь доступна в версиях с гибридным (в памяти / на диске) хранилищем, высокой доступностью, поддержкой 64-разрядных систем и т. д. Интерфейсы включают SQL, более быстрый собственный API и собственный интерфейс Java (JNI).
В этой статье, написанной соучредителем и генеральным директором McObject в RTC Magazine, есть хорошее объяснение MVCC - с диаграммами - и некоторые показатели производительности для eXtremeDB:
http://www.rtcmagazine.com/articles/view/101612
Очевидно, что MVCC становится все более выгодным, поскольку приложение масштабируется для включения множества задач, выполняемых на нескольких ядрах ЦП.
Также см. Этот список в Википедии для других БД, поддерживающих MVCC. https://en.wikipedia.org/wiki/List_of_databases_using_MVCC