replication - CouchDB 冲突解决

标签 replication couchdb conflict bidirectional

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

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

  • 服务器 A 和 B 被复制,并且都具有相同版本的 Jack 文档。
  • 在服务器 A 中,Jack 的手机号码已更新。
  • 在服务器 B 中,Jack 的地址已更新。
  • 现在当我们进行双向复制时会发生冲突。

  • couchDB 是如何处理的?如果我们在Java程序中启动复制,有没有办法知道Java程序是否有冲突?

    最佳答案

    CouchDB documentation提供了解释。

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

    如果您没有使用复制或批量加载 API(而是每个文档的 REST API),则冲突更新将不会进入数据库,但会因 409 错误而被拒绝。您必须先合并,然后再尝试更新(就像在 Subversion 中一样)。

    关于replication - CouchDB 冲突解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605870/

    相关文章:

    sql-server - 通过 VPN 的 SQL Server 事务复制

    mysql - InnoDB隐藏自增和双主

    javascript - PouchDB/CouchDB 复制失败,方法不允许

    couchdb - 如何从 CouchDB 复制到 PouchDB?

    git - merge 但覆盖 Git 中的更改

    mongodb - Mongodb复制

    sql-server - SQL Server 复制过滤

    docker - 有关Cloudant本地Docker中的Compactor的内部错误

    javascript - 为什么我的 dropzone javascript 表单不起作用?

    c++ - 在 C++ 中如何解决这些名称冲突?