Sneller data verwerken uit Invantive Cloud op geselecteerde OData-clients

Invantive Cloud biedt voor tientallen populaire cloudplatformen de gegevens aan in het populaire OData-feed formaat. Hiermee kunnen programma’s zoals Power BI gemakkelijk en snel duizenden tabellen en duizenden bedrijven uitlezen met een near real-time karakter.

Invantive Cloud treedt hierbij op als zogenaamde “OData producer” terwijl bijvoorbeeld Power BI of https://access-odata.com optreedt als “OData client”.

In dit topic lees je hoe de gegevensverwerking versneld wordt en hoe de volgende nieuwe features de snelheid verder verhogen:

  • HTTP 304 ondersteuning voor herhaalde downloads brengen hoeveelheid data over het Internet tot vrijwel 0 terug
  • Informatie voor lokale cache control zorgt voor meer mogelijkheden om zelfs helemaal geen data uit te wisselen
  • Parallelle verwerking metadata zorgt voor meer parallellisme in het downloaden.

Herhalende Downloads bij Ontwikkelen Rapportages

Bij het ontwikkelen van rapportages worden vaak in een korte tijd telkens opnieuw dezelfde gegevens opgehaald. Vooral met Power BI is dat goed te merken; de kleinste wijziging kan al leiden tot het (meestal onnodig) opnieuw ophalen van de data.

Het is daarom verstandig om bij het bouwen van Power BI rapporten te werken met een kleine dataset, bijvoorbeeld maar 1 bedrijf of gegevens uit een bepaalde periode. Dat maakt het werken vlotter.

Herhalende Downloads bij niet-gedeelde Datasets

Het herhaaldelijk ophalen van dezelfde data in een korte tijd treedt ook vaak op als rapportages automatisch ververst worden, maar niet alle gegevens gedeeld worden.

Snelheidswinst met Response Cache

Invantive Cloud bood al via Invantive Bridge Online de mogelijkheid om vragen die herhaaldelijk binnenkomen binnen een kort instelbaar tijdsbestek (bijvoorbeeld enkele uren) telkens te beantwoorden met hetzelfde antwoord. Zie ook Differentiate OData4 for Power BI Cache Behavior.

Dit verhoogt de prestaties merkbaar, vooral bij het bouwen van rapporten, en verlaagt de belasting van het (cloud)platformen dat de data levert. Een OData query zonder cache duurt bijvoorbeeld 4 seconden voor AccountsIncremental op Exact Online met ruim 4.000 relaties, terwijl dezelfde OData query circa 6 milliseconden duurt vanuit de response cache.

Merk wel op dat ook antwoorden van honderden megabytes binnen een seconde uit de response cache beantwoorden worden, maar dat in de praktijk het binnenlezen lang duurt omdat vaak de lokale Internetverbinding geen gigabit-links zijn en ook Power BI tijd nodig heeft om de gegevens uit te pakken en te verwerken.

In de praktijk worden circa 75% van de vragen uit dit OData Response Cache beantwoordt. In het geval van het intensief bouwen van rapportages is dit vaak nog hoger, tot wel 99%.

Nieuwe Prestatieverbeteringen

Met de groei van het platform neemt het verwerkte datavolume hand-over-hand toe en waren verbeteringen wenselijk.

Het HTTP protocol biedt veel mogelijkheden om de netwerkbelasting te verlagen. Een tweetal verbeteringen maken hiervan gebruik.

Meer Parallellisme

De eerste verbetering betreft het verder verhogen van het parallellisme. Afhankelijk van de abonnementsvorm zijn 1 tot 16 parallelle downloads mogelijk. Bij uitgebreide rapporten zullen soms tientallen datasets ververst moeten worden. Elke dataset bestaat normaliter uit drie downloads:

  • Ophalen /odata4.
  • Ophalen /odata4/$metadata.
  • Ophalen data voor alle partities in 1x.

Alle drie de downloads moeten door hetzelfde poort met een beperkte capaciteit. De eerste twee zullen vrijwel altijd in een paar milliseconden uit response cache beantwoord kunnen worden. Maar als er tientallen datasets gedownload worden, dan is uiteindelijk elk beschikbaar slot bezet met het relatief langzame ophalen van data.

Met ingang van 4 november 2021 worden de eerste twee verzoeken (/odata4 en /odata4/$metadata) apart beantwoord zonder verdere vertraging. Hierdoor krijgt de OData Consumer de metadata eerder binnen en kan elke verwerkingsstroom op de consumer alvast verder met het voorbereiden van het ophalen van de data.

