2016-04-13 11 views
1

Mein Problem ist, dass ich Produkt-, Kunden- und Verkäuferdaten in der Titandatenbank speichern möchte, die Cassandra als Storage Backend und ElasticSearch als Indexing Backend hat. Dann werde ich diese Daten abfragen, um Empfehlungen an Kunden und Verkäufer zu geben. Ich bin nicht in der Lage, an den Punkt zu kommen, wo ich meine eigenen Daten speichern kann. Da die Daten riesig sein werden, werde ich Cassandra und ElasticSearch verwenden.Mein Titan Db Graph mit Cassandra und Elasticsearch Backend machen

Was ich bisher gemacht habe ist, dass ich Cassandra, elasticsearch eingerichtet habe. Jetzt kann ich bin run/titan.sh starten cassandra, es und Gremlin Server kann ich auch spielen mit Grafik der Götter Daten von

gremlin> graph = TitanFactory.open('conf/titan-cassandra-es.properties') 
==>standardtitangraph[cassandrathrift:[127.0.0.1]] 
gremlin> GraphOfTheGodsFactory.load(graph) 
==>null 

Nun Ich versuche, einen Weg zu finden, zu speichern, mein Produkt zu starten , Kunden- und Verkäufergraphendaten. so dass es auf Cassandra und Indizes auf elasticsearch gespeichert ist.

Welche Schritte sollte ich tun, um dies zu tun. Meine Hauptsprache für das Projekt ist nodejs und Java kommt aufgrund von Projektbeschränkungen nicht in Frage.

Meine Fragen in kurzen

  1. , wie meine eigenen Daten für Titan db speichern
  2. verarbeiten Sobald Daten zur Verarbeitung zur Verfügung steht. Ich werde einige http apis für die Bereitstellung von Empfehlungen ausgesetzt. Schreiben in Java kommt aufgrund einiger Einschränkungen nicht in Frage . Wie soll ich damit weitermachen. (Ich glaube, ich als Alternative nur Gremlin haben)

I ll dankbar sein, wenn Sie meine Fehler hinweisen können und einige Brotkrumen in die richtige Richtung fallen

Antwort

4

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.

+0

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

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. –

+0

Nochmals vielen Dank für die Erklärung !! Meinen Tag gerettet. –

4

Da Ihre Hauptsprache JavaScript/Node.js ist, können Sie https://www.npmjs.com/package/gremlin verwenden, das ein WebSocket-Client für TinkerPop3 Gremlin Server ist (Disclaimer: Bibliotheksautor hier). Sie verwenden den Client, um Strings von Gremlin-Groovy-Abfragen an einen Remote-Gremlin-Server zu senden.

Die einfachste Art und Weise mit der graphischen Darstellung der Interaktion ist:

import { createClient } from 'gremlin'; 

const client = createClient(8182, 'localhost'); 

client.execute('g.V()', (err, results) => { 
    // handle err or results 
} 

Es gibt weiter fortgeschritten in der Dokumentation detailliert Modi. Der Client unterstützt auch gebundene Parameter für bessere Sicherheit und Leistung.

Es kann zu früh sein, um Ihre Domain und Daten Modellierung zu kommentieren, also werde ich nur mit der Umgebung Teil Ihrer Frage bleiben, um Sie zu beginnen.

+0

danke jbmusso. großartige Bibliothek. hat Prototyping darin gemacht. sehr kraftvoll, aber einfach und elegant. –

+0

http://stackoverflow.com/questions/36820316/bulk-load-data-in-titan-db-from-nodejs. Wäre toll, wenn Sie das irgendwann sehen können. Vielen Dank –

Verwandte Themen