在erlang创建Riak兄弟姐妹

时间:2014-05-10 20:03:03

标签: erlang riak siblings

假设两个进程同时使用相同的存储桶和相同的密钥(可能正在寻址两个不同的RIAK节点)执行相同的写命令,其中allow_mult为true且密钥在存储桶中肯定是新的: {ok,WrittenObject} = riakc_pb_socket:put(Pid,Obj,[return_body])

两个进程都可以在写入对象时返回riakc_obj:value_count(WrittenObject)大于1,或者一个进程将其作为1而另一个进程获得值为2的情况会发生吗?

1 个答案:

答案 0 :(得分:0)

根据密钥中已存储的内容以及每个put请求包含的vclock,值计数可以是1,2或3.假设没有分区事件(即非故障情况),每个put将是由密钥的预先列表中的一个主要vnode协调,并且如果所存储的对象中包含的vclock不支配已经存在的对象,则将存储这两个值。即使两个请求几乎同时进行,首先处理,如果不是两者都看到兄弟将是一场竞赛。

编辑: 如果存储桶上的allow_mult属性设置为false,则Riak将根据元数据中的X-Riak-Last-ModifiedX-Riak-Deleted条目选择要返回的单个值。这意味着您输入的值可能不是返回的值。

只有当allow_mult为真时,您才会看到返回多个值。