我们设置了2个couchbase集群,它们之间有XDCR。我们正在使用子文档变异来更新文档的新字段(没有删除任何字段,也没有字段被覆盖/更新)。我们发现,如果我们通过集群1和集群2同时更新相同的文档,一些更新会丢失。
例如:如果我们通过cluster-1在document-1中添加field-1,同时field-2正从cluster-2添加到document-1中,那么只有一次更新是有效的,并且field-1或field-2将在结果文档中丢失。
我们有没有办法解决这个问题,这样就不会有数据丢失?我们最初的想法是,因为这是一个“子文档”操作,所以XDCR会考虑到这一点,并通过基于子文档变异操作期间提供的各个路径相应地更新最终文档来合并两个文档版本。
发布于 2020-10-07 02:21:00
据我所知,目前XDCR并不会将子文档突变与文档突变区别对待。
唯一可用的conflict resolution (当前)是序列号或时间戳。这就解释了为什么你的一个子文档突变“战胜”了另一个。
我不知道有什么方法可以绕过这个问题,除了避免(也就是将某些处于主动-主动状态的写操作限制在一个或另一个集群中)。例如,东部美国用户的购物车在东部编写,复制到西部阅读,反之亦然。
XDCR自定义冲突解决支持将在未来版本中提供。你可以在像MB-39731, MB-41107, MB-41106, etc这样的issues.couchbase.com上看到一些进展。但我不知道发布的确切日期,它可能是(也可能不是)最初的开发人员预览功能。
唯一值得研究的是Couchbase Sync Gateway/Lite,它同时具有automatic和自定义冲突解决方案。这听起来并不适合您的用例,但您可能希望研究一下,以防万一。
https://stackoverflow.com/questions/64231118
复制相似问题