[英]Riak sibling creation in erlang
假設兩個進程同時使用相同的存儲桶和相同的密鑰(可能要尋址兩個不同的RIAK節點)同時對RIAK執行相同的寫命令,並且allow_mult true,並且該密鑰肯定是存儲桶中的新密鑰:{ok,WrittenObject} = riakc_pb_socket: put(Pid,Obj,[return_body])
是否可能發生兩個進程都將WrittenObject返回到riakc_obj:value_count(WrittenObject)大於1的情況,還是肯定一個進程將其設為1,而另一個進程將其值設為2?
根據密鑰中已存儲的內容以及每個put請求中包含的vclock,值計數可以為1,2或3。假設沒有分區事件(即,非故障情況),則每個put將協調一個密鑰的首選項中的主要vnode的數量,如果存儲對象中包含的vclock不主導已經存在的vnode,則將存儲這兩個值。 即使兩個請求幾乎是同時發出的,也要先處理,如果兩個請求都看不到同級,那將是一場比賽。
編輯:如果存儲桶上的allow_mult
屬性設置為false,則Riak將基於元數據中的X-Riak-Last-Modified
和X-Riak-Deleted
條目選擇一個值返回。 這意味着您輸入的值可能不是返回的值。
僅當allow_mult
為true時,您才會看到多個返回的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.