Vooral bij grote aantallen datasets kunnen de OData Producer en de OData Consumer de taken onderling beter verdelen en zo tot een kortere verwerkingstijd komen. De besparing is niet enorm, maar meetbaar in de orde van grootte van enkele seconden voor een complexe verversing.

Beperken Netwerkverkeer

Sommige OData Consumers stellen vaak dezelfde vraag aan Invantive Bridge Online. Ze kunnen hierbij aangeven dat ze reeds een recent antwoord kennen op dezelfde vraag. Dit recente antwoord kreeg vanuit de Producer een uniek kenmerk in de ETag HTTP header.

De OData Producer kan aan de Consumer melden dat er geen gewijzigde data is via een HTTP 304 antwoord als de OData Consumer dit kenmerk ook meestuurt via de If-Modified-Since HTTP header.

Op dit moment geven alleen browsers een dergelijke ETag mee.

In de Invantive Bridge Online Monitoring wordt het gebruik zichtbaar; in dit geval door een OData4 URL op te halen via een browser. In de onderste regel zijn de gegevens (in dit geval uit ActiveCampaign) vers opgehaald. Dat duurde bijna 3 seconden. In de middelste regel heeft de browser nogmaals de vraag gesteld en kreeg als antwoord een HTTP 304. Dit duurt 3 ms en leidde tot een lege payload. De bovenste regel komt ook uit cache, maar de payload werd volledig opnieuw gestuurd. Door systeembelasting duurde deze request helaas ook relatief lang en is niet helemaal representatief voor het reguliere gedrag.

Biedt de 304 HTTP status met ETag en If-Modified-Since op dit moment ook voordelen met Microsoft Power BI Desktop?

Nee, op dit moment maakt Microsoft Power BI Desktop hier geen gebruik van.

We hopen dat Microsoft op enig moment aan Power BI Desktop deze functionaliteit ook kan toevoegen. Dit zou de verwerkingssnelheid en downloadtijd bij het ontwikkelen van complexe rapporten enorm kunnen verbeteren in de orde van grootte van factor 10.

Overbodig Maken Netwerkverkeer

Naast de toevoeging van de ETag HTTP header en ondersteuning voor de HTTP 304 status, biedt Invantive Bridge Online nu ook meer informatie over de duur waarop de OData Consumer het antwoord lokaal opnieuw mag gebruiken zonder überhaupt aan de OData Producer te vragen of de data veranderd is. Een rondgang via het Internet kan dan dus volledig vervallen.

Met de HTTP header “Cache-Control” krijgt de Consumer door dat de data lokaal hergebruikt mag worden gedurende het resterende tijdsinterval dat ook Invantive Bridge Online hanteert.

Een dergelijke header ziet er als volgt uit:

Cache-Control HTTP header voor OData4

In deze Cache-Control is te zien dat het gaat om een “private” cache. Hiermee vertelt de Producer dat de gegevens niet in een tussenliggende laag tijdelijk bewaard en opnieuw geserveerd mogen worden. Dat is wenselijk uit het oogpunt van beveiliging.

Daarnaast is een “max-age” te zien van 53930. Dit is de resterende tijd in seconden totdat Invantive Bridge Online zelf ook de gegevens zou gaan verversen. Deze tijd wordt berekend door de OData Response Cache levensduur te nemen zoals ingesteld op de databasedefinitie in Invantive Cloud en daar de verstreken tijd sinds de dataset voor het laatst bij de bron is opgehaald vanaf te halen.

Op dit moment gebruiken alleen browsers een de Cache-Control.

Biedt Cache-Control op dit moment ook voordelen met Microsoft Power BI Desktop?

Nee, op dit moment maakt Microsoft Power BI Desktop hier geen gebruik van.

We hopen dat Microsoft op enig moment aan Power BI Desktop deze functionaliteit ook kan toevoegen. Dit zou de verwerkingssnelheid en downloadtijd bij het ontwikkelen van complexe rapporten enorm kunnen verbeteren in de orde van grootte van factor 10.

Hulp Gevraagd bij Snelheidswinst op Power BI Desktop

We vragen graag je hulp om deze performanceverbeteringen ook in Power BI Desktop terug te zien.

Als je hieraan wilt meehelpen: