1

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

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

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

4

1 回答 1

0

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

每当您在不同的集群中写入相同的文档 ID 时,您必须注意冲突解决将选择获胜的修订版。如果你不小心,你可能会覆盖你不想要的数据。

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

CAS 值只是修订的不透明标识符。在您上面的示例中,所有 3 个文档写入最终都会具有不同的 CAS 值(这是 Couchbase 认为它们不同的原因之一,并且必须选择一个获胜者)

冲突解决过程记录在手册的本节中

于 2013-04-08T19:50:16.137 回答