Graph databases

2020-02-26

Graph databases, weer een extra variant bovenop de wellicht bekende technologieën als; relationele, timeseries, key/value en document databases. Maar wanneer kies je nou voor deze database technologie boven de andere genoemde varianten. Om die keuze te kunnen maken, moet je eerst begrijpen wat een graph database is.

Simpel gezegd is een Graph, een verzameling nodes en relaties. Je kunt nodes zien als ‘dingen’. De connecties tussen de nodes worden uitgedrukt in de vorm van relaties. Om nodes later makkelijk terug te vinden of te groeperen kun je ze een label geven. Voorbeelden van labels zijn acteur en film. Met behulp van relaties kun je de samenhang tussen deze nodes vast leggen. Een acteur heeft geacteerd in een film. Zo’n relatie heeft altijd een richting en is van een bepaald type. Ook is het mogelijk dat nodes een relatie naar zichzelf hebben. Zo kan een acteur als zichzelf geacteerd hebben in een film.

De bekendste Graph database is Neo4J. De taal die Neo4J spreekt is Cypher. Hieronder een voorbeeld Cypher query om een acteur `Mike` te creëren die in een film de `Matrix` speelt en waarbij hij als zichzelf acteert.

Dit resulteert in de volgende Graph.

Binnen de energie sector zijn er oneindig veel use cases te bedenken waar Graph databases kunnen worden ingezet. Een voorbeeld zou een netbeheerder kunnen zijn. Hier kan deze technologie worden gebruikt om te tracen over het elektriciteits- en gasnetwerk. Stel je voor, een klant wil zijn aansluiting thuis laten verzwaren. Een vraag die bij de netbeheerder dan speelt; `Kan het huidige aansluitnet de nieuwe gewenste capaciteit aan?`. Allereerst dient de netbeheerder te weten te komen uit welke kabels en moffen het aansluitnet van deze klant bestaat. Hiervoor moet een trace uitgevoerd worden.

Wanneer de business een probleem heeft waarbij je te maken hebt met veel afhankelijkheden -in database termen uitgedrukt in JOIN’s tussen verschillende entiteiten- en wanneer het belangrijk is om deze afhankelijkheden in bijna realtime op te lossen, dan is je probleem het eenvoudigste op te lossen met behulp van Graph Technology. We kunnen dit dan gerust een GRAPH PROBLEM noemen. Echter wanneer de data losstaand is en waarbij relaties niet relevant zijn of wanneer de data alleen wordt opgeslagen en nooit wordt ingelezen is een Graph databases niet de juiste tool. Ook wanneer het model en de objecten in je database consistent zijn en de data structuur vast of tafelvormig is kun je beter voor bijvoorbeeld een relationele data base kiezen. Tot slot is een Graph database niet het beste middel wanneer je grote bulken aan data per entiteit wilt opslaan. Je zou er dan voor kunnen kiezen om een combinatie van database technologien te gebruiken bijvoorbeeld Neo4J in combinatie met een relationele database.


Bekijk alle posts van Mike