处理CouchDB中的冲突

时间:2016-08-02 17:45:58

标签: c# couchdb mycouch

假设我有一个包含两个属性的文档,“开始”和“结束”。一个版本可能有一个Start的时间,null可能是End,反之亦然。我希望最终文档不包含单个修订版本作为获胜者,而是希望最终文档包含修订版本中的开始时间,它不是null,而对于End来说也是如此。

在同步过程中是否有处理此类冲突解决方案的最佳做法?我找到的文档包含选择单个修订版作为获胜者的说明,但我想从多个转速中选择值。

特定于C#/ MyCouch库的示例会很棒,但是也非常感谢任何一般或其他语言建议。

1 个答案:

答案 0 :(得分:1)

您无法在复制(a.k.a。同步)期间指定自定义冲突解决方式。 CouchDB会自动选择获胜的修订版,但您不能影响它:

  

默认情况下,CouchDB选择一个任意修订作为“赢家”,   使用确定性算法,以便进行相同的选择   在所有同行。

您可以等待复制完成并在之后处理冲突,方法是执行特定于应用程序的文档修订合并。

查看Working with conflicting documents的文档,我找到了以下伪代码示例:

  
      
  1. GET docid?conflicts = true
  2.   
  3. 对于_conflicts数组中的每个成员:      GET docid?rev = xxx    如果在此阶段发生任何错误,请从步骤1重新启动。    (可能有一场比赛,其他人已经解决了这个问题    冲突并删除该转)
  4.   
  5. 执行特定于应用程序的合并
  6.   
  7. 将_bulk_docs写入第一次修订和删除的更新    其他转。
  8.