Logic Apps - цикл foreach очень медленный

Я заметил, что цикл (с использованием foreach) в Azure Logic Apps очень медленный. В качестве примера я зациклил результат http, содержащий 8.000 узлов JSON (всего 1,6 МБ данных), и для его обработки потребовалось около 6 минут, что является чрезвычайно долгим временем по сравнению с выполнением этого в приложении .Net. Вот как проводился тест: Тестовое приложение логики, в этом тесте данные JSON поступают из большого двоичного объекта.

Для меня обычная задача - просмотреть набор результатов в цикле, должно ли это быть так медленно? Кто-нибудь из вас знает лучший способ синтаксического анализа и зацикливания данных в Logic Apps?


person TobiasJ    schedule 16.03.2018    source источник
comment
Возможно, лучше всего использовать для этого приложение-функцию? Выполнение того же анализа в приложении-функции заняло около 1 секунды.   -  person TobiasJ    schedule 16.03.2018


Ответы (1)


Причина, по которой он медленный, заключается в том, что параллелизм для циклов по умолчанию равен 20, а максимальное - 50. Лучший способ обойти это - использовать немного другой шаблон, когда вы выполняете дебатирование с другим приложением логики. Например, у вас будет одно приложение логики, которое генерирует массив, который вы хотите перебрать, а затем создадите другое приложение логики, которое принимает HTTP-запрос в качестве триггера. Во втором приложении логики в настройках включите функцию spliton. Теперь поместите свою «работу» во второе приложение логики, затем вернитесь к первому и сделайте последний шаг, чтобы отправить массив во второе приложение логики. При использовании этого шаблона первое приложение логики инициализирует запуск для каждого элемента в массиве, все они будут выполняться одновременно, а не ограничиваться параллелизмом для каждого цикла. Вот еще несколько подробностей об этой функции в документации. https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-workflow-actions-triggers#split-on-debatch

person Phil    schedule 16.03.2018
comment
Хороший ответ, интересный подход :-) - person Thomas; 17.03.2018
comment
Спасибо, Фил. Очень полезный. То, что я на самом деле использую сейчас в операциях с данными - действие «Выбрать», потому что я хочу преобразовать узлы JSON в другой формат, и это действие оказалось очень быстрым (хотя предполагается, что для каждого из них неявно выполняется действие). - person TobiasJ; 20.03.2018
comment
@Phil, у меня аналогичная проблема. Мое приложение логики обрабатывает данные json как заголовок и элементы. Элементы занимает много времени в шаге цикла For Each. Разделится на помощь. ? Должен ли я иметь два приложения логики, одно основное, а другое просто для прокрутки ?. - person Winona; 17.02.2021