我正在为一个应用程序测试Couchbase,并在XDCR中遇到一些疑问,我读了Conflict resolution in XDCR。但不完全确定在以下情况中会发生什么:
我有两个集群(每个服务器一个服务器,比如S1和S2),我正在使用XDCR双向复制存储桶。
如果S1和S2同时修改同一个文档,考虑到它们是否只对文档进行一次更改,将如何确定生成的更新?如果他们对文档进行了不同数量的修改,答案会改变吗?
答案 0 :(得分:1)
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时,我建议您在大多数用例中只更新一个群集中的特定文档集和另一个群集中的另一组文档,以避免同时写入时出现问题。
此外,正如您在上面所看到的,此冲突解决模型可能仅对特定用例有益。将来会引入更多冲突解决模型,您可以选择最适合您用例的模型。 A"最后写作胜利"模型应该在短期内添加,这个模型将使用矢量时钟,以提供更精细的冲突解决方案。
答案 1 :(得分:0)
基本上,如果他们有相同数量的修订 - 两者都将是"正确"因为它是一个主动 - 主动系统。 因此,您在S1和S2中同时进行了更改 - 没有人会得到更改。 一旦S1或S2再次更新,其他服务器将获得更新的文档。