如何在CouchDB、BigCoach或其他开源数据库中维护历史记录(如VCS)?

如何在CouchDB、BigCoach或其他开源数据库中维护历史记录(如VCS)?,couchdb,datomic,bigcouch,nosql,Couchdb,Datomic,Bigcouch,Nosql,我正在寻找一种使用CouchDB或BigCoach(或另一个“兼容”DB)的方法,以便可以维护或至少存档所有修订历史记录。我知道CouchDB在内部执行此操作,并且只在压缩时删除旧版本。由于CouchDB/bigcooch是开源的,我想可以一起破解一些东西来启用这个特性。例如,在压缩过程删除每个修订之前,将其复制到存档数据库 顺便说一句:我在几家公司工作,他们希望他们的SQL DB有一个“审计历史记录”,我们通过创建一个“审计表”来实现这一点,并编写触发器,在修改任何其他表时将记录插入到该表中

我正在寻找一种使用CouchDB或BigCoach(或另一个“兼容”DB)的方法,以便可以维护或至少存档所有修订历史记录。我知道CouchDB在内部执行此操作,并且只在压缩时删除旧版本。由于CouchDB/bigcooch是开源的,我想可以一起破解一些东西来启用这个特性。例如,在压缩过程删除每个修订之前,将其复制到存档数据库

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

有更多CouchDB知识的人能告诉我怎么做吗?我很好奇以前是否有人做过。这似乎是一个非常有用的功能,如果以前没有做过,我想知道为什么


注意:这个问题的部分灵感来自Dataomic,一个具有所需属性的DB。因此,我正在寻找的基本上是一个开源的,也许是Datomic更轻量级的替代品。

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

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

  • 基于同一父级创建两个或多个新文档
  • 创建一个具有两个或多个父级的合并文档
为了支持诸如删除之类的功能,我会有一个“已删除文档”,我会将被删除的文档指向它

新文档将获得一个唯一的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.

我喜欢这个想法,但我不清楚如何以对数据库用户透明的方式实现它,这就是我要问的问题:我正在寻找一个自动的系统,不需要更改客户端代码。