2016-08-03 25 views
7

Próbuję uzyskać obiekt Graph za pomocą Tinkerpop3 w Javie jako klient z już działającego serwera TitanDB (nie chcę tworzyć serwera).Tinkerpop3 połączyć się ze zdalnym serwerem TitanDB

Innymi słowy, próbuję wprowadzić taką funkcję: public Graph obtainGraph (String serverIp, String graphName);

starałem się zrobić to jak tutaj: AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud

ale jak rozumiem, TitanFactory.open() uruchamia serwer, a nie chcę tego robić - po prostu chcesz się połączyć istniejącego serwera.

Dokumentacja jak również większość materiałów w korzystaniu z internetu w pamięci wykresy do przykładów, a nie mogę znaleźć taki, który pokazuje w jaki sposób:

  • utworzyć nowy wykres i zapisać go na zdalnym serwerze

  • odzyskać istniejący wykres ze zdalnym serwerem

  • zmiana taka zdalna Graph, więc po dodaniu/usunięciu krawędzie Zatwierdzanie zmian

  • usunąć cały wykresem

Nie chcę robić rzeczy powyżej przez Gremlin języku (łańcuchy), ale poprzez Java API (TinkerpopBlueprins). Ten facet zbliża się do tego, czego potrzebuję: Add vertices to TitanDB Graph in Java , jednak jego metoda już bierze Graph jako argument.

Widziałem w wielu miejscach w Internecie, że GraphFactory.open() dostaje ścieżkę do pliku właściwości, jednak nie widziałem przykład zawartości takiego pliku, szczególnie z danymi dotyczącymi TitanDB, więc wolałbym użyć Obiekt konfiguracji.

graph = GraphFactory.open (nowa BaseConfiguration())

mówi, że nie ma własności gremlin.graph.

Konfiguracja konfiguracji = nowa BaseConfiguration(); configuration.setProperty ("gremlin.graph", "titan");

Wykres wykresu = GraphFactory.open (konfiguracja);

mówi GraphFactory nie mógł znaleźć [Titan] - Upewnić się, że słoik jest w ścieżce klasy

Czy istnieje statycznie wpisane konstruktora z teksty stałe i stałych, zamiast mapą, że powie mi, jakie właściwości muszę dostarczyć i jaki jest ich typ? Czy istnieje projekt open source, który wykorzystuje Tinkerpop3 do połączenia jako klienta ze zdalnym serwerem TitanDB, którego mógłbym użyć jako przykładu?

Chciałbym zobaczyć w pełni działający przykład, zamiast w pamięci z zewnętrzną konfiguracją.

+0

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

Odpowiedz

7

Oto przykład programu sterownika Titan, który łączy się z działającym serwerem Titan. https://github.com/pluradj/titan-tp3-driver-example Jak już zauważyłeś, to przekaże Gremlin jako ciąg do zdalnego serwera Titan.

Jeśli nie chcesz tego robić, ponieważ chcesz bezpośrednio korzystać z interfejsu API Java, powinieneś użyć TitanFactory.open(), aby uzyskać bezpośrednie połączenie z wykresem. TitanFactory.open() tworzy instancję TitanGraph, z którą można wykonywać wywołania interfejsu API wykresu. Nie uruchamia serwera Titan. Pod okładkami tworzy połączenia z klientami do pamięci wewnętrznej i indeksu.

Można odwołać się do tego przykładu dla programu Titan Java bez Titan Server https://github.com/pluradj/titan-tp3-java-example

Można skonfigurować to przy użyciu pliku właściwości (tutaj jest example configuration użyciu Cassandrę i Elasticsearch) lub konstruując Configuration obiektu za pomocą kodu (zasadniczo ustawienie tych samych par klucz-wartość, które znajdują się w pliku właściwości).

  • Jeśli wykres nie istnieje przed pierwszym połączeniem, Titan utworzy obszar kluczy wykresu w Cassandrze i indeks w Elasticsearch.

  • Zanotuj storage.hostname i index.search.hostname, ponieważ są to odpowiednio klastry Cassandra i Elasticsearch. To zasadniczo twój "serwer graficzny". Nie potrzebujesz oddzielnego serwera Titan.

  • Titan nie ma żadnych interfejsów API, aby usunąć wykres z pamięci wewnętrznej. Aby usunąć cały wykres, musisz połączyć się z Cassandrą poprzez Java client driver i uruchomić interfejs API, aby usunąć przestrzeń kluczy. Podobnie, musisz połączyć się z Elasticsearch poprzez jego Indices API i usunąć indeks.

+0

Wykorzystuje zwykły Gremlin - „GV() hasLabel ('Oprogramowanie') ma (”.. name ', n) .in (' created '). values ​​(' name ') ". Chciałbym komunikować się z serwerem bez zapytań jako ciągi, coś bliżej JPA. – spam

+1

zaktualizowaną odpowiedź z większą ilością szczegółów. mam nadzieję że to pomoże. –

+0

Tak, to trochę pomaga, ponieważ jestem w końcu pewien, że TitanFactory.open() nie uruchamia serwera (dokumentacja jest niejasna, przynajmniej dla mnie). Jednak nie wiem, co napisać jako wartość dla storage.backend - proste "titan" i "titandb" nie działa. – spam

Powiązane problemy