我有一个应用程序需要一个数据库+将大大受益于MVCC模型。 它将理想地支持永久历史存储,在特定时间点访问数据以及增量备份。
我正在查看可能支持这个的数据库。 我知道CouchDB可以(除了增量备份,我不确定),但在这个应用程序中,我真的需要一个关系数据库。
我很惊讶MySQL在Innodb / Falcon中列出了MVCC支持 。 我得到这样的印象,也许这只是在一个事务内的数据库状态,一旦所有的事务级别提交,历史将丢失。
那么PostgreSQL呢?
MVCC不是你要找的。 这听起来像你希望能够基于在指定时间点的数据状态基于“时间点”查询数据到结果。
这是一个时间数据库模式 。 您可以为时间查询devise一个关系数据库模式,但是SQL本身使某些types的时间查询非常麻烦。 有/是一个时间SQL方言 ( 规范在这里 ,虽然它似乎是研究出版物的主题,但从来没有标准化),应该使时间查询不那么繁琐,而仍然是“SQL”。
你可以find很多关于时态数据和关系模型的研究和书籍,如果你search的话。 良好的数据build模可以为您提供很多方法,但是如果您要使用SQL作为查询语言,您可能不会喜欢某些查询的结果。
编辑: TimeDB是Oracle的前端,添加了一个时间查询方言。 这个代码发布的许可证是完全不清楚的。
McObject在11月9日宣布,它的eXtremeDB数据库增加了一个可选的MVCC事务pipe理器:
http://www.mcobject.com/november9/2009
eXtremeDB最初是作为内存数据库系统(IMDS)开发的,现在已经有了混合(内存/磁盘)存储,高可用性,64位支持等版本。 接口包括SQL,更快的本地API和Java本地接口(JNI)。
在RTC杂志上,McObject公司联合创始人兼首席执行官撰写的这篇文章中,对MVCC有很好的解释,包括图表和一些eXtremeDB的性能数据:
http://www.rtcmagazine.com/articles/view/101612
显然,随着应用程序扩展到包含在多个CPU内核上执行的许多任务,MVCC越来越有益处。