time for deleting records from mnesia

Martin Bjorklund mbj@REDACTED
Tue May 9 22:16:54 CEST 2006


Hi,

You might want to try to add a

   mnesia:lock({table, t_test}, write)

first in your fun.

I.e. grab a single lock in the entire table instead of a lock on each
item.  (hi klacke!)

Not sure how much of the overhead is there though...



/martin




Tony Zheng <tzheng@REDACTED> wrote:
> Hi
> 
> I want to delete some selected records from my mnesia database
> table(t_test). I tried to use mnesia:delete_object(Record) and
> mnesia:delete({Tab, Key}), but both of them needed about 20 minutes when
> I deleted 100000 records. I want to know if there are some other method
> to do it faster? Thanks.
> 
> 1. use mnesia:delete_object(Record) to delete 100000 records, it spent
> 22 minutes.
> 
>    F = fun() ->		
> 	MatchHead = #t_test{transaction_time='$1', _='_'},
> 	GuardDel = {'==', {element, 1, '$1'}, {date()}}, 
> 	Result = '$_',
> 	ListsDel = mnesia:select(t_test,[{MatchHead, [GuardDel], [Result]}]),
> 	lists:foreach(fun(List) -> mnesia:delete_object(List) end, ListsDel)
>    end,
>    mnesia:transaction(F).
> 
> 2. use mnesia:delete({Tab, Key}) to delete 100000 records, it spent 23
> minutes.
>  
>    F = fun() ->		
> 	MatchHead = #t_test{transaction_time='$1', _='_'},
> 	GuardDel = {'==', {element, 1, '$1'}, {date()}}, 
> 	Result = '$_',
> 	ListsDel = mnesia:select(t_test,[{MatchHead, [GuardDel], [Result]}]),
> 	lists:foreach(fun(List) -> mnesia:delete({t_test, element(2, List)})
> end, ListsDel)
>    end,
>    mnesia:transaction(F).
> 
> 
> tony
> 



More information about the erlang-questions mailing list