Hi!

Fun question -- and a perfect use-case for the benchmark <https://opensips.org/docs/modules/3.6.x/benchmark.html> module, allowing you to find the precise answer to this question and also share it with us!

While the dialplan uses a hash table to store its string-based rules, unfortunately it seems to be hardcoded to *16* (???).  Which means on 1M records, you will get 62K on each bucket on average.  Now, imagine doing ->next, ->next, ->next, etc. 62K times on each number lookup...  So I think performance will be decent since C lang is fast, but far from ideal.  The hash size should be /configurable/ /- /an excellent feature request for people getting into OpenSIPS development.

OTOH, the sql_cacher uses cachedb_local to store/pull its keys, which has a much wider hash size (IIRC, *1024* buckets).  So I think it will be visibly faster than dialplan when doing 1M lookups over 1M records.

Best regards,

On 03.05.2025 12:27, M S wrote:
How better is it to use a
for(i=0 to 1000000) {
  if($sql_cached_value(c_features:disabled:$fU)<>NULL || $sql_cached_value(c_features:disabled:$rU)) {
      send_reply(503);
  }
}

instead of just a:

if(dp_translate($fU) || dp_translate($rU)) {
  send_reply(503);
}

--
Liviu Chircu
www.opensips-solutions.com  |www.siphub.com
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to