CouchDB 在进行双向复制时如何处理冲突?
例如:
假设有两个地址簿数据库(在服务器 A 和 B)。有一份 jack 的文件,其中包含 jack 的联系方式。
couchDB 是如何处理的?如果我们在Java程序中启动复制,有没有办法知道Java程序是否有冲突?
最佳答案
CouchDB documentation提供了解释。
简而言之:CouchDB 不会尝试合并冲突的版本。两个版本都被复制到两个副本中。确定性(但从应用程序的角度来看可能是任意的)算法选择其中一个作为“官方”版本。它将在两个副本上选择相同的版本。默认情况下和 View 中仅此版本可见。您的应用程序可以查询其他版本,并根据需要合并它们(可能通过在屏幕上显示所有版本来涉及用户)。如果您的应用程序不查找冲突,则两个更新之一将有效丢失。
如果您没有使用复制或批量加载 API(而是每个文档的 REST API),则冲突更新将不会进入数据库,但会因 409 错误而被拒绝。您必须先合并,然后再尝试更新(就像在 Subversion 中一样)。
关于replication - CouchDB 冲突解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605870/