2016-05-02 42 views
1

如何創建一個簡單的Riak CRDT Map包含Register名稱username和值test?我正在看這documentation here,但不明白如何連接地圖中的XPath和寄存器的名稱。CRDT在Haskell Riak客戶端的地圖操作

這裏是我想做什麼:創建/更新MapRegisterusername和價值test(下鬥式mapbucket,鬥uinfo,關鍵test1)。這裏是Erlang的客戶端將如何做到這一點(未測試 - 修改複製粘貼從另一個代碼我寫的):我搜索的GitHub代碼庫

Map = riakc_map:new(), 
    Map1 = riakc_map:update({<<"username">>, register}, 
         fun(R) -> riakc_register:set(<<"test">>, R) end, 
         Map), 
    {ok, Pid} = riakc_pb_socket:start_link("127.0.0.1", 8087), 
    riakc_pb_socket:update_type(Pid,{<<"mapbucket">>,<<"uinfo">>},"test1",riakc_map:to_op(Map1)) 

,卻找不到在Haskell了Riak客戶端做任何例子。如果有熟悉Haskell Riak客戶端和CRDT操作系統的人可以提供關於如何執行上述操作的指示燈,我將非常感激。

回答

1

我想出瞭如何做到這一點。 xpathMap似乎是一個遞歸選擇器來訪問深埋在地圖內另一個地圖上的字段。因此,對於地圖中的頂級字段,xpath將只是該字段名稱。因此,解決方案變爲:

-- get the connection to 127.0.0.1:8087 
conn <- connect defaultClient 

-- xpath here is just "username" fieldname - we use RegisterSet operation 
-- Alternatively, for xpath value, you can do: ("username" :| []), especially, if 
-- passing it as argument in a function 
let op = "username" `mapUpdate` RegisterSet "test" 


-- send off the above operation to create/update the map 
sendModify conn "mapbucket" "uinfo" "test1" [op]