Gremlin Python в веб-приложении
У меня есть веб-приложение с флягой Python, которое запрашивает граф базы данных Janus с помощью gremlin_python
, Одним из основных вопросов является правильный способ инициализации объекта обхода графа.
- Могу ли я инициализировать мой обход
g = traversal().withRemote(DriverRemoteConnection(...)
и сохранить переменную обходаg
через запросы? (Все запросы относятся к одному графику. Я попробовал это и начал получатьtornado.iostream.StreamClosedError
с перерывами. - Второй вариант - создать обход для запроса. Я недостаточно хорошо понимаю архитектуру 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 менее болезненным.