【发布时间】:2011-10-05 08:17:05
【问题描述】:
我在看 CouchDB。文档有版本,您可能有冲突的版本。它是否像 dvcs 一样将版本序列存储为有向无环图 (DAG)?如果没有,它是如何实现的?
【问题讨论】:
标签: couchdb directed-acyclic-graphs
我在看 CouchDB。文档有版本,您可能有冲突的版本。它是否像 dvcs 一样将版本序列存储为有向无环图 (DAG)?如果没有,它是如何实现的?
【问题讨论】:
标签: couchdb directed-acyclic-graphs
是的,修订序列是类似于有向无环图。我在CouchDB replication is like Git 中讨论了这个(在概念层面上)。
我喜欢说 CouchDB 就像用于教学目的的 Git。但是存在显着差异。仅举几例:
因此,我不确定您是否可以在实践中实现 3 路合并,因为您最多只能使用两个数据版本:源和目标。已知共同祖先存在,但其价值不存在。
虽然这可能是一个问题一般有几个“作弊”使它在实践中并不那么糟糕。
validate_doc_update() 函数可防止任意修改。它甚至可以要求将更改元数据存储为文档的一部分。 (但这是一个应用级的解决方案。)显然,这些都是高度特定于应用程序的,不是通用解决方案。
【讨论】:
您不能依赖 CouchDB 中的文档版本,它们只是为了在复制期间解决冲突而保留。在compaction期间删除以前版本的文档。
CouchDB wiki 对此有 more details。
【讨论】: