[erlang-questions] Mnesia fastest select on secondary index
Roberto Ostinelli
roberto.ostinelli@REDACTED
Tue Feb 10 14:07:52 CET 2015
Thank you Ulf. :)
I was benchmarking selects and match_objects, looks like this is indeed the best option.
Cheers,
r.
> On 10/feb/2015, at 13:56, Ulf Wiger <ulf@REDACTED> wrote:
>
>
>> On 10 Feb 2015, at 13:12, Roberto Ostinelli <roberto@REDACTED> wrote:
>>
>> What is the recommended way (and fastest, dirty are desired, inconsistency is ok in the system) to retrieve the record with secondary = <<"a">>?
>
> That would be mnesia:dirty_index_read(Tab, Value, IndexPos).
>
> Eshell V5.10.3 (abort with ^G)
> 1> rd(my_records,{primary,secondary}).
> my_records
> 2> #my_records{}.
> #my_records{primary = undefined,secondary = undefined}
> 3> mnesia:start().
> ok
> 4> mnesia:create_table(my_records,[{type,set},{ram_copies,[node()]},{attributes,record_info(fields,my_records)},{index,[#my_records.secondary]}]).
> {atomic,ok}
> 5> mnesia:dirty_write(#my_records{primary = <<"1">>, secondary = <<"a">>}).
> ok
> 6> mnesia:dirty_read({my_records,<<"1">>}).
> [#my_records{primary = <<"1">>,secondary = <<"a">>}]
> 7> mnesia:dirty_index_read(my_records,<<"a">>,#my_records.secondary).
> [#my_records{primary = <<"1">>,secondary = <<"a">>}]
> 8> timer:tc(mnesia,dirty_index_read,[my_records,<<"a">>,#my_records.secondary]).
> {304,[#my_records{primary = <<"1">>,secondary = <<"a">>}]}
> 9> timer:tc(mnesia,dirty_index_read,[my_records,<<"a">>,#my_records.secondary]).
> {28,[#my_records{primary = <<"1">>,secondary = <<"a">>}]}
> 10> timer:tc(mnesia,dirty_index_read,[my_records,<<"a">>,#my_records.secondary]).
> {37,[#my_records{primary = <<"1">>,secondary = <<"a">>}]}
>
>
> BR,
> Ulf W
>
> Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.
> http://feuerlabs.com
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20150210/2221654b/attachment.htm>
More information about the erlang-questions
mailing list