处理CouchDB中的冲突

本文关键字:冲突 CouchDB 处理 | 更新日期: 2023-09-27 17:59:42

假设我有一个具有两个属性的文档,"Start"answers"End"。一个修订版可能有Start的时间,而End的时间为null,反之亦然。我不希望选择一个修订版作为赢家,而是希望最终文档包含修订版的开始时间,该时间不为空,结束时间也是如此。

在同步过程中,是否有处理此类冲突解决的最佳实践?我发现的文档中包含了选择一个版本作为获胜者的说明,但我想从多个版本中选择值。

C#/MyCouch库的特定示例将非常好,但任何通用或其他语言建议也非常感谢。

处理CouchDB中的冲突

在复制(也称为同步)期间,不能指定自定义的冲突解决方式。CouchDB自动选择获胜的修订版,您不能影响:

默认情况下,CouchDB会选择一个任意的修订版作为"赢家",使用确定性算法,以便做出相同的选择对所有同行。

您可以等待复制完成,然后通过执行特定于应用程序的文档修订合并来处理冲突。

查看处理冲突文档的文档,我发现了以下伪代码示例:

  1. 变得温顺?冲突=真
  2. 对于冲突数组中的每个成员(_C):变得温顺?rev=xxx如果在此阶段出现任何错误,请从步骤1重新启动。(可能有一场比赛,其他人已经解决了这个问题冲突并删除该版本)
  3. 执行特定于应用程序的合并
  4. 编写_bulk_docs并更新第一个版本并删除其他转速