Was Ist eine Graph-Datenbank, und für Was Wird Es Verwendet?

0
47
Eduard Muzhevskyi/Shutterstock

Graph-Datenbanken sind eine spezielle Art von Datenbank, die Speicherung von komplexeren Datenstrukturen, wäre undurchführbar zur Speicherung in einer relationalen Datenbank. Sie sind den meisten vor allem für soziale Netzwerke, wie Sie sind, viel mehr Leistung bietet, für bestimmte Abfragen.

Was Ist eine Graph-Datenbank?

Graph-Datenbanken werden Häufig verwendet, für stark vernetzte Daten, und für Situationen, in denen der Inhalt der Daten ist weniger wichtig als die Allgemeine Struktur.

Der einfachste Anwendungsfall für graph-Daten für soziale Netzwerke. Sollten Sie ein Netzwerk von Menschen; jeder Mensch hat eine Freunde-Liste und hat Beziehungen zu anderen Menschen. Jeder Mensch macht auch Beiträge, die oft Hunderte von Ihnen. Jeder Beitrag könnte Tausende von Menschen mit dieser zu interagieren. So, trotz der tweet nur 280 Zeichen lang sein, es gibt so viel mehr zu speichern, um es.

Dies ist sicherlich nicht der einzige Anwendungsfall, nur die meisten verdaulich one—graph-Datenbanken werden für alle möglichen Dinge. Ein weiteres Beispiel ist die Betrugserkennung; sagen, du bist eine bank, und wollen die Flagge verdächtige Konten. Es könnte sein, ein wenig fischig für zwei getrennte Konten haben die gleiche Adresse, oder teilen Sie die Telefonnummern. Mit einer graph-Datenbank können Sie einen Graphen, der die Verbindung zwischen den beiden Konten, und identifizieren Sie Probleme, wie das viel effektiver, als eine relationale Datenbank, die es je könnte.

In einer graph-Datenbank, die jedes Objekt wird als Knoten bezeichnet. Ein Knoten kann eine beliebige Anzahl von Eigenschaften, die sehr ähnlich wie eine Dokument-Datenbank arbeitet. Eine Dokumenten-Datenbank würde einfach speichern Sie für jeden Knoten wird als separates Dokument in einer collection (array) von Dokumenten, ohne Berücksichtigung, wie Sie eine Verbindung herstellen.

In einer graph-Datenbank, die verbindungen zwischen den Knoten werden Kanten genannt, und Sie verbinden zwei beliebige Knoten aus beliebigen Stelle in der Tabelle. Kanten definieren die Beziehungen zwischen den Knoten und können bestimmte Arten. Zum Beispiel, zwei Freunde, die verbunden wäre mit einer “Freunde” – Rand, aber ein Benutzer eine Verbindung zu einem post mit einem “Gebucht” oder “Gefallen” – Rand.

Was Macht Sie Schneller?

Es ist nicht so, dass relationale Datenbanken wie MySQL kann nicht zum speichern von graph-Strukturen—links wie diese sind immer noch Kern-Konzepte für SQL-Tabellen. Verbindungen bilden verbindungen zwischen Tabellen, wodurch Daten gespeichert werden, und aktualisiert in separaten Tabellen, während Sie gleichzeitig eine Verbindung an anderer Stelle in der Datenbank, ähnlich wie Pointer funktionieren in C. In dem sozialen Netzwerk Beispiel würden Sie nicht wollen, um zu speichern die Namen von allen Freunden, die ein bestimmter Benutzer als Freund können ändern Ihre Namen, so dass Sie statt speichern den Freund, die ID, und dann führen Sie eine Suche, Wann immer Sie brauchen die richtigen Daten. Vielleicht haben Sie cache die Ergebnisse, um einige Last von der Datenbank, aber die meisten Systeme funktionieren ähnlich wie diese.

Speichern Sie eine Reihe von links (wie eine Freunde-Liste) ist in Ordnung, aber das problem kommt, wenn Sie tun, jede Art von komplexen analysis. Das klassische Beispiel ist die friends-of-friends suchen. Erhalten Sie eine Liste der jeder, der einen gemeinsamen Freund mit der person, würden Sie brauchen, um die Schleife über die jeweilige person, die Freunde-Liste, und klicken Sie dann Schleife über die einzelnen Freunde-Liste, und klicken Sie dann führen Sie eine Suche für jeden Datensatz. Sie haben auch, um sicherzustellen, dass Sie nicht wieder doppelte Datensätze, welche eine zusätzliche Schleife.

Wenn Sie vertraut sind mit dem Big-O-Notation, können Sie sehen das Problem hier schon. Es ist ein problem mit exponentieller Komplexität, da mehrere geschachtelte Schleifen wie diese bricht der computer sehr schnell. Es ist auch nicht eine intelligente Art und Weise zu gehen, zu diesem problem.

Werfen Sie einen Blick auf diese benchmark von neo4j läuft das Freunde-von-Freunden-Abfrage, im Vergleich zu einer herkömmlichen relationalen Datenbank (wie MySQL):

In der Tiefe 2, es ist eine einfache Abfrage für beide Datenbanken. In der Tiefe 3, MySQL wird nicht in der Lage zum ausführen dieser Abfrage in einem normalen Zeitrahmen, wobei Sie 30 Sekunden, bis eine Antwort zurück. Zu seinem Kredit, es verwaltet die Rückkehr der Tiefe 4-Abfrage nach 25 Minuten, obwohl Tiefe 5 Abstürze der Datenbank.

Die Grafik-Datenbank ist kein problem der Rückkehr einer dieser Abfragen, mit allen Laufzeiten unter 2 Sekunden, wodurch es zu tausend mal schneller.

Wie tut es dies? Sehr komplizierte Mathematik, die meisten. Graphen sind eine mathematische Struktur am Herzen, und es gibt eine Menge Theorie dahinter, die wir sind völlig unqualifiziert, um im detail zu besprechen. Aber relationale Graphen sind ziemlich einfach zu verstehen, optisch, was macht die Arbeit mit graph-Datenbanken in der Praxis einfach.

Wenn Sie möchten, zu bekommen, begann die Arbeit mit ein, Sie haben zu wählen, und installieren Sie eine graph-Datenbank. Neo4j ist kostenlos und open source, und eine sehr beliebte option. AWS hat, Ihre Neptune-Datenbank, die Sie ausprobieren können, kostenlos, aber Sie müssen host auf AWS. Einige multi-Modell-Datenbanken, die Unterstützung von Grafiken als eine option, wie Microsoft SQL Server, Oracle-Datenbank, und ArrangoDB.