[erlang-questions] Mnesia sorting/limiting

Ola Andersson A <>
Wed Jun 10 10:30:47 CEST 2009


I was surprised to discover that there is no priority queue
implementation in OTP.
This was a few years back when I needed one. I don't know if that has
changed lately.
It seems like an obvious extension to the queue module.
I couldn't find anything using google either so I had to resort to
rolling my own using gb_trees.
That worked ok for my purposes but it could probably be made more
efficient and generalized.
Any volounteers?
/OLA. 

> -----Original Message-----
> From:  
> [mailto:] On Behalf Of Barry Mitchelson
> Sent: den 9 juni 2009 22:17
> To: 
> Subject: [erlang-questions] Mnesia sorting/limiting
> 
> Hi,
> 
> I'm relatively new to Erlang, and as a mini project to work 
> on as I learn, I'm writing a simple message queue. I'm having 
> some problems retreiving data from the mnesia table I am 
> using to store my messages.
> 
> My job records are defined as :
> 
> -record(job, { id, body, due = 0, priority = 1 }).
> 
> and after much playing around, the code to retreive the job 
> with the highest priority I have is
> 
> Q1 = qlc:q([ X || X <- mnesia:table(job)]),
> Q2 = qlc:sort(Q1, {order, fun(Job1, Job2) -> 
> Job1#job.priority > Job2#job.priority end}), C = 
> qlc:cursor(Q2), R = qlc:next_answers(C,1),
> 
> I know this is not the most efficient way, but I'm struggling 
> to find a fast way to do this, and this is without also 
> sorting by the due date which I also want to be able to do. 
> In SQL, the query would be something like
> 
> SELECT * FROM jobs ORDER BY priority, due_at LIMIT 1
> 
> which with the right indexing would return a result very 
> quickly even with a large amount of rows. The code above 
> takes a few seconds with 100,000 records in the table.
> 
> I feel like I'm missing something somewhere, but am running 
> out of ideas.
> 
> Thanks,
> 
> Barry
> 
> ________________________________________________________________
> erlang-questions mailing list. See 
> http://www.erlang.org/faq.html erlang-questions (at) erlang.org
> 
> 


More information about the erlang-questions mailing list