Алгоритм определения тарифа на услуги представлял собой следующую последовательность действий:
- Выборка по услуге и направлениям перевозки,
- Поиск интервала, в который груз попадал по своим характеристикам,
- Определение максимального тарифа по весу, объему или другим характеристикам.
Таким образом, определение тарифа на услуги осуществлялось перебором. Исходя из структуры грузопотока компании по каждому запросу на определение тарифа обрабатывалось не менее 30% записей Прайса.
Для решения проблемы было предложено перейти на параметрический расчет тарифов. Выявили функциональную закономерность изменения тарифов в зависимости от весового или объемного диапазона. Разработали алгоритм параметрического расчета, при котором определение тарифа на перевозку рассчитывалось как функция заданного типа (полиномиальная, степенная, экспоненциальная) с предопределенными параметрами. В качестве аргумента функции принималась граница весового или объемного диапазона.
ПодробнееРезультат. Пара, Город отправления \ Город получения, в информационной базе, в документе «Прайс», представляла собой одну запись. Как следствие, количество записей в документе «Прайс» сократилось в 33 раза (с 25 000 записей до 750).
Шаг 4. Разделение основных процедур расчета Были разделены этапы получения списка услуг на перевозку, расчета цены и расчета цены с учетом маркетинговых акций Установленная функциональная зависимость в совокупности с выше описанными изменениями позволила хранить данные Прайса непосредственно на сайте в виде JSON-структуры. Такое решение полностью сняло нагрузку на 1С при первичном расчете тарифов, передав самые ресурсозатратные методы на сторону клиента.
Результат. По данным нагрузочного тестирования после реализации мер по повышению производительности информационной системы сайт смог обрабатывать до 100 000 запросов по расчету тарифов в сутки (около 10 000 посетителей сайта), что в 4,5 раза больше, чем до оптимизации процедур и методов расчета.