我正在尝试了解Cassandra和Couchbase中实现的数据中心复制之间的区别。 看起来像Cassandra,如果我有两个数据中心(DC),我的所有数据都会被复制。在Couchbase中,两个DC保存不同的数据,并且可以手动配置在不同DC之间复制数据子集。 这是对的吗?
客户如何知道数据在Couchbase中的位置?如果我在DC2中查询DC1数据是否存在,会发生什么?
在Couchbase中,整个系统如何知道数据的复制位置?
提前谢谢!
答案 0 :(得分:4)
Couchbase跨数据中心复制(XDCR)将源存储桶中的所有数据复制到目标存储桶(连续)。
如果纽约数据中心的存储桶A和旧金山数据中心的存储桶B,并且您将XDCR从存储桶A配置为存储桶B,则存储桶A中的所有数据都会复制到存储桶B.您无法配置任何其他数据过滤。但是,这种复制只是一个方向。因此,如果您还将数据直接写入存储桶B,则两个数据中心都不会包含所有数据。如果要在两个数据中心中拥有所有数据,还可以将XDCR从存储桶B配置到存储桶A.这在手册中称为双向复制。在这个2集群配置中,它将为您提供所有数据中心的所有数据。
Couchbase客户端SDK配置为与单个群集通信。这意味着客户端必须知道要连接到哪个群集,如果您的旧金山群集中的纽约群集中存储了不同的数据,则您的应用程序必须具有知道在何处查找数据的逻辑。
对于高可用性用例,通常在区域之间设置双向复制,并且应用程序设计为首选集群。在纽约附近部署的应用程序可能更喜欢纽约集群。只要没有问题,它就会读取和写入该集群。如果出现问题,请说纽约数据中心已关闭,应用程序可以通过切换到旧金山数据中心继续运行。但同样,所有这些逻辑都将在您的应用程序中。
Robin提到的“智能集群映射”用于查找单个集群中的数据。理解这一点很重要,不会找到存储在不同地区的数据。
答案 1 :(得分:2)
请注意,较新版本的Couchbase(4.0及更高版本)XDCR允许过滤。关键名称的简单正则表达式允许在数据中心之间复制选定的数据子集。请点击http://developer.couchbase.com/documentation/server/4.0/xdcr/xdcr-filtering-setup.html
了解更多信息答案 2 :(得分:1)
在Couchbase中,跨数据复制适用于Bucket to Bucket。 Couchbase允许两种类型的复制 - 双向和双向。如果使用双向,则两个数据集都将相同。如果使用Uni-Directional,理论上你可以有一个比另一个更大的数据集,但通常不会。
客户端SDK知道数据在Couchbase中的位置,因为它使用智能群集映射。此群集映射始终跟踪数据的位置,从而将请求发送到正确的节点。