3

我正在寻找一种使用 CouchDB 或 BigCouch(或其他“兼容”数据库)的方法,以便可以维护或至少存档所有修订历史记录。我知道 CouchDB 内部无论如何都会这样做,并且只会在压缩时删除旧修订。由于 CouchDB/BigCouch 是开源的,我想可以将一些东西组合在一起以启用此功能。例如,在压缩过程删除它们之前将每个修订复制到存档数据库。

顺便说一句:我曾在几家公司工作,他们想要他们的 SQL 数据库的“审计历史”,我们通过创建一个“审计表”来实现这一点,我们编写了触发器,在修改任何其他表时将记录插入到该表中。

对 CouchDB 有更多了解的人可以告诉我如何做到这一点吗?我很好奇是否有人以前做过。看起来这将是一个非常有用的功能,所以如果以前没有做过,我想知道为什么?

注意:这个问题部分受到 Dataomic 的启发,Dataomic 是一个具有所需属性的数据库。所以我在寻找的基本上是一个开源的,也许是更轻量级的 Datomic 替代品。

4

1 回答 1

0

我从不喜欢使用内部版本控制来维护历史的想法。对我来说,这仅仅是支持最终一致性功能的要求。

如果我必须存储历史记录,我会查看链接是更新的文档的链接方法。通过这种方式,您可以支持以下功能:

  • 基于同一父级创建两个或多个新文档。
  • 创建一个具有两个或多个父级的合并文档。

为了支持删除等功能,我将有一个“已删除文档”,我会将被删除的文档指向。

新文档将获得一个唯一的 ID(我使用 couchdb 的 uuid 功能),所以我有一个完整的免费根列表。

我发现一个图形数据库对此很有用,但您可以只放置对父母的引用。我在文档中有这样的内容:

[some other content],
parent_nodes: [ list_of_parent_uuids], # these are the direct ancestors so you can build a graph.
origin_nodes: [ list of_origin_uuids] # these are the new_node uuids that the original documenst have. so you can build a view of all inheriting docs.
于 2014-08-27T11:51:20.757 回答