Mnesia foldl without a transaction

Vladimir Sekissov <>
Wed Jul 7 20:27:06 CEST 2004


Good day,

If you don't care about transaction context it would be something
like this:

dirty_foldl(Fun, Acc, Tab) ->
  Key = mnesia:dirty_first(Tab),
  dirty_foldl(Fun, Acc, Tab, Key).

dirty_foldl(Fun, Ret, Tab, '$end_of_table') ->
  Ret;
dirty_foldl(Fun, Acc, Tab, Key) ->
  NxtAcc = Fun(Key, Acc),
  NxtKey = mnesia:dirty_next(Tab, Key),
  dirty_foldl(Fun, NxtAcc, Tab, NxtKey).

Best Regards,
Vladimir Sekissov

rvg> Hi All,
rvg> 
rvg> My question tonight is about iterating over an mnesia table with the 
rvg> lowest possible overhead to the VM. As far as I can see, a 
rvg> mnesia:foldl(...) call runs in a transaction and then blocks all other 
rvg> mnesia calls. How would I get to iterate over an entire table with as 
rvg> little as possible overhead? At the moment my table sits at about 
rvg> 100000 records and it takes almost 10s to iterate. Any ideas on how to 
rvg> speeds this up?
rvg> 
rvg> Regards,
rvg> 
rvg> Rudolph van Graan
rvg> 
rvg> 



More information about the erlang-questions mailing list