xdcr复制相同的数据

时间:2013-04-02 06:24:41

标签: couchbase

我将使用couchbase作为我网站的数据库。我计划将该网站变为国际化,因此我可能会在美国,欧洲和澳大利亚拥有数据中心以保持低延迟。我还希望最小化数据中心之间的带宽,因此我计划在用户存储数据时向所有数据中心发起并行更新(ajax)。

我的问题是:如果我几乎同时将相同的数据插入到所有三个集群中,那么couchbase是否足够智能以识别此数据是否相同,因此不需要在数据中心之间进行复制?

我看了this video,他解释说当更新文档时会更新cas值,而这用于确定哪些文档需要复制。如果在更新集群上的任何文档时更新cas值,那么我的猜测是答案是“否” - 因为我很可能一次只向所有3个集群发送一些数据,以及任何数据仅发送到一个群集将使该群集暂时不同步。但是如果cas值对于每个文档是独立的,那么答案可能是“是”。也许有一些选项可以改变,以使每个文件的cas值独立?

1 个答案:

答案 0 :(得分:0)

Couchbase对您存储的文档正文一无所知。从它的角度来看,如果你将同一个文档写入3个集群(所有集群都与XDCR双向链接),它会将3个不同的文档突变视为具有该ID的文档。 Couchbase将执行其正常的冲突解决过程,以选择3中哪一个是“赢家”。这将导致“获胜”文档被转移到其他两个集群,尽管它可能具有与“丢失”修订完全相同的内容。

无论何时写入不同群集中的同一文档ID,您都必须知道冲突解决方案将选择获胜版本。如果你不小心,你可以覆盖你不想要的数据。

通常会为您的用例选择不同的方法。对于每个用户,选择“家庭”群集,可能基于地理位置。所有操作都绑定到该用户的此群集。如果该群集已关闭,则可以切换到另一个群集。使用这种方法可以避免写入多个集群,并且只能在明确定义的条件下更改集群。

CAS值只是修订版的不透明标识符。在上面的示例中,所有3个文档写入都会以不同的CAS值结束(这是Couchbase将其视为不同的原因之一,并且必须选择获胜者)

冲突解决流程是this section of the manual

中的文档