2016-08-03 38 views
7

Ich versuche, Graph-Objekt mit Tinkerpop3 in Java als Client von bereits laufenden TitanDB-Server zu erhalten (Ich möchte keinen Server erstellen).Tinkerpop3 Verbindung zum Remote-TitanDB-Server

Mit anderen Worten, ich versuche, eine solche Funktion zu implementieren: public Graph erhalteGraph (String serverIp, String graphName);

Ich habe versucht, es wie hier zu tun: AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud

aber wie ich sie verstehe, TitanFactory.open() startet Server, und ich will nicht, dies zu tun - ich möchte nur an bestehende Server verbinden.

Dokumentation sowie die meisten Materialien in der Internetnutzung in-memory grafische Darstellungen für Beispiele, und ich nicht finden können, das zeigt, wie man:

  • neues Diagramm erstellen und auf Remote-Server speichert

  • abrufen von Remote-Server

  • Aktualisierung solcher Remote-graph bestehenden graph, so nach dem Hinzufügen/Entfernen von Kanten zu begehen Änderungen

  • ganze Graph löschen

Ich möchte nicht über Sachen durch Gremlin Sprache (Strings) zu tun, sondern durch Java API (TinkerpopBlueprins). Dieser Typ nähert sich dem, was ich brauche: Add vertices to TitanDB Graph in Java jedoch nimmt seine Methode bereits Graph als Argument.

Ich habe an vielen Stellen im Internet gesehen, dass GraphFactory.open() Pfad zur Eigenschaftendatei erhält, jedoch habe ich kein Beispiel für den Inhalt einer solchen Datei gesehen, insbesondere mit TitanDB relevanten Daten, also würde ich es vorziehen zu verwenden Konfigurationsobjekt

Graph Graph = GraphFactory.open (neu BaseConfiguration())

sagt, dass es keine gremlin.graph Eigenschaft ist.

Konfigurationskonfiguration = neu BaseConfiguration(); configuration.setProperty ("gremlin.graph", "titan");

Graph Grafik = GraphFactory.open (Konfiguration);

sagt GraphFactory nicht [Titan] finden konnte - Stellen Sie sicher, dass das Glas in dem Classpath ist

Gibt es eine statisch typisierte Builder mit Aufzählungen und Konstanten anstelle von Karte, die mir sagen wird, welche Eigenschaften muss ich bieten und was ist ihr Typ? Gibt es ein Open-Source-Projekt, das Tinkerpop3 verwendet, um sich als Client mit dem entfernten TitanDB-Server zu verbinden, den ich als Beispiel verwenden könnte?

Ich würde gerne voll funktionsfähige Beispiel sehen, anstatt im Speicher mit externer Konfiguration.

+0

http://s3.thinkaurelius.com/docs/titan/1.0.0/storage-backends.html –

Antwort

7

Hier ist ein Beispiel für ein Titan-Treiberprogramm, das eine Verbindung zu einem laufenden Titan Server herstellt. https://github.com/pluradj/titan-tp3-driver-example Wie Sie bereits bemerkt haben, wird dies Gremlin als Zeichenfolge an den entfernten Titan Server übergeben.Wenn Sie dies nicht tun möchten, weil Sie die Java API direkt verwenden möchten, sollten Sie TitanFactory.open() verwenden, um eine direkte Verbindung zu Ihrem Graphen herzustellen. TitanFactory.open() erstellt eine TitanGraph Instanz, gegen die Sie Ihre Grafik-API-Aufrufe ausführen können. Es startet keinen Titan Server. Unter den Abdeckungen erstellt Client-Verbindungen zum Back-End-Speicher und Index.

Sie dieses Beispiel für ein Titan Java-Programm ohne Titan Server https://github.com/pluradj/titan-tp3-java-example

Sie können dies konfigurieren indem eine Eigenschaftendatei (hier ist ein example configuration mit Cassandra und Elasticsearch) oder durch die Konstruktion ein Configuration Objekts über Code verweisen kann (im Grunde die gleichen Schlüssel-Wert-Paare, die in der Eigenschaftendatei sind).

  • Wenn das Diagramm vor Ihrer ersten Verbindung nicht existiert, Titan wird die Grafik in Schlüsselraum Cassandra und Index in Elasticsearch erstellen.

  • Notieren Sie sich die storage.hostname und index.search.hostname, da dies Ihre Cassandra und Elasticsearch-Cluster sind. Dies sind im Wesentlichen Ihre "Graph Server". Sie müssen keinen separaten Titan Server ausführen.

  • Titan verfügt über keine APIs, um das Diagramm aus dem Back-End-Speicher zu löschen. Um das gesamte Diagramm zu löschen, müssen Sie über ein Java client driver eine Verbindung zu Cassandra herstellen und die API ausführen, um den Schlüsselbereich zu löschen. In ähnlicher Weise müssten Sie über die Indices API Verbindung mit Elasticsearch aufnehmen und den Index löschen.

+0

Es nutzt Ebene Gremlin - „gV() hasLabel ('Software') hat (‘.. name ', n) .in (' erstellt '). values ​​(' name ') ". Ich möchte mit dem Server ohne Abfragen als Zeichenfolgen kommunizieren, etwas näher an JPA. – spam

+1

aktualisierte Antwort mit mehr Details. hoffe das hilft. –

+0

Ja, es hilft ein wenig, da ich mir sicher bin, dass TitanFactory.open() den Server nicht startet (Dokumentation ist zumindest für mich unklar). Allerdings weiß ich nicht, was als Wert für storage.backend schreiben soll - simple "titan" und "titandb" funktioniert nicht. – spam