【问题标题】:Is there a database implementation that has notifications and revisions?是否有具有通知和修订的数据库实现?
【发布时间】:2009-07-13 08:29:26
【问题描述】:

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

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

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

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

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

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

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

提前感谢您的见解:)

【问题讨论】:

  • 我意识到这已经很老了,但我正在开发一个可以完全满足您的要求的数据库。它被称为 aodbm(参见 sf.net/projects/aodbm)。目前它非常简单,文件格式可能会在第一次发布之前更改,但它处于可用状态并且正在积极开发中。

标签: c++ python database-design editor


【解决方案1】:

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

【讨论】:

  • 我很早就知道 Berkeley DB,我想这是迄今为止最好的答案,虽然我不喜欢它;)我开始了一个到目前为止运行良好的原型。正如您所提议的,附加功能很容易实现。
【解决方案2】:

它可能比你要求的更强大,但你绝对应该看看CouchDB

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

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

您将获得的另一个好处是轻松灵活地复制您的数据库。

查看their homepage的完整功能列表

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

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

【讨论】:

  • 我不太确定 CouchDB 是否存储修订。这似乎只是短期的,以允许视图一致性和无锁查询。我认为,修订版会不时被清除。
  • 我在文档中的任何地方都没有这样的印象......老实说 - 我还没有任何 CouchDB 的实际经验,因此无法支持任何这样的说法.. .
【解决方案3】:

查看 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 2015-06-02
    • 2012-09-17
    • 2015-08-31
    • 1970-01-01
    • 2015-10-16
    • 2012-09-23
    • 2010-10-18
    相关资源
    最近更新 更多