Tariff Table - Tuple Key Pattern Matching

Rudolph van Graan <>
Mon Jan 5 07:52:41 CET 2004


Hi Daniel,

Why don't you use mnemosyne for this? I haven't compiled this fragment, 
so you might find some bugs here. The general idea is to use match 
clauses for the tests. In this case, if a clause doesn't match, the 
record is not returned. You can modify this to have more intelligent 
tests that not only tests for a first char match.

find_tariffs(TableName,Tariff) ->
   Handle = query
     [ T || T <- table(tarifftable),
            {TariffTable,TariffValue} = T. tarifftablekey, %Extract the 
two values from the key
	       [FirstChar|Rest] = TariffValue,                   %Extract the 
first char from the Tariff value
	       [FirstChar|RestOfTariff] = Tariff ]               %Test the 
input tariff against the input tariff
   end,
   QuerySetup = mnemosyne:setup_query(Handle),
   R =
     mnesia:transaction(
       fun() ->
           Cursor = mnemosyne:init_query(QuerySetup),
           mnemosyne:all_answers(Cursor)
       end).


Regards,

Rudolph

On Jan 3, 2004, at 2:20 AM, Inswitch Solutions - Erlang Evaluation 
wrote:

> Hi,
>
> I hope someone can give as some help about this issue. We are trying 
> to optimizemnesiaaccess time, to phone tariff tables.
> This tariff tables, have about 4000 entries each.
>
>  The index is a tuplekey as follows:
>
> {“Tariff_Table_Name”,”Prefix”}
>
> where
>
> Tariff_Table_Name, is the name of the Tariff plan that applies to the 
> subscriber
> And
> Prefix, is a string, the first digits of the called number.
>
> So our queries are (Tariff Table Name=”TARIFF”):
>
> MatchHead= #tarifftable{tarifftablekey='$1', _='_'},
>  Guard = [{'==',{element,1,'$1'}, "TARIFF"}],
>  Result = '$1',
>  Select =fun() ->
>               mnesia:select(tarifftable,[{MatchHead, Guard, [Result]}])
>            end,
>
>  {atomic,Res} =mnesia:transaction(Select),
>  Res.
>
> So, as a result, it brings 4000tuples, of the form 
> “{“Tariff_Table_Name”,”Prefix”}
>
> Later the application searches for the “prefix” that bettermartchesthe 
> called number (the prefix is a substring of the called number). My 
> question is, instead of bringing all 4000tuples, can I bring just the 
> most similar “Prefix”, like the one which have anspecific 
> firstcaracter? So instead of bringing 4000tuples, I may bring just the 
> most similar ones (the prefixes which are more similar to the 
> destination number?)
>
>
> Best Regards,
>
> daniel
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 4317 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20040105/cb7dcfcf/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2112 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20040105/cb7dcfcf/attachment-0001.bin>


More information about the erlang-questions mailing list