2011-05-22 62 views
4

我正在设计一个系统,其中诸如“在特定时间匹配某些标准的所有记录的总和是多少”这样的问题是重要的。什么数据存储系统允许查询过去的系统状态?

多值并发控制(MVCC)似乎是这里要走的路,因为它永远保持审计线索。

但是,如果数据存储可以为我处理这个问题,而不是将它整合到其他数据库功能之外,那将会很不错。现在,Oracle和CouchDB的其他数据库引擎使用MVCC,但只能在幕后。他们使用它来解决冲突或决定长时间运行的查询遇到最近更新的数据时要执行的操作。但是我不知道有哪些系统允许你明确地说“在2009年1月20日17:00的系统状态下,这个查询返回什么”。那么那里有这样的系统吗?理想情况下,开源?

回答

1

查看Oracle的闪回查询。

+0

哦,那很好。但是闪回似乎仍然是窥视内部MVCC表示的一种方式。你可以设置一个定时器,这样它肯定会保留旧版本一段时间,但在例子中我看到它相对较短,就像几个小时。我见过的例子显示这是恢复已删除数据的一种方法。 – NeilK 2011-05-23 00:03:13

+0

是的,我用它来从数据删除中恢复,但没有理由我知道不要因为其他原因使用它。您可以保留数据的时间长短取决于可用的磁盘空间(闪回恢复空间)与更改量。 – Karl 2011-05-23 01:24:32

1

据我所知,MVCC不保证早期版本的行的持续时间。其目标是交易的并发控制;当'x'行的所有事务都被提交时,MVCC不需要保留该行的早期版本。您正在考虑Temporal Databases。 Snodgrass的旧书在SQL中开发面向时间的数据库应用程序值得浏览,尤其是现在它以PDF格式提供。如果我不得不再次从头开始创建临时数据库,我还会读取时间数据&关系模型,以及其他任何涉及6NF的内容。 (其中'6NF'<>'DKNF'。)