[erlang-questions] Managing the order of rows in mnesia
jm
jeffm@REDACTED
Wed Apr 1 08:57:30 CEST 2009
What is a good way to track the order of rows in a mnesia database? What
I have is a set of records which need to be processed in a set order as
these define a set of rules to be obeyed. It's an ACL. Further, rules
may be inserted or delete. I've thought of having an order field which
is an integer, but this causes problems with guessing a good integer
value. This lead to the idea of have parent and child pointers which
would be easier to mantain. Is there a better that I've missed?
Also, along the same lines is there an efficient search algorithm which
doesn't involve visting every row until a match is found or the end of
the table is reached?
To make it a little more concrete this is roughly what I'm thinking,
-define(entry, {
id, %% unique identifier
parent, %% id of parent row
child, %% id of child row
a, %% first field to be matched against
b, %% second field to be matched
against
action %% action to be returned
}).
Example table ('*' denotes wildcard, using integers where ref() values
would be used in id, parent, and child columns)
id parent child a b action
15 top 1 denise '*' deny
1 15 2 alice car allow
2 1 5 alice motorbike deny
5 2 11 bob car deny
11 5 6 '*' car allow
6 11 bottom '*' motorbike allow
example searches and results
{alice, car} -> allow
{carol, car} -> allow
{alice, motorbike} -> deny
{carol, motorbike} -> allow
{carol, yacht} -> undefined
{denise, car} -> deny
Thoughts?
Jeff.
More information about the erlang-questions
mailing list