[erlang-questions] slow mnesia query

Rik Ribbers <>
Fri Jan 8 14:51:51 CET 2016


Hello,

Being relatively new to Erlang I got a mnesia database with a record that contains a key and a value. The key is a string (list) and the value another string.

I want to search for all records where the key contains parts of a provided substring (a list) . The code is below:

handle_get(PartialKey1, MaxResults) ->
  PartialKey2 = string:to_lower(PartialKey1),
  F = fun() ->
    C = qlc:cursor( qlc:q(
      [{R, Key, Value} || {R, Key, Value} <- mnesia:table(retro), (string:str(Key, PartialKey2) > 0), (string:len(Value) > 0)]
    )
    ),
    R = qlc:next_answers(C, MaxResults),
    ok = qlc:delete_cursor(C),
    R
  end,
  Result = mnesia:async_dirty(F),
  Result.

The code is working it does what is should do, however it does not perform very well… I guess this does have to do with the string:str comparison that needs to go over all records every time. This shouldn’t be that hard to optimise for performance, however I don’t have any idea how… 

Any help is appreciated 

Gr,
Rik 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4409 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20160108/1dab41ce/attachment.bin>


More information about the erlang-questions mailing list