Утверждение Fastest Way
до return more than 5000 rows
зависит от рассматриваемой проблемы. Какова структура базы данных? Что мы хотим ? какова структура записи? После этого все сводится к тому, как вы пишете свои функции чтения. Если мы уверены в первичном ключе, то мы используем mnesia:read/1 or mnesia:read/2
, если нет, лучше и красивее использовать Понимание списка запросов . Его более гибкий поиск вложенных записей и сложных условных запросов. см использование ниже:
-include_lib("stdlib/include/qlc.hrl").
-record(bigdata, {mykey,some1,some2}).
%% query list comprehenshions
select(Q)->
%% to prevent against nested transactions
%% to ensure it also works whether table
%% is fragmented or not, we will use
%% mnesia:activity/4
case mnesia:is_transaction() of
false ->
F = fun(QH)-> qlc:e(QH) end,
mnesia:activity(transaction,F,[Q],mnesia_frag);
true -> qlc:e(Q)
end.
%% to read by a given field or even several
%% you use a list comprehension and pass the guards
%% to filter those records accordingly
read_by_field(some2,Value)->
QueryHandle = qlc:q([X || X <- mnesia:table(bigdata),
X#bigdata.some2 == Value]),
select(QueryHandle).
%% selecting by several conditions
read_by_several()->
%% you can pass as many guard expressions
QueryHandle = qlc:q([X || X <- mnesia:table(bigdata),
X#bigdata.some2 =< 300,
X#bigdata.some1 > 50
]),
select(QueryHandle).
%% Its possible to pass a 'fun' which will do the
%% record selection in the query list comprehension
auto_reader(ValidatorFun)->
QueryHandle = qlc:q([X || X <- mnesia:table(bigdata),
ValidatorFun(X) == true]),
select(QueryHandle).
read_using_auto()->
F = fun({bigdata,SomeKey,_,Some2}) -> true;
(_) -> false
end,
auto_reader(F).
Так что я думаю, что если вы хотите самый быстрый способ, нам нужно больше разъяснений и деталей проблемы. Скорость зависит от многих факторов, мой дорогой!