如果我像这样在couchbase中存储类似数组的结构:
mykey = 3
key_1 = 47
key_2 = 11
key_3 = 17
我的更新程序是这样的:
a = increment(mykey)
set key_a = 42
这会在多个数据中心上复制的存储桶上运行吗?有没有更好的方法呢?
我认为不同数据中心的两个客户端可能同时调用增量,获取相同的值,然后将相同的密钥设置为不同的值。
答案 0 :(得分:1)
如果您正在使用XDCR,则可能出现重复键的情况。即使您在设置之前检查了值(使用couchbase.add操作),它也可以生成两个相同的键。
在群集中,Couchbase Server提供强大的一致性 文件级别。另一方面,XDCR也提供最终的 群集间的一致性。将选择内置冲突解决方案 如果相同的文件是两个集群上相同的“赢家” 两个集群都发生了变异。如果发生冲突,则将文档与 最多的更新将被视为“赢家”。如果是同一份文件 在源和目标上更新相同的次数, 其他元数据,如数字序列,CAS值,文档 标志和到期TTL值用于选择“赢家”.XDCR 跨群集应用相同的规则以确保文档 保持一致性。
为避免此问题,couchbase建议存储有关数据中心/群集的一些信息,或使用GUID等唯一键。我认为第二种方式不是首选方式,因此您可以通过添加数据中心位置作为键前缀并在应用程序端处理它们来实现第一种方式:
US-east.mykey_1
US-west.mykey_1