впрос по asterisk+realtime mysql
asterisk realtime mysql
Откуда: Moscow-Minsk
Сообщений: 18
|
Re: впрос по asterisk+realtime mysql
я вообще-то имею ввиду серверное время, а не время разговора. Если нету такой фичи в астере,как держать одно/пул постоянных коннектов к базе с возможностью вызова встроенных процедур - так и скажите. Но не надо мне тут говорить, что это неправильно или еще как-то. Я же сразу спросил про нормальное решение, а не методом костылей
|
Сообщений: 866
|
Re: впрос по asterisk+realtime mysql
что мешает делать через ODBC ?
|
Откуда: Moscow-Minsk
Сообщений: 18
|
Re: впрос по asterisk+realtime mysql
ну вот я сразу и написал вторым же постом своим через odbc ;) Просто потом засомневался, держит ли он постоянный коннект
|
Сообщений: 1573
|
Re: впрос по asterisk+realtime mysql
Klochan: Я же сразу спросил про нормальное решение, а не методом костылей
Это был ответ на вопрос, как можно вызывать процедуры в базе ...
Но вы уже обозвали "костылем" то, что даже еще не пробовали.
Это не костыль, а нормально работающая app.
А если вас "тревожат" множественные коннекты к базе, то стройте под свои нужды.
|
Откуда: Moscow-Minsk
Сообщений: 18
|
Re: впрос по asterisk+realtime mysql
cron333, спасибо за ваши ответы, но можно больше без ваших комментариев? Каждый раз создавать коннект к базе и завершать его - извольте
|
Откуда: Уфа
Сообщений: 5856
|
Re: впрос по asterisk+realtime mysql
Klochan, вам дали варианты - а вы недовольны и еще затыкаете тех, кто вам помогает.
некрасиво поступаете
|
Откуда: Москва
Сообщений: 3421
|
Re: впрос по asterisk+realtime mysql
мне не нравится работать с func_odbc, да не только не нравится, есть вещи, которые на нем не сделать, что можно сделать из app_mysq.
Asterisk - использует модель потоков, а не процессов, это значит, что коннект к базе может быть глобальной переменной, и будет
использоваться для всех запросов. Я когда-то решил именно этот вопрос -
http://asteriskpbx.ru/wiki/how-to-make-app_mysql-use-one-database-connection-for-all-queries
|
Откуда: Moscow-Minsk
Сообщений: 18
|
Re: впрос по asterisk+realtime mysql
максим, я это прочитал. Да, можно через if это прогонять, но думал есть сразу встроенное универсальное средство =)
switch, когда мне пытаются доказать, что каждый раз открывать соединение к базе, делать запрос и закрывать соединение - это нормально, я считаю обратное. Это расход процессорного времени, ресурсов и т.д. По мне гораздо правильнее сделать пул коннектов к базе и по ним уже гнать запросы. Хотел получить пример того, как это реализовано во фрирадиусе.
|
Откуда: Уфа
Сообщений: 5856
|
Re: впрос по asterisk+realtime mysql
Klochan, по тестам на 100 разговоров при 4 cps разницы нет (при выборке из пустой таблицы). важно лишь закрывать коннект
|
Сообщений: 1573
|
Re: впрос по asterisk+realtime mysql
И при большем кол. работает нормально. Но если требуется постоянный коннект, то вот навскидку набросал. Создание пула из трех коннектов в БД и использование их в контексте [context]:
[context]
exten => _X.,1,Set(POOL=${RAND(1|3)})
exten => _X.,n(mysql),MYSQL(Query resultid ${CONNID_${POOL}} SELECT\ <запрос>)
exten => _X.,n,GotoIf($["${MYSQL_STATUS}" = "-1"]?500)
exten => _X.,n,MYSQL(Fetch fetchid ${resultid} BILL)
exten => _X.,n,MYSQL(Clear ${resultid})
...
exten => _X.,500,Macro(connect_db,${CONNID_${POOL}},${POOL})
exten => _X.,n,Goto(mysql)
[init-connect-db]
exten => CONNECT,1,MYSQL(Disconnect ${CONNID_1})
exten => CONNECT,n,MYSQL(Connect connid localhost asterisk asterisk asterisk)
exten => CONNECT,n,NoOp(MYSQL_STATUS: ${MYSQL_STATUS}) ; вместо NoOp можно использовать что угодно для оповещения ...
exten => CONNECT,n,Set(GLOBAL(CONNID_1)=${connid})
exten => CONNECT,n,MYSQL(Disconnect ${CONNID_2})
exten => CONNECT,n,MYSQL(Connect connid localhost asterisk asterisk asterisk)
exten => CONNECT,n,Set(GLOBAL(CONNID_2)=${connid})
exten => CONNECT,n,MYSQL(Disconnect ${CONNID_3})
exten => CONNECT,n,MYSQL(Connect connid localhost asterisk asterisk asterisk)
exten => CONNECT,n,Set(GLOBAL(CONNID_3)=${connid})
[macro-connect_db]
exten => s,1,MYSQL(Disconnect ${ARG1})
exten => s,n,MYSQL(Connect connid localhost asterisk asterisk asterisk)
exten => s,n,ExecIf($["${MYSQL_STATUS}" = "-1"] - письмо админу, звонок ему же, удар в рельсу и т.д. ... )
exten => s,n,Set(GLOBAL(CONNID_${ARG2})=${connid})
При старте системы нужно создать вызов в контекст - init-connect-db. (можно придумать и другую инициализацию). А можно вообще не инициализировать. Коннекты сами создадуться (и будут пересоздаваться при необходимости) при первом вызове в контекст - context.
Остальное - полезности, "украшательства", счетчики, проверки и т.д. ... на свой вкус.
|
|