是否存在具有通知和修订的数据库实现?

时间:2009-07-13 08:29:27

标签: c++ python database-design editor

我正在寻找一个可以在编辑器中使用的数据库库来替换自定义文档格式。在我的情况下,该文件将包含一个功能程序。

我希望即使在编辑时应用程序数据也是持久的,这样当程序崩溃时,不会丢失任何数据。我知道所有数据库都提供了这个。

最重要的是,我想从多个线程,进程甚至多台计算机访问和编辑文档。

格式:一个简单的键/值数据库就足够了。 SQL通常需要被包装,如果我可以避免引入繁重的ORM依赖,那就太棒了。

修订:我希望能够将更改回滚到对文档的第一次更改,不仅在一个会话中,而且在会话/程序运行之间。

我需要通知:每个流程都必须能够通知文档的更改,以便相应地更新其视图。

我认为这些要求是基本的,是解决编辑应用程序常见难题的基础:撤消/重做,对同一数据的多个视图。因此,数据库系统应该是轻量级的并且要求不高。

提前感谢您的见解:)

3 个答案:

答案 0 :(得分:1)

Berkeley DB是一个不需要的,轻量级的键值数据库,支持锁定和事务。在很多编程语言中都有绑定,包括C ++和python。你必须自己实施修订和通知,但实际上并不是那么困难。

答案 1 :(得分:1)

它可能比你要求的更强大,但你一定要看CouchDB

它是一个文档数据库,“document”被定义为JSON记录。 它将所有对文档的更改存储为修订版,因此您可以立即获得修订。 它具有强大的基于javascript的视图引擎,可以从数据库中聚合所需的所有数据。

数据库的所有提交都写入存储库文件的末尾,并且写入是原子的,这意味着不成功的写入不会破坏数据库。

您将获得的另一个不错的奖励是轻松灵活的复制和数据库。

查看their homepage

上的完整功能列表

在负面(取决于你的观点)是它是用Erlang编写的,并且(据我所知)作为外部进程运行...

我对通知一无所知 - 似乎如果您正在使用复制数据库,则更改会立即在数据库之间进行复制/同步。除此之外,我想你应该能够推出自己的通知架构...

答案 2 :(得分:0)

查看ZODB。它没有内置通知,因此您需要一个消息传递系统(因为您可以使用单独的计算机)。但是它有事务,你可以永远回滚(除非你打包数据库,这删除了早期版本),你可以直接作为应用程序的集成部分访问它,或者它可以作为客户端/服务器运行(当然有多个客户端) ),你可以有自动持久性,没有ORM等。

它几乎只是Python(它基于Pickles)。

http://en.wikipedia.org/wiki/Zope_Object_Database

http://pypi.python.org/pypi/ZODB3

http://wiki.zope.org/ZODB/guide/index.html

http://wiki.zope.org/ZODB/Documentation