Wat Is een Grafiek Database, en waar Wordt Het voor Gebruikt?

0
315
Eduard Muzhevskyi/Shutterstock

Grafiek databases zijn een speciale soort van database opslaan van complexe data structuren zou dat niet haalbaar, op te slaan op een traditionele relationele database. Ze worden vooral gebruikt voor sociale netwerken, zijn ze veel meer performant voor bepaalde zoekopdrachten.

Wat Is een Grafiek Database?

Grafiek databases worden meestal gebruikt voor het sterk verbonden gegevens, en voor situaties waarbij de inhoud van de gegevens zelf zaken minder dan de totale structuur.

De meest eenvoudige use case voor grafiek gegevens is voor sociale netwerken. Beschouw een netwerk van mensen; ieder mens heeft een lijst met vrienden en relaties met andere mensen. Elke persoon maakt ook posten, vaak honderden van hen. Elke post kan hebben duizenden mensen de interactie met het. Dus, ondanks de tweet slechts 280 tekens lang zijn, er is zo veel meer op te slaan over.

Dit is zeker niet de enige gebruik van het geval, alleen de meest verteerbare één—graph databases worden gebruikt voor allerlei dingen. Een ander voorbeeld is de opsporing van fraude; zeggen dat je een bank, en wilt vlag verdachte accounts. Het is misschien een beetje fishy voor twee aparte accounts op hetzelfde adres of delen van telefoonnummers. Met een grafiek database, kunt u een grafiek van het verband tussen de twee accounts en het identificeren van problemen zoals deze veel efficiënter dan een relationele database ooit zou kunnen.

In een grafiek database, elk object wordt een knooppunt genoemd. Een knooppunt kan een willekeurig aantal eigenschappen, vergelijkbaar met hoe een document database werkt. Een document database zou gewoon store elk knooppunt in een apart document in een collectie (array) van documenten, zonder rekening te houden met hoe ze verbinding maken.

In een grafiek database, de verbindingen tussen de knooppunten worden genoemd randen, en ze kunnen verbinden twee willekeurige knooppunten van ergens in de tabel. Randen definiëren van de relaties tussen de knooppunten, en kan specifieke soorten. Bijvoorbeeld, twee vrienden verbonden zouden worden met een “Vrienden” van de rand, maar een gebruiker zou worden aangesloten op een post met een “Geplaatst” of “Liked” van de rand.

Wat Maakt Het Sneller?

Het is niet dat relationele databases zoals MySQL kan niet opslaan grafiek-achtige structuren—links, zoals deze zijn nog steeds de kern van het concept voor SQL-tabellen. Links vormen de verbindingen tussen de tafels, zodat de gegevens worden opgeslagen en bijgewerkt in aparte tabellen met behoud van een link elders in de database, zeer vergelijkbaar met hoe pointers werken in C. In het sociale netwerk bijvoorbeeld, zou je niet wilt opslaan de naam van elke vriend die een bepaalde gebruiker heeft als die vriend kan veranderen hun naam, zodat je in plaats van het opslaan van de vriend ID, en voert u een zoekopdracht uit te voeren wanneer u de juiste gegevens. Misschien kunt u de cache van de resultaten te nemen laden van de database, maar de meeste systemen werken op dezelfde wijze dit.

Het opslaan van een set van koppelingen (zoals een vrienden-lijst) is prima, maar het probleem komt wanneer u begint met het doen van elk type van complexe analyse. Het klassieke voorbeeld is de vrienden-van-vrienden te zoeken. Voor het verkrijgen van een lijst van iedereen die een wederzijdse vriend met de opgegeven persoon, moet u de lus over de gegeven vriendenlijst van die persoon, en dan loop over elke vriend vrienden lijst en het uitvoeren van een zoekopdracht voor elke record. Je hebt ook om ervoor te zorgen dat je niet retourneren van dubbele records, dat is nog een extra lus.

Als je vertrouwd bent met de Grote O Notatie, ziet u mogelijk het probleem hier al. Het is een probleem met de exponentiële complexiteit; het doen van meerdere geneste lussen als dit breekt de computer zeer snel. Het is ook niet een slimme manier om te gaan over dit probleem.

Neem een kijkje op deze benchmark van neo4j het uitvoeren van de vrienden-van-vrienden-query, in vergelijking met een traditionele relationele database (zoals MySQL):

Op diepte 2, het is een eenvoudige query voor beide databases. Op diepte 3, MySQL wordt niet in staat om het uitvoeren van deze query in een normale tijdspanne van 30 seconden op een reactie. Op zijn naam weet te retourneren en de diepte 4 query na 25 minuten, maar de diepte van 5 crasht de database.

De grafiek database heeft geen probleem retourneren van deze query ‘ s, met alle uitvoering tijden onder de 2 seconden, waardoor het duizenden malen sneller.

Hoe werkt dit? Zeer ingewikkelde wiskundige, meestal. Grafieken zijn een wiskundige structuur in hun hart, en er is veel theorie achter de rug, waarin we grondig goedkeurende om in detail te bespreken. Maar relationele grafieken zijn vrij eenvoudig te begrijpen visueel, en dat maakt het werken met graph databases in de praktijk gemakkelijk is.

Als u wilt beginnen te werken met een, zult u moeten kiezen en installeren van een grafiek database. Neo4j is gratis en open bron, en een zeer populaire optie. AWS heeft hun Neptunus database, waarin je kunt proberen voor gratis, maar moet de gastheer op AWS. Sommige multi-model databases ondersteunen grafieken als u een optie, zoals Microsoft SQL Server, Oracle Database, en ArrangoDB.