0

UPDATE2私は解決策を見つけました( rvirding へのthx)。私はこのようなオブジェクトを配置する必要があります

Object = riakc_obj:new(list_to_binary(Bucket),
                       list_to_binary(Time),
                       list_to_binary(TimeValue)),
ok = riakc_pb_socket:put(Db_pid, Object);

そして、このようにリクエストしてください

Query = [{map,                                                  %query type
             {modfun, riak_kv_mapreduce, map_object_value},         %function from riak erlang built-in module
             none, true}],
    Inputs = {Bucket, [[<<"between">>, <<"0">>, <<"0.05">>]]},
    Result = riakc_pb_socket:mapred(Pid, Inputs, Query),

私はそれがドキュメントで言及されるべきだと思います。

ところで!私が書いたら

Object = riakc_obj:new(<<Bucket>>,
               <<Time>>,
               <<TimeValue>>),

badargについてエラーが発生しました。これについてはまだ混乱しています。(

アップデート

これを書けば

Inputs = {Bucket, [[<<"between">>, 0, 1]]}

エラーは発生せず、「ok」の結果も得られましたが、空であり、予期しない動作です。)

================================================== =============

私はこれで完全に頭がおかしくなったが、それを終わらせなければならない。

私は単純なアプリを持っています:それはtxtファイルからデータ(「タイムスタンプ値」のようなデータ)を抽出し、それをRiakにプッシュしていくつかの範囲クエリを行います。問題は、キーフィルタークエリを実行すると{error、disconnected}が発生することです。キー–タイムスタンプ(0.43など)、値–値(1.14など)、バケット–データ追加時間(「2011-07-24-23-39-45」など)のように、riakでデータを追跡します。リクエストのコードは次のとおりです。

(dca_db.erl)

handle_call({range_query, Bucket, From, To}, _, #state{db_pid = Pid} = State) ->
    Query = [{map,                                                  %query type
             {modfun, riak_kv_mapreduce, map_object_value},         %function from riak erlang built-in module
             none, true}],
    Inputs = {Bucket, [["between", 0, 1]]},
    Result = riakc_pb_socket:mapred(Pid, Inputs, Query),
    {reply, Result, State};

(test / dca_db_tests.erl)

range_request(Pid) ->
Bucket = <<"2011-07-24-23-39-45">>,
Result = gen_server:call(Pid, {range_query, Bucket, 0, 1}),
error_logger:info_msg("RESULT:~p~n",[Result]).

私のコードはgithubにあります– https://github.com/DimitryDushkin/distributed_calc_riak_matlab

(dca_db.erlで)のようなものを使用する場合

Inputs = {Bucket, [["eq", 1]]},

別のエラーがあります

Compiled src/dca_db.erl
undefined
*unexpected termination of test process*
::{{badmatch,{<<"2011-07-24-23-39-45">>,[["eq",1]]}},
   [{dca_db,handle_call,3},
    {gen_server,handle_msg,5},
    {proc_lib,init_p_do_apply,3}]}


=ERROR REPORT==== 25-Jul-2011::00:27:24 ===
** Generic server dca_db terminating 
** Last message in was {range_query,<<"2011-07-24-23-39-45">>,0,1}
** When Server state == {state,<0.105.0>}
** Reason for termination == 
** {{badmatch,{<<"2011-07-24-23-39-45">>,[["eq",1]]}},
    [{dca_db,handle_call,3},
     {gen_server,handle_msg,5},
     {proc_lib,init_p_do_apply,3}]}
=======================================================
  Failed: 0.  Skipped: 0.  Passed: 1.
One or more tests were cancelled.
Cover analysis: /Users/ddushkin/Documents/workspaces/eclipse/distributed_calc_riak_matlab/.eunit/index.html
ERROR: One or more eunit tests failed.
make: *** [test_db] Error 1

そして、フィルターを使用しない場合はすべてが機能します。

Inputs = Bucket,

ありがとうございました。

4

1 に答える 1

2

riakのバケットとキーはバイナリである必要があります。そのため、エラーは発生しません。何も見つからないということは、バケット/キーが間違っていることを意味します。データがDBに追加されたとき、それらはどのように作成されましたか?まったく同じ方法で行うようにしてください。私が一緒に仕事をしたアプリでは、彼らはterm_to_binary(Key)価値のためにやったが、それはあなたが選んだ方法で行うことができる。

于 2011-07-24T21:57:20.037 に答える