Как проверить, эффективно ли выполняется условие в foreach, используя приложение логики? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть две переменные-массива для каждой, я сравниваю значения по одному и далее, но проблема заключается в том, что для выполнения требуется 1000 записей.

Переменная_1, имеющая около 10 записей Переменная_2который выводится, если HTTP будет иметь около 1000+ записей

Variable_1 = 
[
    {

      "Name": "AAA",
      "OwnerId": "121a",

    },
    {

      "Name": "BBB",
      "OwnerId": "123b",

    },
    ...
]

и

Variable_2 = 
[
    {     
      "Demo_Name": "AAA"     
    },
    {  
      "Demo_Name": "BBB"
    },
    {  
      "Demo_Name": "BBB"
    },
    {  
      "Demo_Name": "BBB"
    },
    {  
      "Demo_Name": "BBB"
    }
    .... 
]

Я использовал 2 for each one is for Variable_1 and another is for Variable_2``.

и сравнение Variable_1.Name == Variable_2.Demo_Name one by one.

так, когда Variable_2 имеет более чем 1000+ records, требуется около часа, чтобы проверить условие одно за другим

какое-нибудь решение для этого, чтобы сделать это быстрым способом?внешний цикл занимает около 2 ч enter image description here

Если я попытаюсь concurrent execution, тогда increment variable установить неправильные значения

1 Ответ

1 голос
/ 11 июля 2019

Я попытался сделать это с помощью таблиц хранилища Azure в качестве источника результата, просто чтобы посмотреть, как быстро я могу выполнить итерацию по Var2 с 1465 записями и Var1 с 9 записями.Я делаю это дважды здесь, чтобы просто выяснить, каким способом было проще всего это сделать. В результате мы получили XXXX совпадения, значения, хранящиеся в таблице хранения Azure, которые я получу после завершения циклов.Я добавил действие завершения, которое вы могли бы переместить перед действием For each, чтобы увидеть, как использовать один из них для каждого цикла вместо обоих.

Для записи, не уверен, что это именно то, что вы хотите.Также с этим способом, если вы переключаете For For array для цикла Var1 вместо Var2 Это было сделано менее чем за 10 секунд со всеми объектами.Если вы сделаете это в разные массивы, вы можете отфильтровать два массива, вы также можете использовать пересечение.Все, что вам нужно сделать, - это извлечь записи из таблицы хранилища Azure, которая находится в формате JSON, теперь с идентификаторами GUID в качестве идентификаторов.

4 минуты 4 Minutes

Это поток для первого из двух циклов, тот, который мне нравится больше всего, чувствует себя чище.enter image description here

Результат хранения таблицы, который вам нужно будет обрезать или что-то, когда вы закончите или что-то: Azure Storage Table

Вам нужнотаблица хранения Azure, в которую нужно передать результаты.При публикации я уменьшил размер Var2, так как не имел смысла размещать 1600 объектов.Код:

