Riak Erlang映射/reduce返回{error,notfound}
我正在运行以下Riak映射阶段:Riak Erlang映射/reduce返回{error,notfound},erlang,mapreduce,riak,Erlang,Mapreduce,Riak,我正在运行以下Riak映射阶段: -module(delete_map_function). -export([get_keys/3]). %Returns bucket and key pairs from a map phase get_keys(Value,_Keydata,_Arg) -> [[riak_object:bucket(Value),riak_object:key(Value)]]. 以及以下Riak减少阶段: 我一直收到以下错误消息: {"phase":0,
-module(delete_map_function).
-export([get_keys/3]).
%Returns bucket and key pairs from a map phase
get_keys(Value,_Keydata,_Arg) ->
[[riak_object:bucket(Value),riak_object:key(Value)]].
以及以下Riak减少阶段:
我一直收到以下错误消息:
{"phase":0,"error":"function_clause","input":"{{error,notfound},{<<\"my_bucket\">>,<<\"item_key\">>},undefined}","type":"error","stack":"[{riak_object,bucket,[{error,notfound}],[{file,\"src/riak_object.erl\"},{line,251}]},{delete_map_function,get_keys,3,[{file,\"delete_map_function.erl\"},{line,7}]},{riak_kv_mrc_map,map,3,[{file,\"src/riak_kv_mrc_map.erl\"},{line,164}]},{riak_kv_mrc_map,process,3,[{file,\"src/riak_kv_mrc_map.erl\"},{line,140}]},{riak_pipe_vnode_worker,process_input,3,[{file,\"src/riak_pipe_vnode_worker.erl\"},{line,444}]},{riak_pipe_vnode_worker,wait_for_input,2,[{file,\"src/riak_pipe_vnode_worker.erl\"},{line,376}]},{gen_fsm,...},...]"}
我在某个地方读到过,我应该在映射阶段使用filter\u notfound
参数,但即使添加了它,我仍然会得到错误:
MapReduceResult mapReduceResult = RiakUtils.getPBClient().mapReduce(iq)
.addMapPhase(new NamedErlangFunction("delete_map_function", "get_keys"), "filter_notfound")
.addReducePhase(new NamedErlangFunction("delete_reduce_function", "delete"))
.execute();
我正在运行Riak 1.3并首先使用v1.1.0。我认为通过map/reduce阶段删除密钥不是一种有效的方法。若你们得到了密钥列表并将其提供给映射阶段,riak将首先读取所有对象,然后将其提供给你们的函数。所以,若您只需要删除对象,最好不用读取就删除 第二。应编写所有map/reduce函数,但以下情况除外:
- 由于riak的最终性质,您可以得到
,而不是{error,notfound}
Value
- 您还可以将删除的riak对象作为
。您可以知道该对象已被特殊标志删除值
:dict:is_key(,riak_object:get_metadata(RiakObj))
get_keys({error, notfound},_Keydata,_Arg) ->
[];
get_keys(Value,_Keydata,_Arg) ->
[[riak_object:bucket(Value),riak_object:key(Value)]].
我有一个erlang映射阶段,它只返回值直到墓碑键,并退出映射阶段。你能告诉我我做错了什么吗?如果你愿意,我可以在这里粘贴代码。
get_keys({error, notfound},_Keydata,_Arg) ->
[];
get_keys(Value,_Keydata,_Arg) ->
[[riak_object:bucket(Value),riak_object:key(Value)]].