首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理后提交钩子中的riak数据类型

处理后提交钩子中的riak数据类型
EN

Stack Overflow用户
提问于 2015-03-17 05:56:29
回答 1查看 181关注 0票数 3

我想为riak实现一个that提交钩子,该钩子可以减少另一个桶中映射中的计数器。然而,我在处理riak数据类型时遇到了一些困难。

这是我试图从riak console

代码语言:javascript
运行
复制
(riak@127.0.0.1)9>{ok, C} = riak:local_client().
{ok,{riak_client,['riak@127.0.0.1',undefined]}}
(riak@127.0.0.1)10>{ok, Obj} = C:get({<<"product">>, <<"default">>}, <<"1">>).
{ok,{r_object,{<<"product">>,<<"default">>},
          <<"1">>,
          [{r_content,{dict,5,16,16,8,80,48,
                            {[],[],[],[],[],[],[],[],[],[],[],[],...},
                            {{[],[],[],[],
                              [[<<"dot">>|{<<"#\tþù"...>>,{...}}]],
                              [],[],[],[],[],...}}},
                      <<69,2,0,0,0,11,114,105,97,107,95,100,116,95,109,97,112,
                        77,1,...>>}],
          [{<<35,9,254,249,108,41,151,242>>,{1,63593788980}}],
          {dict,1,16,16,8,80,48,
                {[],[],[],[],[],[],[],[],[],[],[],[],[],...},
                {{[],[],[],[],[],[],[],[],[],[],[],...}}},
          undefined}}
(riak@127.0.0.1)11> Mp = riak_object:get_value(O3).
<<69,2,0,0,0,11,114,105,97,107,95,100,116,95,109,97,112,
  77,1,131,80,0,0,0,206,120,1,203,96,...>>
(riak@127.0.0.1)12> MpP = riak_dt_map:from_binary(Mp).
{error,invalid_binary}

product桶数据类型设置为map。存储的每个对象都应该有一个名为quantity的计数器,我想减少这个计数器。

但是,我无法在预提交或后提交上下文中找到处理数据类型的任何文档或示例代码。(实际上,任何类型的例子都很少)。我一直在阅读客户端地图的源代码,但我对erlang并不熟悉,所以我进展缓慢,希望得到一些帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-17 14:47:17

您拥有的r_object并不直接保存一个riak_dt_map,而是包含一个包含riak_dt_map的riak_kv_crdt,而后者又包含您的计数器。

要更新计数器,首先需要从地图中获取上下文:

代码语言:javascript
运行
复制
{{Context,_},_}=riak_kv_crdt:value(Obj,riak_dt_map).

然后构建操作,在包含在CRDT中的映射中增加名为<<“name”的计数器:

代码语言:javascript
运行
复制
Op = {crdt_op,riak_dt_map,{update,[{update,{<<"name">>,riak_dt_emcntr},increment}]},Context}.

然后将该操作应用于CRDT,提供要用于更新vclock/version向量的参与者ID:

代码语言:javascript
运行
复制
NewObj = riak_kv_crdt:update(Obj,Actor,Op).

结果应该是另一个可以被发送回存储的r_object。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29092235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档