Een nieuwe wereld van mogelijkheden dankzij time series databases

Door Tim Janssen, developer
18 mei 2016 - 2646 x bekeken -

We hebben binnen E-sites praktisch onderzoek gedaan naar InfluxDB en Grafana. Dit zijn twee software pakketten die met ongekende precisie - tot de microseconde - inzicht kunnen geven in time series databases. Wat zijn time series databases, en hoe verhouden ze zich tot relationele databases? Als use case gebruikten we gesimuleerde persoonlijke data en biometrie van 1500 wandelende personen en gesimuleerde weersomstandigheden.

Een gesimuleerd loop-event als use case

Een loopevenement leek ons een mooie case omdat er stiekem veel complexe data en mooie inzichten zitten in grote aantallen mensen die tegelijkertijd lopen. Zo konden we aan de hand van een hoeveelheid metrie en persoonlijke gegevens met behulp van Grafana laten zien wat de overeenkomsten en verschillen zijn tussen lopers. Denk hierbij aan verschillen in hartslag en loopsnelheid tussen leeftijdsgroepen of de over de overeenkomsten tussen man en vrouw. Loopt iemand uit het zuiden van Nederland sneller of langzamer dan iemand uit Flevoland? En welke invloed heeft regen op de gemiddelde loper?

Om deze data zo accuraat mogelijk te simuleren en tegen elkaar af te wegen hebben we onderzoek gedaan naar welke data er allemaal van belang zijn voor een loper. Zo hebben we een evenement gesimuleerd aan de hand van weersomstandigheden (regen, temperatuur, gevoelstemperatuur, neerslag en wind), loopafstand en hellingpercentage. Deze gegevens hebben we gecombineerd tot een moeilijkheidsgraad die de loopsnelheid, hartslag en het sentiment van onze lopers aanpast. Deze metingen bepalen vervolgens weer hoe veel calorieën ze per minuut verbruiken en wat hun vochtpercentage is gedurende de loop. Hoe snel mensen lopen en wat hun hartslag is, is op zijn beurt ook weer afhankelijk van de lengte, leeftijd en het geslacht en gewicht van de lopers. Naast deze voorgaande gegevens hebben we ook de lichaamstemperatuur van onze lopers af laten hangen van hun inspanning. Ook beïnvloedt hun calorieverbranding weer andere metingen.

Pasted image at 2016_04_05 11_19.png

Al deze data wordt constant dynamisch gegenereerd door middel van PHP, en deze data wordt op zijn beurt weer via een REST API opgeslagen in InfluxDB. Het nut van deze API is dat we ons programma makkelijk kunnen uitbreiden met daadwerkelijke mobiele gebruikers. De databank van InfluxDB wordt vervolgens elke x aantal seconden gequeryd door Grafana.

 

InfluxDB? Grafana?

TICK-Stack.png

 

 

InfluxDB is een database die perfect is voor het opslaan van time series data. Dit doet de database aan de hand van points. Elke point representeert de staat van onze lopers in een punt van tijd. Een point is een datastructuur bestaande uit de combinatie van de naam van een measurement, timestamp (in nanosecondes), fieldset (fields) en een tagset (tags).

Een measurement is de naam waaronder je tags, fields en timestamp worden opgeslagen, en conceptueel gelijkwaardig met een MySQL tabel. Een timestamp komt overeen met een unique key in MySQL. Deze timestamp geeft in InfluxDB de datum en tijd weer volgens RFC3339 UTC en wordt geassocieerd met de data van de point.

Fields zijn een vereist stukje binnen de InfluxDB datastructuur, sinds je geen data binnen InfluxDB kunt hebben zonder fields. Fields bestaan uit een field key en een field value, en deze zou je kunnen vergelijken met respectievelijk MySQL’s kolomnaam en cell waarde. Een field is naast een vereiste ook non-indexed, wat betekent dat InfluxDB voor elke query alle waarden zal scannen voor hij een response geeft. Wat de responstijd van je query flink kan benadelen. Om dit tegen te gaan en je query’s te optimaliseren is het nuttig om je schema zo te arrangeren dat je onderscheid maakt tussen fields en tags. Tags zijn namelijk indexed, en zijn niet vereist om gescand te worden voordat een response wordt verzonden. Dit maakt ze optimaal om gebruikt te worden met metadata die vaak gequeryd moet worden.

En gequeryd wordt er, door Grafana. Grafana is een dashboard dat het makkelijk maakt om inzicht te genereren uit data. Dit doet Grafana op een erg flexibele manier. Zo heb je de keuze uit een enorm breed scala aan data sources, waaronder Graphite, Elasticsearch en InfluxDB. Grafana maakt slim gebruik van InfluxDB zijn timestamps en plot de grafieken dan ook aan de hand hier van.

 

nice_dashboard.png

 

De main interface van Grafana is onderverdeeld in rijen, en de rijen zijn onderverdeeld in panelen. Elk paneel heeft één diagram, en zijn dimensies en kleuren kunnen worden aangepast door de gebruiker.

Dankzij de plug-ins voor Grafana wordt inzicht krijgen uit de data een simpel klusje. De diagrammen die beschikbaar zijn voor Grafana zijn volledig interactief en bewerkbaar, ondersteunen meerdere Y-assen en logaritmische schalen. Een van de andere grote pluspunten van Grafana is de mogelijkheid om on-the-fly te wisselen tussen dataweergaven en query's. Wil je een lijndiagram om wisselen voor een gestapelde staafdiagram? Daar is maar een enkele druk op de knop voor nodig. Wil je naast je live data uit InfluxDB ook gebruik maken van een andere database zoals Elasticsearch? Voeg Elasticsearch toe aan je Data Sources, en vervolgens aan je diagram zijn query's. Et voilà.

Dit smaakt naar meer

Onze ervaring met InfluxDB en Grafana was erg plezierig dankzij de snelheid waarmee we inzicht konden creëren in grote stukken data. Dit kwam voor het grootste deel door de techniek waarmee Grafana van complexe dingen iets simpels en geordend wist te maken. In de nabije toekomst gaan we ons nog verder buigen over de mogelijkheden van InfluxDB en Grafana. Houd ons in de gaten!



E-sites en Triple Double sportmarketing lanceren nieuw digitaal bureau TDE

Door E-sites

Na jaren succesvol samenwerken bundelen wij onze krachten met die van sportmarketing bureau Triple Double in een nieuw digitaal bureau in de sport:… - Lees meer

Lees verder