假设我有一个包含两个属性的文档,“开始”和“结束”。一个版本可能有一个Start的时间,null可能是End,反之亦然。我希望最终文档不包含单个修订版本作为获胜者,而是希望最终文档包含修订版本中的开始时间,它不是null,而对于End来说也是如此。
在同步过程中是否有处理此类冲突解决方案的最佳做法?我找到的文档包含选择单个修订版作为获胜者的说明,但我想从多个转速中选择值。
特定于C#/ MyCouch库的示例会很棒,但是也非常感谢任何一般或其他语言建议。
答案 0 :(得分:1)
您无法在复制(a.k.a。同步)期间指定自定义冲突解决方式。 CouchDB会自动选择获胜的修订版,但您不能影响它:
默认情况下,CouchDB选择一个任意修订作为“赢家”, 使用确定性算法,以便进行相同的选择 在所有同行。
您可以等待复制完成并在之后处理冲突,方法是执行特定于应用程序的文档修订合并。
查看Working with conflicting documents的文档,我找到了以下伪代码示例:
- GET docid?conflicts = true
- 对于_conflicts数组中的每个成员: GET docid?rev = xxx 如果在此阶段发生任何错误,请从步骤1重新启动。 (可能有一场比赛,其他人已经解决了这个问题 冲突并删除该转)
- 执行特定于应用程序的合并
- 将_bulk_docs写入第一次修订和删除的更新 其他转。
醇>