2011-10-05 122 views

回答

0

你不能依靠CouchDB中的文件版本,他们只是不停地允许复制过程中的冲突解决。在compaction期间删除先前版本的文档。

CouchDB的维基上的这个more details

+0

嗯 - 我很感兴趣的是得到一个DAG的原因是我希望能找到一个冲突版本A的LCA,从而使3路合并可以这样做。但是如果我不能依靠访问lca,那么我不能使用它。 –

3

是,修改序列类似于向无环图。我在CouchDB replication is like Git中讨论过这个问题(在概念层面)。

我想说的是CouchDB的是如Git用于教育的目的。但是有显着的差异。仅举几例:

  • CouchDB中不存储旧数据,只是旧的版本编号
  • CouchDB的最终截断很长的修订历史记录,保留性能

因此,我不确定您是否可以在实践中实现3路合并,因为您最多只能对数据进行两次修改:源代码和目标。共同的祖先将知道存在,但其价值不会。

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

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

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