我正在为一个应用程序测试Couchbase,并且遇到了一些关于XDCR的疑问,我读到了Conflict resolution in XDCR。但不太确定在以下情况下会发生什么:
我有两个集群(每个集群一个服务器,比如S1和S2),我使用XDCR以两种方式复制一个存储桶。
如果S1和S2同时修改同一文档,考虑到它们都对文档进行了一次更改,那么如何决定结果更新呢?如果他们对文档进行了不同数量的修改,答案会发生变化吗?
发布于 2016-04-23 02:26:51
Couchbase目前使用基于修订的冲突解决方案。这意味着在冲突解决发生之前更新次数最多的文档将获胜。如果双方的文档更新次数相同,则将随机选择其中之一获胜。例如:
S1: Updated once, S2: Updated twice. S2 wins
S1: Updated twice, S2: Updated once. S1 wins
S1: Updated once, S2: Updated once. Random winner在使用带有主动-主动复制的Couchbase XDCR时,我建议对于大多数用例,您只更新一个集群中的特定文档集,而更新另一个集群中的另一个文档集,以避免同时写入的问题。
此外,正如您在上面看到的,此冲突解决模型可能只对特定的用例有用。在未来,将引入更多的冲突解决模型,您将能够选择最适合您的用例。应该在近期添加"Last Write Wins“模型,该模型将使用向量时钟,以便提供更细粒度的冲突解决方案。
发布于 2016-04-20 21:20:21
基本上,如果他们有相同的修订数量-两者都将是“正确的”,因为它是一个主动-主动系统。因此,你同时在S1和S2中进行了更改-没有人会得到这些更改。一旦S1或S2再次更新,另一个服务器将获得更新后的文档。
https://stackoverflow.com/questions/36733825
复制相似问题