【问题标题】:Sub-Document Mutate operations not working properly with XDCR [closed]子文档变异操作无法与 XDCR 一起正常工作 [关闭]
【发布时间】:2021-01-21 15:31:50
【问题描述】:

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

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

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

【问题讨论】:

标签: concurrency couchbase subdocument xdcr


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-07-31
    • 2016-12-27
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2017-12-14
    • 2020-08-19
    相关资源
    最近更新 更多