Concurrency 子文档变异操作不能与XDCR正常工作

Concurrency 子文档变异操作不能与XDCR正常工作,concurrency,couchbase,subdocument,xdcr,Concurrency,Couchbase,Subdocument,Xdcr,我们已经设置了两个couchbase集群,它们之间有XDCR。我们使用sub-doc mutate用新字段更新文档(不删除任何字段,也不覆盖/更新任何字段)。 我们发现,如果我们通过集群1和集群2同时更新同一文档,一些更新会丢失 例如:如果我们通过集群1将字段1添加到文档1中,并且同时将字段2从集群2添加到文档1中,则只有一个更新有效,并且结果文档中将缺少字段1或字段2 我们有没有办法解决这个问题,从而避免数据丢失?我们最初的想法是,因为这是一个“子文档”操作,XDCR会考虑到这一点,并根据子文

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

例如:如果我们通过集群1将字段1添加到文档1中,并且同时将字段2从集群2添加到文档1中,则只有一个更新有效,并且结果文档中将缺少字段1或字段2


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

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

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

我不知道有什么办法可以解决这个问题,除了避免它之外(也就是说,将处于活动状态的某些写入限制到一个集群或另一个集群)。例如,美国东部用户的购物车写在东部,复制到西部阅读,反之亦然

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

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

交叉引用