2013-08-28 6 views
22

Es gibt Tripelspeicher (semantische Datenbanken), und es gibt universelle Graphdatenbanken.Was ist der Unterschied zwischen Triple-Stores und Graph-Datenbanken?

Beide basieren auf den ähnlichen Konzepten, einen "Gegenstand" über eine Beziehung mit einem anderen zu verbinden. Triple-Stores unterstützen RDF und werden von SPARQL abgefragt, aber solche Add-Ons können (und werden) auch auf Allzweck-Graph-Datenbanken implementiert werden.

Was ist der grundlegende Unterschied, der Sie dazu bringen würde, einen semantischen db/tripleStore einer universellen Graphdatenbank wie neo4j vorzuziehen?

Antwort

6

Meine 2 Cent.

Neo4j gehört zur Kategorie des Eigenschaftsdiagramms. Sie unterstützen gerichtete Beziehungen und jede Beziehung hat nur zwei Knoten; der Startknoten und der Endknoten. Die Knoten und Beziehungen können beliebige Daten in Form von Schlüssel/Wert-Paaren speichern. Sie können jedoch keine 3-gliedrigen Beziehungen unterstützen. h. Sie können keine Kante haben, die mehr als zwei Knoten verbindet, d. h. . Sie können jedoch eine 3-gliedrige Beziehung in Eigenschaftsdiagrammen emulieren, indem Sie Verbindungsknoten erstellen. You can see how to implement this in neo4j here.

Triple-Stores haben eine standardisierte Abfragesprache in Form von SPARQL, aber es existiert noch kein Standard für die Abfrage anderer Graph-Datenbanken. RDF ist der Standard für den Import/Export von Triple-Stores.

11

Dreifach speichert sind Graph-Datenbanken. RDF ist ein Diagramm. Zugegeben, dreifache Speicher neigen dazu, die Informationen nicht intern als Graph zu speichern; das ist suboptimal für die Abfrageantwort, aber sie sind immer noch Graphdatenbanken.

Sie würden sie zu etwas wie neo4j bevorzugen, wenn Sie an einem Ökosystem interessiert sind, das auf W3C Standards basiert. Macht die Verbindung mit anderen RDF-basierten Systemen trivial, und es macht das Aufnehmen von allem und den Wechsel zu einem anderen Triple-Speicher ziemlich schmerzlos.

10

Zunächst können alle Datenstrukturen mehr oder weniger schmerzhaft in jede zugrundeliegende Speicher-Engine (oder sogar in Ihr Dateisystem und Textdateien) projiziert werden. Der Grund, eine bestimmte Datenmodell und Speicher-Backend zu wählen sind IMHO:

  • Ihre Entwicklung und Modellierung Vorlieben
  • Ihre erwartete Laufzeit-Performance für das Einfügen, Speichern und Abfragen des Modells.

Wie bereits erwähnt, neigen beide RDBMSes TripleStores und zur Laufzeit als nützlich in „flachen“ Durchlaufen der PUT von JOIN oder sparql Traversierungen, und noch viel Arbeit in Caches oder hergestellt Ansichten usw. Graph Datenbanken (Neo4j eindeutig) Graph-Struktur bis hinunter zur Speicherschicht und Zeiger (mit einer Anzahl von Optimierungen) auf Knoten-Datensatz-Ebene jagen. Wenn Sie also den Graphen durchlaufen, müssen Sie nicht mehr als den aktuellen Subgraphen bis auf die Speicherebene berühren. So können Sie Teile der Daten durchqueren, ohne den gesamten Graphen zu berühren, was zu einer konstanten Leistung für eine Reihe interessanter Szenarien führt .