【问题标题】:Do CouchDB documents have a DAG?CouchDB 文档有 DAG 吗?
【发布时间】:2011-10-05 08:17:05
【问题描述】:

我在看 CouchDB。文档有版本,您可能有冲突的版本。它是否像 dvcs 一样将版本序列存储为有向无环图 (DAG)?如果没有,它是如何实现的?

【问题讨论】:

    标签: couchdb directed-acyclic-graphs


    【解决方案1】:

    是的,修订序列类似于有向无环图。我在CouchDB replication is like Git 中讨论了这个(在概念层面上)。

    我喜欢说 CouchDB 就像用于教学目的的 Git。但是存在显着差异。仅举几例:

    • CouchDB 不存储旧的数据,只存储旧的修订 ID
    • CouchDB 最终将截断很长的修订历史以保持性能

    因此,我不确定您是否可以在实践中实现 3 路合并,因为您最多只能使用两个数据版本:源和目标。已知共同祖先存在,但其价值不存在。

    虽然这可能是一个问题一般有几个“作弊”使它在实践中并不那么糟糕。

    • validate_doc_update() 函数可防止任意修改。它甚至可以要求将更改元数据存储为文档的一部分。 (但这是一个应用级的解决方案。)
    • 可以对大量应用程序的大量数据进行 2 路合并:例如选择最新的时间戳;将不同的电话号码合并成一个电话号码数组;等

    显然,这些都是高度特定于应用程序的,不是通用解决方案。

    【讨论】:

      【解决方案2】:

      您不能依赖 CouchDB 中的文档版本,它们只是为了在复制期间解决冲突而保留。在compaction期间删除以前版本的文档。

      CouchDB wiki 对此有 more details

      【讨论】:

      • 嗯 - 我对获得 DAG 感兴趣的原因是我希望找到一个用于冲突修订的 lca,以便可以完成 3 路合并。但是如果我不能依赖访问 lca,那么我就不能使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多