Телефонный коммутатор.WildSery писал(а):+1.hvlad писал(а):Хочется как правильно - или выноси обработку на сервер, или избавляйся от 3500 вызовов
Нигде в здавом уме применять 3500 вызовов одного запроса мне и в голову не придёт (кроме закачки данных в биллинге, например, но это не селективный).
Пишется процедура, которая делает те же операции, либо возвращается результат сразу всех 3500 вызовов, и обрабатывается по одному в цикле, если с ними что-то в клиенте нужно делать.
Если расскажешь в двух словах, что делается, возьмусь посоветовать что-нибудь путное.
2 таблицы:
incalls, в которую заносится информации о пришедшем вызове (время начала, длительность, номер абонента)
outcalls, в которую заносятся исходящие вызовы (куда, длительность ожидания ответа, длительность разговора номер входящего вызова), к каждому входящему может быть несколько исходящих
первая грабель была на отчете, выводящем историю звонков, там шел цикл для всех водящих за период (один select) вывести информацию о нем и потом - обо всех его исходящих
3500 пачкой - это отчет, собирающий статистику за сутки. Опять же для всех входящих я смотрю в исходящие и нахожу первый вызов, на который ответили. Таким образом получаю время ожидания у клиента, потом информация о входящем звонке, времени начала, длительности и ожидании скармливается в анализатор статистики, который высчитывает картинку одновременных звонков, и считает разную статистику (среднее время ожидания, размер очереди к диспетчерам и т.д.)
Тут этот запро сзаткнут может быть только потому, что он делается раньше поодиночке для каждого вызова и время ожидания моет быть записано в информацию о входящем вызове. Но это не для всех ситуаций подходит.
Поэтому ключевой вопрос сейчас - кто тормозит и должно ли быть так