[Asterisk-Users] options for mysql query from dialplan

Matthew Boehm mboehm at cytelcom.com
Thu Aug 18 09:35:13 MST 2005


Hi Damon,
  You are basically doing EXACTLY what we are doing right now; except we 
are doing more.

We now have an AGI PHP script that does the following for every call:

- Connect to MySQL over LAN
- If the dialed number begins with 1, strip it.
- SELECT State FROM lcr_lata WHERE NPA = $dial_npa AND NXX = $dial_nxx
- Do some PHP logic to determine if Interstate vs Intrastate
- SELECT rate, address, technology, prefixes FROM lcr_rates
     LEFT JOIN lcr_carriers USING(carrierid)
     WHERE NPA = $dial_npa AND NXX = $dial_nxx
     AND carrier_active = 1 ORDER BY rate ASC;
- Loop thru results.

lcr_rates has 329,530 rows.
lcr_carriers has 8 rows.
lcr_lata has over 150,000 rows.

Everything preforms in real time.

Here is a sample query of a call that just went thru:

SELECT r.Interstate, rc.name, rc.technology, rc.address, rc.prefix FROM 
lcr_rates r LEFT JOIN lcr_carriers rc ON r.CarrierId = rc.id WHERE r.NPA 
= '254' AND r.NXX = '463' AND r.active = 1 ORDER BY r.Intrastate ASC, 
r.NPA DESC, r.NXX DESC

Query took 0.0025 sec.

I don't see how your table with 300K rows is preforming worse than ours. 
You got indexes?

To make this even better, our MySQL server is a Quad P3 500 Mhz machine.

Works great here.

-Matthew

Damon Estep wrote:
> I am using realtime mysql for extensions, sip, and voicemail.
> 
> Outbound call routing does not really perform well in realtime
> extensions due to the high number of rows in the database (300k), so I
> can not use it. It appears with my limited knowledge that the query
> method is not robust enough for large databases.
> 
> Given the fact that I already have realtime and mysql configured, what
> are my options for running a mysql query from the dialplan to find the
> provider I want to use for outbound. 
> 
> I am not looking for a complete solution, just a hint on the best way to
> query my existing mysql database from the dialplan.
> 
> I have looked at the MySQL command, and there are a lot of notes about
> connection closing and other scary stuff? Does it work?
> 
> Are there other native options given the fact that realtime is
> configured and in use?
> 
> The goal is to run a query against a database like this
> 
> SELECT provideralias FROM ldproviders WHERE npa = (digits 2 thru 4 of
> dialed number) AND nxx = (digits 5 thru 7)
> 
> Then take the provider alias returned and
> Dial(SIP/${EXTEN}@${provideralias},60).
> 
> Next step would be to add a loop for multiple providers, starting with
> the lowest cost.
> 
> Any hints or comments from the pros?
> 
> TIA
> 
> Damon
> 
> 
> _______________________________________________
> Asterisk-Users mailing list
> Asterisk-Users at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-users
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users
> 





More information about the asterisk-users mailing list