Как Эрланг обрабатывает очень большие сообщения? - PullRequest
2 голосов
/ 16 марта 2012

Я использую 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.

Эта функция вернет кортеж, который включает все данные БД.Отправка этого в другой процесс:

 OtherProcessPid!{ok,Data};

Он отлично работает с небольшим количеством строк, но как насчет очень большого числа, скажем, больше миллиона?Может ли Erlang по-прежнему работать с ним?

1 Ответ

7 голосов
/ 16 марта 2012

Вопрос не в «Может ли Эрланг обрабатывать очень большие сообщения?» (может), скорее, «Вы готовы справиться с последствиями очень больших сообщений?»

Все сообщения копируются (за исключением некоторых больших двоичных файлов): это означает, что вам нужно подготовиться к некоторым замедлениям, если вы выполняете много сообщений больших сообщений, если использование памяти намного менее стабильно, чемс небольшими сообщениями и т. д.

В случае распределенного Erlang очень большое сообщение, которое необходимо «загрузить» на удаленный узел, может блокировать пульсы, позволяя узнать, жива ли виртуальная машина или нетесли задержки слишком короткие или сообщения слишком велики для того, как часто вы их отправляете.

В любом случае решение состоит в том, чтобы измерить то, что вы можете или не можете иметь дело.Я не знаю жестко заданного ограничения в отношении размера сообщения.Знайте, что небольшие сообщения обычно предпочтительнее в качестве общего практического правила.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...