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

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

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

Благодарю вас

0 ответов

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 менее болезненным.

Другие вопросы по тегам