2016-05-02 6 views
1

Register名前とtestという名前の単純なRiak CRDT Mapを作成するにはどうすればよいですか?このdocumentation hereを見ていますが、XPathと地図上の登録名がどのようにつながっているのか分かりません。ここでHaskell Riakクライアントのマップ用CRDT操作

は私がやりたいだろうものです:作成/更新MapRegisterと名前usernameと値test(バケットタイプmapbucketの下で、バケツuinfo、キーtest1)。ここではErlangのクライアントはそれを行うだろうかです(テストしていません - 修正されたコピー&ペースト、私が書いた他のコードから):

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)) 

私はgithubのコードリポジトリを検索するが、HaskellのRiakにクライアントにそれを行うのいずれかの例を見つけることができませんでした。 Haskell Riakクライアントに精通している人がいれば、CRDT opsが上記のようなことをする方法についての指針を提供できるなら、私は非常に感謝します。

答えて

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] 
関連する問題