Тема: Оптимизация запросов виалон
Описание текущего алгоритма:
На данный момент в системе реализован следующий алгоритм получения данных из “Виалон”:
1) “Логин под токеном” (token/login), запрос выполняется разово для получения ID сессии.
2) “Поиск элементов” (core/search_items), запрос выполняется для каждого необходимого транспортного средства. Транспортных средств может быть сколько угодно. В параметрах указывается тип искомых элементов: “avl_unit”, имя свойства: “sys_name”, так же указывается значение свойства, а именно номер ТС. Из результата отбирается “id” для выполнения дальнейших запросов. Пример запроса в файле “Приложение 1”.
3) “Выполнение отчета” (report/exec_report), запрос выполняется для каждого полученного на предыдущем этапе “id” транспортного средства. В параметрах укзывается id ресурса (reportResourceId), id шаблона (reportTemplateId), id элемента (reportObjectId), id подэлемента указывается 0, задается временной интервал (может быть равен одному часу). Из результата отбирается массив таблиц. Пример запроса в файле “Приложение 2”.
4) “Получить строки таблицы” (report/get_result_rows), запрос выполняется для каждой полученной на предыдущем этапе таблицы. В параметрах указывается индекс таблицы, индекс первой и последней полученной строки. Из результата отбираются необходимые данные по транспортным средствам. Пример запроса в файле “Приложение 3”.
Пункты 2, 3, 4 выполняются для некоторого списка тс, который может быть более 500 штук.
Предложенный механизм оптимизации алгоритма
После первого обращения Нам было предложено использовать операцию “Выполнение нескольких команд” (core/batch). Исходя из информации из технической документации о том, что “Выполнение отчета” (report/exec_report) невозможно выполнять несколько раз в одной сессии, то Нами предположено, что следующий алгоритм невозможен:
1) “Поиск элементов” (core/search_items) для всех транспортных средств в одном запросе.
2) “Выполнение отчета” (report/exec_report) для всех найденных на предыдущем шаге id в одном запросе.
3) “Получить строки таблицы” (report/get_result_rows) для всех отчетов.
Появился вариант объединить эти три запроса в один запрос с использованием операции “Выполнение нескольких команд” (core/batch) следующим образом:
1) “Поиск элементов” (core/search_items) для одного транспортных средств.
2) “Выполнение отчета” (report/exec_report) для найденного на предыдущем шаге id.
3) “Получить строки таблицы” (report/get_result_rows) для текущего отчета.
4) “Удаление результата предыдущего отчета” (report/cleanup_result) для текущего отчета.
5) Повторять пункты 1-4 для всех транспортных средств.
Но при таком алгоритме запроса возникает вопросы:
“А будет ли данный алгоритм более оптимизированный и снизится ли время выполнения?”
“Если же данный алгоритм более эффективный и менее время затратный, то намного ли, так как транспортных средств может быть более 500 штук и интервал времени при выполнении отчета может быть час?”
Так же еще интересующие Нас вопросы:
“Какие еще варианты оптимизации алгоритма могут быть Вами предложены?”
По скольким транспортным средствам получится выполнять данный запрос, чтобы он не переполнялся?