gpt4 book ai didi

couchdb - 如何维护 CouchDB、BigCouch 或其他开源数据库中的历史记录(例如 VCS)?

转载 作者:行者123 更新时间:2023-12-02 10:27:53 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

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

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

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

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

[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.

关于couchdb - 如何维护 CouchDB、BigCouch 或其他开源数据库中的历史记录(例如 VCS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25514652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com