2

我们已经设置了 2 个沙发底座集群,它们之间带有 XDCR。我们正在使用 sub-doc mutate 来使用新字段更新文档(没有删除任何字段,也没有字段被覆盖/更新)。我们发现,如果我们通过集群 1 和集群 2 同时更新同一个文档,一些更新会丢失。

例如:如果我们通过 cluster-1 在 document-1 中添加 field-1 并且同时从 cluster-2 将 field-2 添加到 document-1,则只有一个更新有效,并且 field-1 或 field-2将在生成的文档中丢失。

有什么办法可以解决这个问题,以免数据丢失?我们最初的想法是,因为这是一个“子文档”操作,XDCR 会考虑到这一点,并通过根据子文档变异操作期间提供的各个路径相应地更新最终文档来合并两个文档版本。

4

1 回答 1

2

据我所知,XDCR 目前对子文档突变的处理与文档突变没有任何不同

唯一可用的冲突解决方案(当前)是序列号或时间戳。这解释了为什么您的子文档突变之一“胜过”另一个。

除了避免它(即在主动-主动情况下将某些写入限制到一个集群或另一个集群)之外,我不知道有任何解决方法。例如,美国东部用户的购物车在东部写入,复制到西部读取,反之亦然。

XDCR 自定义冲突解决支持将在未来版本中提供。您可以在 issues.couchbase.com 上看到一些进展,例如MB-39731、MB-41107、MB-41106 等。但我不知道该版本的确切日期,它最初可能(或可能不是)是开发人员预览功能。

唯一值得研究的另一件事是 Couchbase Sync Gateway/Lite,它具有自动和自定义冲突解决方案。这听起来不适合您的用例,但您可能想研究一下以防万一。

于 2020-10-06T18:20:59.537 回答