Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang如何处理非常大的消息?_Erlang - Fatal编程技术网

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

Erlang如何处理非常大的消息?,erlang,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,_Rea

我使用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还能使用它吗

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

所有消息都会被复制(一些较大的二进制文件除外):这意味着如果你要发送大量的大消息,内存使用要比发送小消息稳定得多,等等,你必须准备一些减速

在分布式Erlang的情况下,需要“上传”到远程节点的非常大的消息可能会阻止心跳,从而可以知道VM是否处于活动状态,如果延迟太短,或者消息太大,不适合您发送它们的频率


在任何情况下,解决方案都是衡量你能或不能处理什么。据我所知,关于消息大小,没有硬编码限制。但是,要知道,一般来说,较小的消息更可取。

>一百万列?你的意思是行,对吗?而且看起来你把模块和进程的概念混为一谈了。消息被发送到进程,这些进程可能执行来自许多模块的代码。是的,行而不是列。对,发送到进程而不是模块。谢谢你指出我的错误。非常感谢。这正是我的意思。