CouchBase复制处理

时间:2014-08-06 07:28:44

标签: caching couchbase

我是CouchBase的新B,并着眼于复制。我想弄清楚的一件事是Couchbase如何处理两个缓存之间的复制冲突。这意味着:

有两个称为S1和S2的沙发基站服务器一起添加/复制,这些服务器位于不同的地理位置。

还有两个客户端(C1和C2).C1缓存到S1和C2缓存到具有相同密钥但不同对象的S2对象(C1缓存一个名为Obj1的对象,C2 cahces Ojb2对象)。

我的问题是该密钥的最终值是在集群中的? (键的S1和S2是什么)

1 个答案:

答案 0 :(得分:4)

写入Couchbase

暂时忽略复制并解释写入如何在单个couchbase群集中工作。

couchbase中的键被散列为vbucket(分片)。该vbucket只存在于集群中的一个节点上,因此只有一个可写的数据副本。当两个客户端写入相同的密钥时,最后写入的客户端将“获胜”。 couchbase SDK确实公开了许多操作来帮助解决这个问题,例如“add()”和“cas()”。


内部复制

Couchbase确实拥有数据的副本副本。这些副本不是最终用户可写的,只有在节点出现故障时才会变为活动状态。使用的复制是从活动vbucket到副本vbucket的单向同步。这是内存到内存,非常快。作为群集间复制的结果,您不必担心冲突解决。请理解,如果在复制数据之前存在故障转移数据丢失,则SDK会再次公开许多操作以确保写入已复制到第N个节点。请参阅observe命令。


外部复制

在couchbase中的外部复制称为XDCR,其中数据在两个不同的集群之间同步。最好不要同时在两个集群中写入相同的密钥。而是为每个群集设置一个密钥空间,并使用XDCR进行灾难恢复。 couchbase手册很好地解释了conflict resolution,但基本上群集中已经更新最多的密钥将会获胜。

如果您想了解有关群集系统的更多信息,那么CAP Theorem就是您的起点。 Couchbase是一个CP系统。