Antipatronen vermijden

Antipatronen zijn praktijken die nuttig lijken, maar die leiden tot prestatieproblemen, inefficiëntie van bronnen en mogelijke storingen in uw workflows. Door deze antipatronen te begrijpen en te vermijden, optimaliseert u uw cloudstromen voor betere prestaties en betrouwbaarheid.

Vermijd geneste For each-lussen

Geneste For Each-lussen kunnen resource-intensieve bewerkingen in cloudstromen zijn en de prestaties en het resourceverbruik beïnvloeden.

  • Uitvoeringstijd: geneste lussen kunnen het totale aantal iteraties snel vermenigvuldigen. Als u bijvoorbeeld twee lussen hebt met elk 10 iteraties, wordt het totale aantal iteraties 10 x 10 = 100. Deze exponentiële toename kan de uitvoeringstijd van uw flow verlengen, vooral als elke iteratie grote datasets verwerkt of complexe bewerkingen uitvoert.
  • Limieten en quota's: Power Automate dwingt limieten en quota's af, zoals het maximale aantal iteraties dat binnen een lus is toegestaan en de totale uitvoeringstijd. Geneste lussen kunnen deze limieten snel bereiken, wat kan leiden tot stroomstoringen of vertragingen, vooral bij het verwerken van grote datasets of frequente uitvoeringen.
  • Prestatie-impact: elke iteratie binnen een geneste lus verbruikt verwerkingskracht en geheugen. Naarmate het aantal iteraties toeneemt, neemt de vraag naar systeembronnen toe, wat de gehele stroom kan vertragen.

Meer informatie: Limieten voor gelijktijdigheidslussen en debatching

Afhankelijk van uw scenario kunt u geneste lussen voorkomen door gerelateerde records uit een bovenliggende tabel te verwerken. Denk aan het volgende:

  • Scenario: een buitenste lus gebruikt de actie Rijen weergeven om een lijst met productcategorieën op te halen uit de tabel ProductCategory waar de kolom IsPromotion de waarde true heeft. Een binnenste lus verwerkt vervolgens gerelateerde records uit de tabel Product voor elke categorie die door de buitenste lus is opgehaald.

  • Alternatieve aanpak: gebruik OData Query Expansion om dit proces te stroomlijnen. Bij deze methode kunt u met een enkele For each-lus werken, waardoor het totale aantal verzoeken aan Dataverse wordt teruggebracht tot slechts één RetrieveMultiple-aanroep.

Om OData-queryuitbreiding te implementeren:

  • Gebruik de parameter Uitbreidingsquery om de naam van de opzoekkolom op te geven die de tabel ProductCategory aan de tabel Product koppelt. Met deze aanpak worden gerelateerde records in één query opgehaald. Stel bijvoorbeeld de parameter Query uitbreiden in op Products($select=ProductName,Price).
  • Gebruik de parameter $select om de kolommen te beperken die uit de gerelateerde tabel worden geretourneerd.
  • Haal relevante records op en verwerk ze door voorwaarden rechtstreeks op de kolommen van de opzoektabel toe te passen met behulp van de parameter Rijen filteren. Stel bijvoorbeeld de parameter Rijen filteren in op IsPromotion eq true.

Schermafbeelding van het gebruik van de parameter Query uitbreiden en rijen filteren om OData-queryuitbreiding te implementeren.

Oneindige lussen vermijden

Met Power Automate kunnen stromen oneindig lang worden geactiveerd, bijvoorbeeld wanneer de stroom dezelfde tabel bijwerkt die deze activeert.

Wanneer u een stroom opslaat die kan resulteren in een oneindige triggerlus, wordt u door Power Automate gewaarschuwd.

Schermafbeelding van de waarschuwing die een maker krijgt bij het proberen op te slaan van een stroom die kan resulteren in een oneindige lus.

Oneindige lussen vermijden:

  • Triggervoorwaarden gebruiken: triggervoorwaarden zorgen ervoor dat de stroom alleen wordt uitgevoerd als aan specifieke criteria wordt voldaan, waardoor onnodige uitvoeringen worden voorkomen. Implementeer triggervoorwaarden door een voorwaarde aan de trigger toe te voegen om te controleren op bepaalde waarden of toestanden voordat de stroom verdergaat. Als uw stroom bijvoorbeeld een statusveld bijwerkt, kunt u een triggervoorwaarde instellen om de stroom alleen uit te voeren als de status nog niet op de gewenste waarde is ingesteld.
  • De stroom beëindigen: een alternatieve aanpak is om de stroom te stoppen als er een toestand wordt gedetecteerd die een oneindige lus zou veroorzaken. Beëindig de stroom wanneer aan een specifieke voorwaarde is voldaan met de actie Beëindigen. Deze aanpak kan worden gebruikt als beveiliging om verdere acties te voorkomen als de stroom op het punt staat in een oneindige lus terecht te komen. Als de stroom bijvoorbeeld detecteert dat een record al is verwerkt, kan deze zichzelf beëindigen om herverwerking te voorkomen.

Vermijd grote aantallen datatransformatiebewerkingen

Wanneer u met grootschalige datatransformaties werkt, kunt u overwegen om een ETL-proces (Extract, Transform, Load) te gebruiken. In plaats van bijvoorbeeld een Power Automate-cloudstroom te gebruiken om gegevens uit een groot Excel-spreadsheet te lezen, voert u gegevensopmaak of -validaties uit en schrijft u de gegevens vervolgens naar Dataverse. Het is wellicht geschikter om Power Platform-gegevensstromen of een andere ETL-tool te gebruiken.

