Gremlin-Python Подключение к существующему JanusGraph

Я создал график с помощью консоли gremlin

gremlin> ConfiguredGraphFactory.graphNames
==>MYGRAPH
gremlin> ConfiguredGraphFactory.getConfiguration('MYGRAPH')
==>storage.backend=cql
==>graph.graphname=MYGRAPH
==>storage.hostname=127.0.0.1
==>Template_Configuration=false
gremlin> g.V().properties()
==>vp[name->SFO]
==>vp[country->USA]
==>vp[name->ALD]
==>vp[country->IND]
==>vp[name->BLR]
==>vp[country->IND]
gremlin>

Я хочу подключиться к MYGRAPH с помощью gremlin-python. Может кто-нибудь сказать мне, как получить доступ к графу с именем «MYGRAPH» с помощью gremlin-python.

Заранее спасибо...


person Servesh Singh    schedule 07.11.2018    source источник


Ответы (1)


Прежде всего вам нужно будет установить несколько файлов jar для JanusGraph для обработки скриптов gremlin-python:

./bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python 3.2.9

Обратите внимание, что версия gremlin-python, которую вы устанавливаете, должна соответствовать версии Tinkerpop, с которой совместим JanusGraph. Информацию о совместимости можно найти на странице выпусков JanusGraph. Например, JanusGraph 0.2.2 совместим с Tinkerpop 3.2.9.

Затем вам нужно запустить сервер JanusGraph с помощью ConfiguredGraphFactory. Вам просто нужно использовать файл conf/gremlin-server/gremlin-server-configuration.yaml из дистрибутива.

bin/gremlin-server.sh conf/gremlin-server/gremlin-server-configuration.yaml

Этот файл отличается от традиционного conf/gremlin-server/gremlin-server.yaml несколькими строками

graphManager: org.janusgraph.graphdb.management.JanusGraphManager
graphs: {
  ConfigurationManagementGraph: conf/janusgraph-cql-configurationgraph.properties
}

Затем нам нужно загрузить график MYGRAPH во время сценария инициализации сервера. Создайте сценарий инициализации scripts/init.groovy. Здесь вы можете загрузить столько разных графиков, сколько захотите.

def globals = [:]
myGraph = ConfiguredGraphFactory.open("MYGRAPH")
globals << [myGraphTraversal : myGraph.traversal()]

Убедитесь, что этот сценарий выполняется при запуске сервера gremlin в conf/gremlin-server/gremlin-server-configuration.yaml

scriptEngines: {
  gremlin-groovy: {
    imports: [java.lang.Math],
    staticImports: [java.lang.Math.PI],
    scripts: [scripts/init.groovy]}}

Наконец, в своем проекте Python установите пакет gremlin-python, который соответствует версии Tinkerpop вашей версии JanusGraph. В случае JanusGraph 0.2.2 это версия 3.2.9.

pip install gremlin-python==3.2.9

Запустите оболочку Python и начните кодирование:

>>> from gremlin_python import statics
>>> from gremlin_python.structure.graph import Graph
>>> from gremlin_python.process.graph_traversal import __
>>> from gremlin_python.process.strategies import *
>>> from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

>>> graph = Graph()
>>> myGraphTraversal = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','myGraphTraversal'))
>>> myGraphTraversal.V().count()
person Benoit Guigal    schedule 07.11.2018
comment
Хороший и очень подробный ответ. Я бы только упомянул, что gremlin-python необходимо установить на сервере только в том случае, если нужно использовать лямбды Python. В противном случае сервер уже включает в себя все необходимое для работы Gremlin-Python. Для этого просто нужно иметь возможность десериализовать GraphSON. - person Florian Hockmann; 07.11.2018
comment
Спасибо Бенуа за подробные инструкции. Все еще я не мог понять, где мы указываем имя графа в коде Python? например в последнем разделе фрагмента кода Python, где вы указываете имя графика, то есть MYGRAPH? Мое приложение python хочет подключиться к графику MYGRAPH только там, где graphdb может иметь более одного именованного графа. - person Servesh Singh; 07.11.2018
comment
Я обновил свой ответ, чтобы получить доступ к MYGRAPH из Python. Уловка состоит в том, чтобы загрузить граф при запуске сервера gremlin (см. Init.groovy) и привязать переменную к graphTraversalSource. Таким образом, вы можете привязать несколько переменных к нескольким обходам графа и выбрать, по какой из них проходить, на основе вашей логики Python. - person Benoit Guigal; 08.11.2018
comment
@BenoitGuigal, это именно то, что я искал. Большое спасибо. Я сейчас разблокирован и все работает. Ты сделал мой день .... Спасибо. - person Servesh Singh; 08.11.2018
comment
@BenoitGuigal Прежде всего, спасибо за ответ - в конце концов мне удалось решить эту проблему с помощью вашего решения, НО с некоторыми изменениями. Мне пришлось внести изменения в gremlin-server.yaml не gremlin-server-configuration.yaml (почему их два? Они выглядят одинаково ...), а в моем .yaml файле есть только раздел plugins под scriptEngines.gremlin-groovy, поэтому вместо scriptEngines.gremlin-groovy.scripts: [scripts/init.groovy] у меня а scriptEngines.gremlin-groovy.plugins:{org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: ['scripts/init.groovy']}} - person Glennie Helles Sindholt; 15.02.2019
comment
(И я запускаю JanusGraph 0.3.0) - person Glennie Helles Sindholt; 15.02.2019
comment
Если вы сделаете это, и кто-то сбросит ваш график, используя ConfiguredGraphFactory.drop(), myGraphTraversal будет болтаться, и произойдут странные вещи - person Arne Böckmann; 27.06.2019
comment
@BenoitGuigal Я по ошибке установил 3.2.9 gremlin-python, теперь я получаю сообщение об уже существующем. как установить 3.4.0. На самом деле я не могу подключиться с удаленного адреса - person A.B; 13.08.2019
comment
При попытке выполнить следующую команду появляется ошибка Configuration not found: ./bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python 3.2.9 - person Phoenix; 12.06.2020