Wenn Sie können Java nicht verwenden, dann können Sie nur Groovy verwenden. Was
, wie meine eigenen Daten für Titan db speichern
Side Hinweis
Mit einem Diagramm zu verarbeiten DB ein Scharen von Möglichkeiten zur Speicherung dieser Daten gibt. Wenn Sie die Struktur Ihrer Daten wirklich formalisieren möchten, würde ich empfehlen, in Ontologies, OWL und Topic Maps zu schauen, die als große Inspiration für wie man die Daten in einer Diagramm DB formalisieren und strukturieren kann. Diese Lesevorgänge sind nur dann sinnvoll, wenn Sie nach Möglichkeiten suchen, Daten in Graphen sehr formal zu strukturieren.
Struktur Beispiel
Vorerst nehmen wir an, Sie wollen einfach nur Kunden und die Produkte verfolgen sie gekauft haben. Eine einfache Struktur besteht darin, dass sowohl Kunden als auch Produkte Eckpunkte mit einer Kante von einem Kunden zu einem Produkt sind, das als die Tatsache dient, dass ein Kunde dieses Produkt gekauft hat. Wir können sogar zusätzliche Daten auf diese Kante wie Zeitpunkt des Kaufs und Menge setzen.Hier ist ein Beispiel dafür, wie das in Groovy zu tun:
g = TitanFactory.open("titan-cassandra-es.properties")
gremlin> customerBob = g.addVertex("Bob");
==>v[12]
gremlin> customerAlice = g.addVertex("Alice");
==>v[13]
gremlin> productFish = g.addVertex("Fish");
==>v[14]
gremlin> productMeat = g.addVertex("Meat");
==>v[15]
gremlin> edge = customerBob.addEdge("purchased", productMeat, "Day", "Friday", "Qauntity", 2);
==>e[16][12-purchased->15]
gremlin> edge = customerBob.addEdge("purchased", productFish, "Day", "Friday", "Qauntity", 1);
==>e[17][12-purchased->14]
gremlin> edge = customerAlice.addEdge("purchased", productMeat, "Day", "Monday", "Qauntity", 3);
==>e[18][13-purchased->15]
Die oben im Grunde sagt, dass Bob etwas Fleisch und Fisch am Freitag gekauft, während Alice etwas Fleisch am Montag gekauft. Wenn wir herausfinden wollten, was Bob am Freitag gekauft, könnten wir die folgende Traversal
gremlin> g.traversal().V().hasLabel("Bob").outE("purchased").has("Day", "Friday").otherV().label();
==>Meat
==>Fish
Indexing
Bevor wirklich Tauchen in Indizierung machen mit Verständnis der Struktur spielen, um. Das folgende ist eine sehr Skelett-Erklärung auf Indizierung mit Elasticsearch und Titan:
Im Hinblick auf die Indizierung, wissen, dass Titan verschiedene Arten von Indizes hat, Composite-, Vertex-Centric und Mixed alle erfüllen ihren Zweck und Sie sollten this für weitere Informationen lesen.
Indexierung wird verwendet, um Durchläufe und Suchvorgänge zu beschleunigen. Sie müssen also entscheiden, was Sie indexieren möchten. Für unser Beispiel möchten wir schnell alle Einkäufe an verschiedenen Tagen kennenlernen. Dies bedeutet, dass wir einen gemischten Index für Kanten verwenden können, um uns zu helfen (zusammengesetzte Indizes funktionieren genauso gut, aber Sie fragen nach elasticsearch, so dass wir einen gemischten Index verwenden).
Um einen gemischten Index definieren wir ein einfaches Schema (weitere Informationen here) beginnen zu definieren:
mgmt = graph.openManagement();
purchased = mgmt.makeEdgeLabel("purchased").multiplicity(MULTI).make();
day = mgmt.makePropertyKey("Day").dataType(String.class).make();
Sie brauchen nicht explizit zu definieren das Schema für alles, aber es ist wichtig für alles wollen Sie Index. Jetzt können Sie Ihren Index erstellen:
mgmt.buildIndex("productsPurchased", Edge.class).addKey(day).buildMixedIndex("search")
mgmt.commit() //"search" is defined in your titan-conf.properties file
Mit diesem Index Anfragen wie:
g.traversal().E().has("Day", "Friday")
wird viel schneller sein.
Hinweis: Sie sollten Ihre Indizes und Ihr Schema vor dem Laden von Daten erstellen. Es vereinfacht die Dinge auf lange Sicht.
Vielen Dank für solch eine detaillierte Antwort.Ich habe wenige Zweifel 1) Wenn ich g.traversal(). V(). Values () gibt es die Eckpunkte der Graph der Götter nicht Produkt Käufer Verkäufer Daten Knoten (ich hatte zuvor geladene graphOfGods Daten.). 2. Zweifel ist, wo ist dieses Produkt Käufer Verkäufer Daten gespeichert (auf Cassandra?) 3), wenn ich die Suchanfrage g.traversal() ausführen.V(). HasLabel ("Bob"). OutE ("gekauft"). Has ("Day", "Friday") [Query erfordert die Iteration über alle Scheitelpunkte [(~ label = Bob)]. Verwenden Sie Indizes, um eine bessere Leistung zu erzielen, auch wenn ich Ihre mgmt-Schritte befolgt habe. Irgendwelche Hinweise, wo ich es falsch verstehen könnte. –
1. Wenn Sie den Graphen der Götter geladen und gespeichert haben, dann werden Sie sehen, dass diese Daten in Ihre eigenen Daten einfließen. Sie können TitanCleanup verwenden, um bei Bedarf schnell ein Diagramm zu löschen. 2. Ja, es ist in Cassandra gespeichert. Am Ende des Tages ist Titan eine Grafikbibliothek, die mehrere Backends unterstützt, von denen Cassandra eine davon ist. 3. Das ist natürlich, weil wir das nicht indiziert haben. Wie gesagt, wir müssen wählen, was wir indexieren. Im Beispiel habe ich die Kante indiziert. In solch einem einfachen Fall mit Bob ist ein zusammengesetzter Index am besten für schnelle Suchvorgänge geeignet. Überprüfen Sie die Dokumente zu Titanzusammensetzungsindizes. Sie sind sehr umfassend. –
Nochmals vielen Dank für die Erklärung !! Meinen Tag gerettet. –