如何使用erlang文件在Riak中连续加载数据

时间:2014-05-19 11:15:16

标签: erlang riak erlang-shell riak-search

我想运行一个程序,将数据加载到riak数据库中,但是当我给出范围大约为10时,进程突然停止。如果我给5-8它正在接收并加载数据,当我给出范围超过10它挂了。发生了什么。

test(X,Y) ->

if X < Y ->
    {ok,Pid} = riakc_pb_socket:start_link("127.0.0.1",10017),
    Val = X,
    io:format("~p",[Pid]),
    Object = riakc_obj:new(<<"test_age">>,undefined,Val),
    riakc_pb_socket:put(Pid,Object),
    test(X+1,Y);
true -> []
end.

该函数将采用一系列数字,只需将数字添加到旧数字中即可插入riak数据库。

当我从erlang shell运行这个程序时,它在取大约10的范围后停止:

erlriak:test(1,5)
<0.50.0><0.51.0><0.52.0><0.53.0><0.54.0>[]
erlriak:test(5,15)
<0.62.0><0.63.0><0.64.0><0.65.0><0.66.0><0.67.0><0.68.0><0.69.0><0.70.0>|

在&lt; 0.70.0&gt;之后悬挂。几分钟没有回来。我得到以下内容:

=ERROR REPORT==== 19-May-2014::17:29:54 ===
** Generic server <0.104.0> terminating 
** Last message in was {req_timeout,#Ref<0.0.0.423>}   
** When Server state == {state,"127.0.0.1",10017,false,false,undefined,false,
                           gen_tcp,undefined,
                           {[],[]},
                           1,[],infinity,undefined,undefined,undefined,
                           undefined,[],100}
** Reason for termination == 
** disconnected
** exception exit: disconnected

1 个答案:

答案 0 :(得分:1)

我怀疑你超过了同时连接到Riak的PB端口的限制。可能的解决方案:

  • 在递归之前调用riakc_pb_socket:stop(Pid)关闭连接
  • 将调用移至start_link函数外的test,以便所有请求共享同一个套接字
  • app.config中增加pb_backlog,以便您可以拥有更多的同步连接