假设两个进程同时使用相同的存储桶和相同的密钥(可能正在寻址两个不同的RIAK节点)执行相同的写命令,其中allow_mult为true且密钥在存储桶中肯定是新的: {ok,WrittenObject} = riakc_pb_socket:put(Pid,Obj,[return_body])
两个进程都可以在写入对象时返回riakc_obj:value_count(WrittenObject)大于1,或者一个进程将其作为1而另一个进程获得值为2的情况会发生吗?
答案 0 :(得分:0)
根据密钥中已存储的内容以及每个put请求包含的vclock,值计数可以是1,2或3.假设没有分区事件(即非故障情况),每个put将是由密钥的预先列表中的一个主要vnode协调,并且如果所存储的对象中包含的vclock不支配已经存在的对象,则将存储这两个值。即使两个请求几乎同时进行,首先处理,如果不是两者都看到兄弟将是一场竞赛。
编辑:
如果存储桶上的allow_mult
属性设置为false,则Riak将根据元数据中的X-Riak-Last-Modified
和X-Riak-Deleted
条目选择要返回的单个值。这意味着您输入的值可能不是返回的值。
只有当allow_mult
为真时,您才会看到返回多个值。