[erlang-questions] Selecting X number of items from Mnesia

Dave Bryson daveb@REDACTED
Fri Feb 8 14:57:53 CET 2008


Great! That's exactly what I needed.  I was just confused a bit by  
the MatchSpec - the erts guide helped.  MatchSpec looks very powerful.

For any other newbies out there trying to do the same thing, here's  
how you can pull the first X number of rows from a table:

% return the first 10 records
mnesia:select(message,[{'$1',[],['$1']}],10,read)

It's also easy to experiment and test your MatchSpec using:  
ets:test_ms/2

Thanks!
Dave


On Feb 8, 2008, at 4:08 AM, Ulf Wiger (TN/EAB) wrote:

> Hynek Vychodil skrev:
>> Just from qlc manual:
>>
>> To return just a few answers cursors can be used. The following code
>> returns no more than five answers using an ETS table for storing the
>> unique answers:
>>
>> C = qlc:cursor(qlc:q([X || X <- qlc:append(QH1, QH2)], 
>> {unique,true})),
>> R = qlc:next_answers(C, 5),
>> ok = qlc:delete_cursor(C),
>> R.
>
> Note, thought, that this will be much more costly than using
> select() with a limit on number of matching objects.
>
> The cursor support needs to create a temporary store, which in
> the case of QLC is solved using a separate process. This will
> involve quite some copying.
>
> BR,
> Ulf W
>
>
>
>>
>> On Feb 8, 2008 9:06 AM, Ulf Wiger <ulf@REDACTED  
>> <mailto:ulf@REDACTED>>
>> wrote:
>>
>>     I'd have to check on how to do it with QLC, but using
>>     mnesia:select(Tab, MatchSpec, NObjs, Lock), you
>>     can quite easily pull the N first objects from an
>>     ordered_set table.
>>
>>     BR,
>>     Ulf W
>>
>>     2008/2/8, Dave Bryson <daveb@REDACTED  
>> <mailto:daveb@REDACTED>>:
>>> I apologize in advance for the newbie question!
>>>
>>> I'm trying to treat an mnesia table as a FIFO queue. What I'd  
>>> like to
>>> be able to do is pull X number of items off the head of the list
>>> returned by a query. There's no conditional values to isolate the
>>> records - I just want the top X number of records.  Is there an
>>> efficient way to do this with qlc?
>>>
>>> Thanks in advance!
>>>
>>> Dave
>>> _______________________________________________
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>>> http://www.erlang.org/mailman/listinfo/erlang-questions
>>>
>>     _______________________________________________
>>     erlang-questions mailing list
>>     erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
>>     http://www.erlang.org/mailman/listinfo/erlang-questions
>>
>>
>>
>>
>> -- 
>> --Hynek (Pichi) Vychodil
>>
>>
>> --------------------------------------------------------------------- 
>> ---
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://www.erlang.org/mailman/listinfo/erlang-questions
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions




More information about the erlang-questions mailing list