Replication 冲突解决

Replication 冲突解决,replication,couchdb,conflict,bidirectional,Replication,Couchdb,Conflict,Bidirectional,CouchDB在进行双向复制时如何处理冲突 例如: 假设有两个地址簿数据库(在服务器A和B中)。有一份关于Jack的文件,其中包含Jack的详细联系方式 服务器A和B被复制,并且都具有相同版本的Jack文档 在服务器A中,更新Jack的手机号码 在服务器B中,杰克的地址被更新 现在,当我们进行双向复制时,会出现冲突 couchDB是如何处理的?如果我们在Java程序中启动复制,有没有办法知道Java程序是否存在冲突?提供了一个解释 简而言之:CouchDB不会尝试合并冲突的版本。两个版本都被复制

CouchDB在进行双向复制时如何处理冲突

例如: 假设有两个地址簿数据库(在服务器A和B中)。有一份关于Jack的文件,其中包含Jack的详细联系方式

  • 服务器A和B被复制,并且都具有相同版本的Jack文档
  • 在服务器A中,更新Jack的手机号码
  • 在服务器B中,杰克的地址被更新
  • 现在,当我们进行双向复制时,会出现冲突
  • couchDB是如何处理的?如果我们在Java程序中启动复制,有没有办法知道Java程序是否存在冲突?

    提供了一个解释

    简而言之:CouchDB不会尝试合并冲突的版本。两个版本都被复制到两个副本中。确定性(但从应用程序的角度来看可能是任意的)算法选择其中一个作为“官方”版本。它将在两个副本上选择相同的版本。默认情况下,只有此版本在视图中可见。您的应用程序可以查询其他版本,并根据需要合并它们(可能通过在屏幕上显示所有版本来涉及用户)。如果应用程序不查找冲突,则两个更新中的一个将实际上丢失

    如果未使用复制或大容量加载API(但使用每文档REST API),则冲突的更新将不会进入数据库,但将被拒绝,并出现409错误。您必须在再次尝试更新之前进行合并(就像在Subversion中一样)