2016-05-02 17 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]