
Loginom автоматически оптимизирует выполнение Сценариев, запуская только Узлы, связанные цепочкой передачи данных, и используя параллельные вычисления. Однако в некоторых случаях порядок выполнения необходимо задавать вручную. Для этого предназначен Порт порядка выполнения.
Сценарии в Loginom наглядны: данные проходят через цепочку Узлов, каждый из которых выполняет свою операцию и передает результат дальше. Это качество делает работу со Сценариями удобной как для разработчиков, так и для специалистов, не имеющих навыков программирования.
За внешней простотой интерфейса стоит множество принципов оптимизации и ускорения, которые обеспечивают высокую скорость обработки данных. В статье рассматриваются некоторые из них, а также связанные с ними особенности построения Сценариев.
Чтобы Сценарии работали экономно, используется принцип ленивых вычислений. Если для решения задачи не нужны какие-то из предложенных расчетов, то они не выполняются. Есть три варианта выполнения Сценария:

Кнопка Выполнить все
При определении необходимых вычислений Loginom проходит по цепочке передачи данных от целевого Узла к источникам данных (условно — справа налево). Далее Узлы выполняются слева направо. Рассмотрим, как это работает, на примере конкретного Сценария.

Пример Сценария
Требуется загрузить два файла, объединить их, отфильтровать данные и выгрузить два файла Excel, один из которых — отчет об исключениях.
На Узел «Выгрузка данных» приходит запрос на выполнение. В этом случае Loginom перед запуском расчетов проходит по цепочке от него назад, выбирает Узлы, которые должны быть выполнены для решения поставленной задачи. И далее выполняется только то, что необходимо для выполнения целевого Узла.
Для выполнения Узла «Выгрузка данных» нужно запустить часть Сценария, кроме «Отчета об исключениях» и Узла перед ним. Соответственно, при запуске «Выгрузки данных» отчет не будет экспортирован, ветвь Сценария перед ним не будет выполнена. Принцип выполнения Сценария показан на следующем видео.
В целом такой подход позволяет существенно экономить ресурсы компьютера, сокращать время выполнения Сценариев и эффективнее использовать вычислительные мощности. При построении большого Сценария возникает множество особенностей порядка выполнения Узлов.
Еще один механизм повышения производительности — параллельные вычисления.
Если в Сценарии есть независимые Узлы обработки данных, Loginom по возможности выполняет их одновременно, используя доступные ядра процессора и другие ресурсы системы.
В большинстве случаев это дает заметный выигрыш по времени и позволяет быстрее получать результат без дополнительных настроек со стороны пользователя.
Идеальных решений не существует. За высокую производительность всегда приходится платить определенными ограничениями. Ленивые вычисления и параллельное выполнение делают работу Сценариев быстрее, но иногда именно они становятся причиной неожиданного для пользователя поведения системы. Типичные проблемы:
Например, для проверки корректности работы в Сценарии закладывают отчеты как раз в форме ответвлений. И так как они никуда внутри Сценария не передают данные, без дополнительных манипуляций эти Узлы не выполняются.
С Подмоделями подобные ситуации встречаются особенно часто. Когда пользователь видит запущенную Подмодель, ему может показаться, что внутри все Узлы выполнены. На практике Loginom не запускает вычисления, если в результате не формируются необходимые для итоговых расчетов данные.
Важно понимать: это не ошибка платформы. Наоборот, именно благодаря такому поведению Loginom работает быстрее и экономнее. Однако в некоторых Сценариях требуется явно указать, какие действия должны выполняться обязательно.
Есть группа задач, где необходимо контролировать порядок выполнения. Например:
Пользователь ожидает, что эти операции будут выполняться последовательно. Платформа же анализирует связи по данным внутри Сценария: если их нет, то может выполнить операции параллельно.
В результате операция чтения может начаться раньше завершения записи, а запрос — раньше получения необходимых данных. Чтобы избежать подобных ситуаций, необходимо явно задать порядок выполнения.
Для управления последовательностью выполнения Узлов в Loginom есть Порт порядка выполнения.
Этот механизм позволяет указать платформе, какие Узлы должны запускаться строго после завершения других Узлов, даже если между ними отсутствует поток данных.
По умолчанию Порт скрыт. Для его отображения необходимо включить соответствующий режим на панели инструментов области построения Сценариев.

Кнопка Настроить порядок выполнения
Например, для того чтобы выполнить ответвление Сценария, нужно связать его через Порт порядка выполнения с Узлом, который обязательно будет запущен.
Настройка порядка выполнения особенно важна, если Сценарий запускается в автоматическом режиме (через Планировщик задач или BatchLauncher).
Ленивые вычисления и параллельное выполнение — важные механизмы повышения производительности Loginom. Благодаря им Сценарии выполняются быстрее и используют меньше ресурсов. Однако в ситуациях, когда важна последовательность выполнения определенных действий, рекомендуется использовать Порт порядка выполнения.
Существуют ситуации, когда в Сценарии есть Подмодель без выходных Портов. В видеопримере ниже внутри такой Подмодели происходит импорт из двух файлов Excel, объединение и экспорт в третий файл Excel. Без дополнительной настройки при ее запуске Узлы, находящиеся внутри, не выполняются: нет цепочки передачи данных наружу.
Для того чтобы при запуске такой Подмодели выполнялись расчеты внутри, нужно соединить Порт порядка выполнения Узла, который необходимо выполнить, с выходным Портом порядка выполнения Подмодели.
Другой распространенный случай — наличие нескольких ветвей внутри Подмодели, только одна из которых связана с выходным Портом. При запуске Подмодели выполняются только те Узлы, которые участвуют в формировании требуемого результата. Ответвление остается невыполненным.
Чтобы оно тоже запускалось, нужно соединить Порты порядка выполнения последнего Узла ответвления и Узла, который связан с выходным Портом Подмодели.
В следующем видеопримере показано, что при попытке параллельной записи в базу данных может возникать ошибка. Чтобы ее избежать, нужно соединить Порты порядка выполнения Узлов, которые выполняют запись в БД. Тогда эти операции будут выполнены последовательно, а не параллельно, и ошибки не возникнут.
При подключении к внешним сервисам часто необходимы временные ограничения. В примере ниже показано, как делается пауза перед подключением по API. Узел «таймаут» соединяется с предыдущим и последующим узлами через Порты порядка выполнения.
Есть специальный демопример «Использование портов порядка выполнения». В нем разбираются типовые проблемы, а именно:
Порт порядка выполнения позволяет сохранить преимущества ленивых вычислений и параллельной обработки, одновременно обеспечивая предсказуемое выполнение критически важных операций. Используйте его в Сценариях, где важна последовательность действий или запуск отдельных ветвей обработки данных.
Другие материалы по теме: