Gremlin Python в веб-приложении

У меня есть веб-приложение python flask, которое запрашивает базу данных Janus graph, используя gremlin_python. Один из основных вопросов - это правильный способ инициализации объекта обхода графа.

  1. Могу ли я инициализировать свой обход g = traversal().withRemote(DriverRemoteConnection(...) и сохранять переменную обхода g между запросами? (Все запросы относятся к одному и тому же графику. Я попробовал это и начал периодически получать tornado.iostream.StreamClosedError.
  2. Второй вариант - создание обхода для каждого запроса. Я недостаточно хорошо разбираюсь в архитектуре python gremlin; есть ли существенные накладные расходы на выполнение этого запроса?

Спасибо


person Max Arbiter    schedule 27.04.2019    source источник


Ответы (1)


Gremlin Python - это реализация варианта языка Gremlin, см. http://tinkerpop.apache.org/docs/current/tutorials/gremlin-language-variants/.

Таким образом, он полагается на GremlinServer для выполнения обходов.

Назначение:

g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))

откроет подключение к серверу через веб-сокет. Не существует такой вещи, как «сохранение» путем сохранения копии этого соединения. Все механизмы сохранения происходят на стороне сервера. Я убедился в этом на собственном горьком опыте, когда попробовал следующий код:

from gremlin_python.process.anonymous_traversal import traversal
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
import os

g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))

# test loading a graph
def test_loadGraph():
   # make the local file accessible to the server
   airRoutesPath=os.path.abspath("air-routes-small.xml")
   # drop the existing content of the graph
   g.V().drop().iterate()
   # read the content from the air routes example
   g.io(airRoutesPath).read().iterate()
   vCount=g.V().count().next()
   assert vCount==1000

Приведенный выше код работает и загружает пример авиамаршрутов. Но это нарушает все другие тесты, поскольку теперь современный график по умолчанию для используемого сервера в упомянутом ниже руководстве исчез!

Вы можете открыть несколько подключений к серверу через веб-сокеты, но все они имеют одно и то же «состояние» нижележащего графа. Плохая новость заключается в том, что на это состояние непросто повлиять через API, что является преднамеренным решением текущей архитектуры. В настоящее время выполняется множество настроек yaml и файлов свойств, а также запуска и остановки серверов.

Мое предложение по улучшению https://issues.apache.org/jira/projects/TINKERPOP/issues/TINKERPOP-2294?filter=allopenissues основана на разочаровании, которое приносит этот подход.

Особенно разделяю ваше «я недостаточно хорошо разбираюсь в архитектуре gremlin python». ИМХО, это не потому, что у вас или у меня есть проблемы с пониманием этого, а потому, что это недостаточно объяснено. Тем более примеры отсутствуют. Вот почему я начал: http://wiki.bitplan.com/index.php/Gremlin_python - учебное пособие, призванное сделать начало работы с gremlin python менее болезненным.

person Wolfgang Fahl    schedule 20.09.2019