2016-08-03 10 views
7

Я пытаюсь получить объект Graph с использованием Tinkerpop3 в Java в качестве клиента из уже запущенного сервера TitanDB (я не хочу создавать сервер).Tinkerpop3 подключается к удаленному серверу TitanDB

Другими словами, я пытаюсь реализовать такую ​​функцию: public Graph getGraph (String serverIp, String graphName);

Я пытался сделать это, как здесь: AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud

, но как я понимаю, TitanFactory.open() начинает сервер, и я не хочу, чтобы это сделать - я просто хочу, чтобы подключиться к существующему серверу.

документации, а также большинство материалов в использовании Интернета в памяти графики для примеров, и я не могу найти тот, который показывает, как:

  • создать новый график и сохранить его на удаленном сервере

  • получить существующий график с удаленного сервера

  • обновления такого удаленный Graph, так что после добавления/удаления ребер, совершающих изменений

  • удалить весь граф

Я не хочу, чтобы сделать выше вещи через Gremlin язык (Strings), но через Java API (TinkerpopBlueprins). Этот парень приближается к тому, что мне нужно: Add vertices to TitanDB Graph in Java Однако его метод уже принимает Graph в качестве аргумента.

Я видел во многих местах в Интернете, что GraphFactory.open() получает путь к файлу свойств, однако я не видел примера содержимого такого файла, особенно с соответствующими данными TitanDB, поэтому я бы предпочел использовать Объект конфигурации.

график Graph = GraphFactory.open (новый BaseConfiguration())

говорит, что нет никакой собственности gremlin.graph.

Конфигурация конфигурации = новая BaseConfiguration(); configuration.setProperty ("gremlin.graph", "titan");

График графа = GraphFactory.open (конфигурация);

говорит GraphFactory не мог найти [титановый] - Убедитесь, что сосуд находится в пути к классам

Есть ли статический типизированные строители с перечислениями и константами, а не карта, которая будет сказать мне, какие свойства я должен обеспечить и каков их тип? Есть ли какой-либо проект с открытым исходным кодом, который использует Tinkerpop3 для подключения в качестве клиента к удаленному серверу TitanDB, который я мог бы использовать в качестве примера?

Я хотел бы увидеть полностью рабочий пример, а не встроенную память с внешней конфигурацией.

+0

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

ответ

7

Ниже приведен пример программы драйвера Titan, которая подключается к работающему серверу Titan. https://github.com/pluradj/titan-tp3-driver-example Как вы отметили, это передаст Gremlin в виде строки на удаленном сервере Titan.

Если вы не хотите этого делать, потому что хотите использовать Java API напрямую, вы должны использовать TitanFactory.open(), чтобы прямое подключение к вашему графику. TitanFactory.open() создает экземпляр TitanGraph, с которым вы можете выполнять вызовы API графиков. Он не запускает сервер Titan. Под обложками создается клиентское соединение с базовым хранилищем и индексом.

Вы можете обратиться к этому примеру для программы Titan Java без Titan сервера https://github.com/pluradj/titan-tp3-java-example

Вы можете настроить это с помощью файла свойств (здесь является example configuration использованием Кассандры и Elasticsearch) или путем построения Configuration объекта с помощью кода (в основном устанавливая одни и те же пары ключ-значение, которые находятся в файле свойств).

  • Если граф не существует до вашего первоначального подключения, Titan создаст график в пространстве ключи Кассандры и индекс в Elasticsearch.

  • Обратите внимание на storage.hostname и index.search.hostname, так как это ваши кластеры Cassandra и Elasticsearch соответственно. Это, по сути, ваш «сервер графов». Вам не нужен отдельный сервер Titan.

  • Titan не имеет каких-либо API-интерфейсов для удаления графика из внутреннего хранилища. Чтобы удалить весь график, вам необходимо подключиться к Cassandra через Java client driver и выполнить API, чтобы отбросить пространство ключей. Аналогично, вам нужно будет подключиться к Elasticsearch через его Indices API и удалить индекс.

+0

Он использует простой Гремлин - «ГВ() hasLabel ('программное обеспечение') имеет (».. имя», п) .в ('создано'). значения ('имя')». Я хотел бы общаться с сервером без запросов в виде строк, что-то ближе к JPA. – spam

+1

обновленный ответ с более подробной информацией. надеюсь это поможет. –

+0

Да, это немного помогает, поскольку я уверен, что TitanFactory.open() не запускает сервер (документация неясна, по крайней мере для меня). Однако я не знаю, что следует писать как ценность для storage.backend - простые «титан» и «титанд» не работают. – spam