Een graph is een datamodel dat is opgebouwd uit twee dingen: nodes (de items) en edges (de verbindingen daartussen). In plaats van alles in rijen en kolommen te persen, behandelt een graph de relaties als volwaardige data, dus ‘deze klant kocht dat product’ of ‘deze persoon stuurt dat team aan’ wordt direct als een verbinding opgeslagen.

De alledaagse versie is een kaart van een sociaal netwerk. Elke persoon is een stip, elke vriendschap is een lijn, en je traceert moeiteloos van de ene persoon naar zijn vrienden, en dan naar vrienden van vrienden. Precies dat traceren gaat snel in een graph. Een relationele database kan dezelfde vragen beantwoorden, maar moet tabellen aan elkaar naaien met joins, en dat wordt traag als de keten van verbindingen lang is. Veel graphs vallen om die reden in de NoSQL-familie.

Waar graphs hun geld waard zijn, zijn vragen over paden en patronen: de kortste route tussen twee punten, een ring van accounts die zich als fraude gedraagt, of een aanbeveling op basis van wat vergelijkbare mensen leuk vonden. Dat is onhandig in rijen en tabellen, maar natuurlijk in nodes en edges.

Je gebruikt elke dag al graphs zonder ze zo te noemen. Het label ‘2e graads’ op LinkedIn is een graph die de stappen telt tussen jou en een onbekende. Google Maps dat de snelste rit zoekt is een graph van wegen en kruisingen. En het rijtje ‘anderen kochten ook’ op een webshop is een graph die van het ene product naar de klanten loopt die het kochten, en dan verder naar wat die klanten nog meer meenamen.

Bij TopDevs grijpen we naar een graph als de data van een klant eigenlijk over relaties gaat, zodat de verbindingen die ertoe doen snel op te vragen zijn in plaats van verstopt in joins.