{ "$connections": { "value": { "azuretables": { "connectionId": "/subscriptions/*YOUR SUBSCRIPTION ID*/resourceGroups/*RESOURCEGROUP NAME*/providers/Microsoft.Web/connections/azuretables", "connectionName": "azuretables", "id": "/subscriptions/*YOUR SUBSCRIPTION ID*/providers/Microsoft.Web/locations/westeurope/managedApis/azuretables" } } }, "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "actions": { "For_each": { "actions": { "For_each_2": { "actions": { "Condition": { "actions": { "Insert_Entity": { "inputs": { "body": { "PartitionKey": "@{items('For_each_2')['Name']}", "RowKey": "@{guid()}" }, "host": { "connection": { "name": "@parameters('$connections')['azuretables']['connectionId']" } }, "method": "post", "path": "/Tables/@{encodeURIComponent('stackoverflowforeachtmp')}/entities" }, "runAfter": {}, "type": "ApiConnection" } }, "expression": { "and": [ { "equals": [ "@items('For_each_2')['Name']", "@items('For_each')['Demo_Name']" ] } ] }, "runAfter": {}, "type": "If" } }, "foreach": "@variables('TestValueVariable1')", "runAfter": { "Set_TestVariable2": [ "Succeeded" ] }, "runtimeConfiguration": { "concurrency": { "repetitions": 50 } }, "type": "Foreach" }, "Set_TestVariable1": { "inputs": { "name": "TestValueVariable2", "value": "@{items('For_each')['Demo_Name']}" }, "runAfter": {}, "type": "SetVariable" }, "Set_TestVariable2": { "inputs": { "name": "TestValueVariable1", "value": "@variables('Variable 1')" }, "runAfter": { "Set_TestVariable1": [ "Succeeded" ] }, "type": "SetVariable" } }, "foreach": "@array(variables('Variable 2'))", "runAfter": { "For_each_3": [ "Succeeded" ] }, "runtimeConfiguration": { "concurrency": { "repetitions": 50 } }, "type": "Foreach" }, "For_each_3": { "actions": { "Filter_array": { "inputs": { "from": "@array(variables('Variable 1'))", "where": "@equals(items('For_each_3')['Demo_Name'], item()['Name'])" }, "runAfter": {}, "type": "Query" }, "For_each_4": { "actions": { "Insert_Entity_2": { "inputs": { "body": { "EvaluationKey": "@{items('For_each_3')['Demo_Name']}-@{items('For_each_4')['Name']}", "Owner": "@{items('For_each_4')['OwnerId']}", "PartitionKey": "@{items('For_each_4')['Name']}", "RowKey": "@{guid()}" }, "host": { "connection": { "name": "@parameters('$connections')['azuretables']['connectionId']" } }, "method": "post", "path": "/Tables/@{encodeURIComponent('stackoverflowforeachtmp')}/entities" }, "runAfter": {}, "type": "ApiConnection" } }, "foreach": "@body('Filter_array')", "runAfter": { "Filter_array": [ "Succeeded" ] }, "type": "Foreach" } }, "foreach": "@array(variables('Variable 2'))", "runAfter": { "TestValueVariable2": [ "Succeeded" ] }, "type": "Foreach" }, "Get_entities": { "inputs": { "host": { "connection": { "name": "@parameters('$connections')['azuretables']['connectionId']" } }, "method": "get", "path": "/Tables/@{encodeURIComponent('stackoverflowforeachtmp')}/entities" }, "runAfter": { "For_each": [ "Succeeded" ] }, "runtimeConfiguration": { "paginationPolicy": { "minimumItemCount": 30000 } }, "type": "ApiConnection" }, "Initialize_variable": { "inputs": { "variables": [ { "name": "Variable 1", "type": "Array", "value": [ { "Name": "AAA", "OwnerId": "121a" }, { "Name": "BBB", "OwnerId": "123b" }, { "Name": "AAA", "OwnerId": "123b" }, { "Name": "BBB", "OwnerId": "123b" }, { "Name": "FFF", "OwnerId": "123b" }, { "Name": "BBB", "OwnerId": "123b" }, { "Name": "DDD", "OwnerId": "123b" }, { "Name": "CCC", "OwnerId": "123b" }, { "Name": "BBB", "OwnerId": "123b" } ] } ] }, "runAfter": {}, "type": "InitializeVariable" }, "Initialize_variable_2": { "inputs": { "variables": [ { "name": "Variable 2", "type": "Array", "value": [ { "Demo_Name": "AAA" }, { "Demo_Name": "BBB" }, { "Demo_Name": "CCC" }, { "Demo_Name": "BBB" }, { "Demo_Name": "BBB" }, { "Demo_Name": "BBB" }, { "Demo_Name": "BBB" }, { "Demo_Name": "FFF" }, { "Demo_Name": "BBB" }, { "Demo_Name": "BBB" }, { "Demo_Name": "FFF" }, { "Demo_Name": "AAA" } ] } ] }, "runAfter": { "Initialize_variable": [ "Succeeded" ] }, "type": "InitializeVariable" }, "Set_variable": { "inputs": { "name": "TestValueVariable2", "value": "@{length(body('Get_entities')?['value'])}" }, "runAfter": { "Terminate": [ "Succeeded" ] }, "type": "SetVariable" }, "Terminate": { "inputs": { "runStatus": "Succeeded" }, "runAfter": { "Get_entities": [ "Succeeded" ] }, "type": "Terminate" }, "TestValueVariable1": { "inputs": { "variables": [ { "name": "TestValueVariable1", "type": "Array" } ] }, "runAfter": { "Initialize_variable_2": [ "Succeeded" ] }, "type": "InitializeVariable" }, "TestValueVariable2": { "inputs": { "variables": [ { "name": "TestValueVariable2", "type": "String" } ] }, "runAfter": { "TestValueVariable1": [ "Succeeded" ] }, "type": "InitializeVariable" } }, "contentVersion": "1.0.0.0", "outputs": {}, "parameters": { "$connections": { "defaultValue": {}, "type": "Object" } }, "triggers": { "Recurrence": { "recurrence": { "frequency": "Month", "interval": 3 }, "type": "Recurrence" } } } }

...