Erlang如何处理非常大的消息?

时间:2012-03-16 11:31:08

标签: erlang

我使用ODBC从数据库中查询表:

getTable(Ref,SearchKey) ->
Q = "SELECT * FROM TestDescription WHERE NProduct = " ++ SearchKey,
case odbc:sql_query(Ref,Q) of 
    {_,_,Data} ->
        %io:format("GetTable Query ok ~n"),
        {ok, Data};     
    {error,_Reason} ->
        %io:format("Gettable Query error ~p ~n",[_Reason]),
        {stop, odbc_query_failed};
    _-> 
        io:format("Error Logic in getTable function ~n")
end.

此函数将返回包含所有db数据的元组。将此发送到另一个流程:

 OtherProcessPid!{ok,Data};

它可以在少量行中正常工作,但是如果一个非常大的数字,超过一百万呢? erlang还可以使用吗?

1 个答案:

答案 0 :(得分:7)

问题不在于“Erlang可以处理非常大的消息吗?”(它可以),而是“你准备好处理非常大的消息的后果吗?”

所有消息都被复制(一些较大的二进制文件除外):这意味着如果您正在进行大量消息的大量消息,内存使用比使用小消息更不稳定,等等,则必须为一些减速做准备。

在分布式Erlang的情况下,需要“上传”到远程节点的非常大的消息可能会阻止心跳,如果延迟太短,可能会知道VM是否存在,或者邮件太大,无法发送它们。

无论如何,解决方案是衡量您能够或不能处理的内容。关于邮件大小,我不知道硬编码限制。但是,要知道较小的消息通常是一般的经验法则。