[SR-Users] how to match exact string value in mtree (Uri Shacked)

Javier Gallart jgallartm at gmail.com
Fri Feb 17 14:47:53 CET 2012


HI Daniel

On Fri, Feb 17, 2012 at 1:44 PM, Daniel-Constantin Mierla <miconda at gmail.com
> wrote:

>  Hello,
>
>
> On 2/17/12 1:04 PM, Javier Gallart wrote:
>
> Hi Daniel,
>
>  no, in order to find the best match we do a manual trick using
> the s.prefixes transformation (I think you suggested that).
>
>
> could be, at least is the way I do prefix matching with mysql. Postgres,
> on the other hand, afaik, has an index plugin to match the longest prefix,
> might not be in default distro, but can be found on the net for sure.
>
>
>  We start with the full $rU and stop when we find a non-null value. This
> kamailio is serving many thousands of calls per hour, and the response time
> is pretty much the same as when we used the mtree module. For us , using
> redis has the advantage of being able to load the tree data faster than
> when we used postgres without the need to perform a mtree reload.
>
>
> Loading huge amount of records from mysql takes time indeed.
>
> Maybe prefix matching will be added in redis in the future, or scripted
> server side in lua, as I understood it has such feature. Another option
> would be to add a custom command in kamailio like redis_cmd_pmatch() to do
> internally these prefix-based commands until a match, could simplify the
> config if it becomes something very popular.
>

Yes, redis suppors LUA scripting through the EVAL command. Another possible
approach would be to use pipelining. Instead of executing a query per
prefix, redis offers has the feature of queing multiple commands and send
them only once to the server. For example:
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> "HGET" "tree:1000:routes" "3466157"
QUEUED
redis 127.0.0.1:6379> "HGET" "tree:1000:routes" "346615"
QUEUED
redis 127.0.0.1:6379> "HGET" "tree:1000:routes" "34661"
QUEUED
redis 127.0.0.1:6379> exec
1) (nil)
2) (nil)
3) "c=2000;q=100"

That way  the iteration could take place in the result having issued a
single command. For that, the redis module should support both multivalue
responses.

>
> Also, I forgot about the other solution in kamailio - pdb module written
> by 1&1 for number portability:
>   * http://kamailio.org/docs/modules/stable/modules/pdb.html
>

I hadn't  thought of using it, thanks for the tip. I will take a look.

Regards

Javi

>
>
> Just mentioning it here for let it be known, if redis is working fine for
> you, makes no sense to look for other solutions.
>
> Cheers,
> Daniel
>
>
>
>  Regards
>
>  Javi
>
>
> On Fri, Feb 17, 2012 at 10:25 AM, Daniel-Constantin Mierla <
> miconda at gmail.com> wrote:
>
>>  Hello Javier,
>>
>> one question about redis, can it do longest prefix matching or all
>> prefixes match?
>>
>> Cheers,
>> Daniel
>>
>>
>> On 2/16/12 2:51 PM, Javier Gallart wrote:
>>
>>  Hello Uri
>>
>>  I had similar needs and I found the ndb_redis module more suited for
>> that type of task. Instead of a tree you have a hash like this: tname
>> tprefix tvalue. If you do a hget nts $avp(DID) and you get a not null
>> value you have found your exact match. It works very  well for me and the
>> time it takes for that "query" is barely noticeable. Of course redis does
>> not address items like persistence, etc the same way a rdbms does.
>> Hope it helps.
>>
>>  Regards
>>
>>  Javi
>>
>> On Thu, Feb 16, 2012 at 12:00 PM, <sr-users-request at lists.sip-router.org>wrote:
>>
>>> Send sr-users mailing list submissions to
>>>        sr-users at lists.sip-router.org
>>>
>>> To subscribe or unsubscribe via the World Wide Web, visit
>>>        http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>> or, via email, send a message with subject or body 'help' to
>>>        sr-users-request at lists.sip-router.org
>>>
>>> You can reach the person managing the list at
>>>        sr-users-owner at lists.sip-router.org
>>>
>>> When replying, please edit your Subject line so it is more specific
>>> than "Re: Contents of sr-users digest..."
>>>
>>>
>>> Today's Topics:
>>>
>>>   1. how to match exact string value in mtree (Uri Shacked)
>>>
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Message: 1
>>> Date: Thu, 16 Feb 2012 12:54:50 +0200
>>> From: Uri Shacked <ushacked at gmail.com>
>>> Subject: [SR-Users] how to match exact string value in mtree
>>> To: "SIP Router - Kamailio (OpenSER) and SIP Express Router (SER) -
>>>        Users   Mailing List" <sr-users at lists.sip-router.org>
>>> Message-ID:
>>>        <CAMMbDhTFNXAE-K88=
>>> AeMjO7AnA_QJV3Ajj3AH-AxemXN3ze6HQ at mail.gmail.com>
>>> Content-Type: text/plain; charset="iso-8859-1"
>>>
>>> Hi,
>>>
>>> I am using Mtree to match prefix numbers, some of them starts with 0 or
>>> characters like D for example.
>>> so, the mtree param is like this:
>>>
>>> modparam("mtree", "db_url", CFGDB)
>>> modparam("mtree", "mtree",
>>> "name=nts;dbtable=service_numbers_view;type=0;")
>>> modpmodparam("mtree", "char_list", "0123456789*+#YMDabcdefgh")
>>> modparam("mtree", "pv_value", "$avp(mtval)")
>>> modparam("mtree", "pv_values", "$avp(mtvals)")
>>>
>>> The thing is, that i tried all:
>>>
>>> if(!mt_match("nts", "$avp(DID)","1"))
>>> if(!mt_match("nts", "$avp(DID)","2"))
>>> if(!mt_match("nts", "$avp(DID)","0"))
>>>
>>> and lets say i have the both prefix in the nts mtree:
>>> 09555
>>> 09555333
>>>
>>> And the prefix i search for is  $avp(DID)=09555444
>>>
>>> I allwasy get the 09555 because it is the longest match.
>>> I need exact match.....
>>>
>>> how do i do that?
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <
>>> http://lists.sip-router.org/pipermail/sr-users/attachments/20120216/9d2eb778/attachment.html
>>> >
>>>
>>> ------------------------------
>>>
>>> _______________________________________________
>>> sr-users mailing list
>>> sr-users at lists.sip-router.org
>>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>>
>>>
>>> End of sr-users Digest, Vol 81, Issue 40
>>> ****************************************
>>>
>>
>>
>>
>>  _______________________________________________
>> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing listsr-users at lists.sip-router.orghttp://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>>
>>
>>  --
>> Daniel-Constantin Mierla -- http://www.asipto.comhttp://linkedin.com/in/miconda -- http://twitter.com/miconda
>>
>>
>
> --
> Daniel-Constantin Mierla -- http://www.asipto.comhttp://linkedin.com/in/miconda -- http://twitter.com/miconda
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20120217/94cf5cdb/attachment.htm>


More information about the sr-users mailing list