Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

mysql база префиксов

0

Привет,

Посоветуйте, пожалуйста. Есть mysql база с префиксами, нужно при наборе искать есть ли префикс в базе. Если нету - пускать по другому транку. Как это осуществить?

удалить закрыть спам изменить тег редактировать

спросил 2013-08-13 12:28:18 +0400

cisco Gravatar cisco
35 19 4

2 Ответа

0

Можете взять это за основу: http://lynks.ru/blog/trixbox-podstanovka-napravleniya-v-cdr

ссылка удалить спам редактировать

ответил 2013-08-13 15:11:09 +0400

switch Gravatar switch
8324 11 7 91
http://lynks.ru/
0
  1. напрямую из диалплана
  2. с помощью AGI
ссылка удалить спам редактировать

ответил 2013-08-13 13:50:45 +0400

svoy Gravatar svoy
1603 1 4 20
http://svoy.in.ua/

Comments

я имел ввиду сам подход, например 1 - USA, 1868 - Тринидад. Так вот если Тринидада не будет в списке, то его код как бы начинается с 1 и всё равно звонок пройдёт.

cisco ( 2013-08-13 14:03:21 +0400 )редактировать

отсортировать по длине кода.

meral ( 2013-08-13 14:27:02 +0400 )редактировать

Мерал, а точнее?

cisco ( 2013-08-13 14:58:50 +0400 )редактировать

а точнее это основной запрос биллинга. соответвенно наиболее охраняемая тайна. бесплатно можно посмотреть в a2billing.org например.

meral ( 2013-08-13 23:51:23 +0400 )редактировать

мой вариант - написать процедурку где в отсортированной таблице, как советует meral, по длине кода взять кусок этой таблицы с id начиная с первой цифры искомого номера + длина макс возможного префикса, при этом отсортировать результирующую подтаблицу в обратном порядке. по этой подтаблице итерировать для поиска правильного кода. всего один SELECT и один LOOP - не считая опр. макс длины префикса :) в постгрезе еще проще - там есть рекурсивные запросы и массивы, то есть и процедурку делать не надо :) не забудьте про индексы...

octopas ( 2013-08-15 22:15:42 +0400 )редактировать

угу. только вот не работает это нормально на 100к+ префиксам. потому и говорю что так не очевидно и все это патентуется.

meral ( 2013-08-16 01:05:59 +0400 )редактировать

как так не работает? а индексы на что? есть базка префиксов операторская - ровно 30к, откуда больше, просто интересно.. честно... :-) самый горбатый запрос - ~127мс, там без сортировок, с несколькими проходами по таблице, но возможно и скорее всего постгрес оптимизирует запросы внутри функции - не смотрел что выходит через EXPLAIN. не думаю что mysql сильно отличается по производительности... для оффлайн биллинга с миллионами звонков - согласен, да. но ведь я так понял человеку не это нужно...

octopas ( 2013-08-16 05:35:57 +0400 )редактировать

SELECT * FROM directions WHERE name IN ('7','74','495','74951','749512','7495123','74951234','749512345','7495123456','74951234567') ORDER BY LENGTH(name) DESC LIMIT 1; Total runtime: 3.489 ms на 30-ке тыс записей (индекс btree). потом правда еще несколько раз придется просканировать таблицу чтобы подняться вверх по дереву к нужному типу префикса через цепочку parent...

octopas ( 2013-08-16 07:32:57 +0400 )редактировать

супер хреновый хапрос. но вам виднее. 127 мс это очень много. 10 запросов в секунду(а скорее 4) и ваша база лежит. есть базы префиксов по 500к. сам видел. не забываем при тестах запроса про кеширование.

meral ( 2013-08-16 09:49:35 +0400 )редактировать

хотел свою функу запостить в ответ топикстартеру (где кажет 5 мс стабильно с индексами) - вот только движок сайта глючит- пишет что уже ответил... интересно было бы протестировать ее где 500к... любопытно стало узнать сколько будет попугаев...

octopas ( 2013-08-16 10:59:24 +0400 )редактировать

самая большая таблица которую я видел у ОДНОГО провайдера была 1200к записей и весила под 3мб в csv. а таких провайдеров бывает под десяток. такчто индексы должны быть целочисленными и правильно построеннымы в биллинге который имеет дело больше чем с десятком звонков.

meral ( 2013-08-16 14:04:15 +0400 )редактировать

вот вам табличка, тестируйте http://pro-sip.net/temp/rate.csv . первая попавшееся, 4мб размерчик.

meral ( 2013-08-16 14:17:47 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2013-08-13 12:28:18 +0400

Просмотрен: 164 раз

Обновлен: Aug 16 '13

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.