2

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

4

2 回答 2

3

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

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

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

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

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

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

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

于 2011-10-05T13:45:02.740 回答
0

您不能依赖 CouchDB 中的文档版本,它们仅被保留以允许在复制期间解决冲突。以前版本的文档在压缩过程中被删除。

CouchDB wiki 对此有更多详细信息

于 2011-10-05T09:59:32.317 回答