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