CouchDB文档有DAG吗?

时间:2011-10-05 08:17:05

标签: couchdb directed-acyclic-graphs

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

2 个答案:

答案 0 :(得分:3)

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

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

  • CouchDB不存储旧的数据,只存储旧版本ID
  • CouchDB最终会截断非常长的修订历史以保持性能

因此,我不确定您是否可以在实践中实现3向合并,因为最多只能对数据进行两次修订:源和目标。众所周知,共同的祖先存在,但它的价值不会存在。

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

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

显然,这些都是高度针对特定应用的,并非一般解决方案。

答案 1 :(得分:0)

您不能依赖CouchDB中的文档版本,只能在复制期间保留冲突解决方案。在compaction期间删除以前版本的文档。

CouchDB wiki上有more details