Gegevensstromen verwerken grote hoeveelheden gegevens efficiënt en leveren betere prestaties voor ETL-taken dan cloudstromen. ETL-tools bieden gespecialiseerde functies voor gegevenstransformatie, -validatie en -laden, waardoor complexe gegevensverwerkingstaken kunnen worden vereenvoudigd.

Om de gegevensbelasting te beheren met orkestratielogica in cloudstromen, combineert u cloudstromen met gegevensstromen. U doet dit als volgt:

  1. Gegevensstroom vernieuwen aanroepen

    • Actie: gebruik de gegevensstroomconnector in Power Automate om een vernieuwingsactie te activeren en het ETL-proces te starten dat in uw gegevensstroom is gedefinieerd.
    • Voorbeeld: stel een cloudstroom in die de vernieuwing van de gegevensstroom activeert op basis van een schema (bijvoorbeeld dagelijks) of een gebeurtenis (bijvoorbeeld wanneer een nieuw bestand wordt geüpload naar een SharePoint-map).
  2. Acties na ETL

    • Trigger: gebruik de trigger Wanneer de vernieuwing van een gegevensstroom is voltooid in Power Automate om acties uit te voeren nadat het ETL-proces is voltooid.
    • Voorbeeld: nadat de gegevensstroom is voltooid, gebruikt u een cloudstroom om meldingen te verzenden, records bij te werken of gegevensverwerking uit te voeren.

Schermafbeelding van het gebruik van gegevensstroomacties in een cloudstroom.

Gebruik van For each-lus vermijden om grote aantallen records bij te werken

Gebruikers moeten vaak duizenden records in een gegevensbron maken of bijwerken wanneer een stroom wordt geactiveerd in Power Automate. Veel gebruikers gebruiken een For each-lus om elke record sequentieel te verwerken, wat latentie en vertragingen veroorzaakt.

Om de prestaties te verbeteren, kunt u de volgende twee benaderingen proberen:

  1. Batchbewerkingen

    • Beschrijving: records in batches maken of bijwerken. Veel connectoren en services bieden API-eindpunten die batchverzoeken ondersteunen. Met deze aanpak kunt u meerdere bewerkingen groeperen in één HTTP-verzoek.
    • Implementatie: gebruik de batchbewerkingsfunctie om meerdere aanmaak- of updateaanvragen tegelijk te verzenden. Deze bewerkingen worden sequentieel uitgevoerd in de volgorde die is opgegeven in de batchaanvraag. De volgorde van de reacties komt overeen met de volgorde van de aanvragen in de batchbewerking.
    • Voordelen: vermindert het aantal afzonderlijke aanvragen dat naar de gegevensbron wordt verzonden, waardoor de latentie wordt geminimaliseerd en de prestaties worden verbeterd.

    Schermopname van het gebruik van de SharePoint-API om een batchaanvraag uit te voeren.

  2. Parallelisme in For each-lus

    • Beschrijving: schakel parallelle verwerking in de For Each-lus in om meerdere records tegelijkertijd te verwerken.
    • Implementatie: configureer de For Each-lus om maximaal 50 records parallel te verwerken. Deze aanpak is handig voor services die geen batchbewerkingen ondersteunen.
    • Voordelen: de totale verwerkingstijd wordt aanzienlijk verkort doordat meerdere records tegelijkertijd worden verwerkt.

Raadpleeg de volgende REST API-documentatie voor informatie over het maken van batchverzoeken:

Bulkbewerkingen gebruiken in Dataverse

Wanneer u met Dataverse werkt, kunt u de Web-API's voor bulkbewerkingen gebruiken om het aantal vereiste acties te verminderen, uw processen te stroomlijnen en de prestaties te verbeteren.

Web-API's voor bulkbewerkingen bieden een duidelijk voordeel ten opzichte van batchbewerkingen. Dit is het verschil:

  • Batchbewerkingen: hoewel batchbewerkingen in een enkele aanvraag worden geplaatst, worden ze uitgevoerd als meerdere afzonderlijke bewerkingen. Elke bewerking binnen de batch wordt afzonderlijk verwerkt.
  • Bulkbewerkingen: bulkbewerkingen worden daarentegen geboekt en als een enkele bewerking uitgevoerd. De gehele bulkaanvraag wordt als één bewerking geteld, waardoor het aantal acties aanzienlijk kan worden verminderd en de efficiëntie kan worden verbeterd.

Om bulkbewerkingen aan te roepen:

  • HTTP gebruiken met Microsoft Entra ID: u kunt de web-API voor bulkbewerkingen aanroepen met HTTP-aanvragen die zijn geverifieerd met Microsoft Entra ID.
  • De HTTP-connector gebruiken met service-principals: u kunt ook de HTTP-connector gebruiken in Power Automate wanneer u met service-principals werkt om deze API's aan te roepen.

In dit voorbeeld bereiden we de records voor in JSON-indeling met behulp van de actie Select:

Schermafbeelding van het gebruik van een Select-actie om de inhoud voor te bereiden op de bulkaanvraag.

Vervolgens gebruiken we HTTP met Microsoft Entra ID om de aanvraag te plaatsen met behulp van de CreateMultiple Web API:

Schermopname van het aanroepen van een HTTP-aanvraag om een bulkbewerking uit te voeren.

Als u 100 records in de JSON-uitvoer hebt, vereist deze aanpak slechts één enkele actie in plaats van 100 acties Rij maken in Dataverse.