Web 应用程序中的 Gremlin Python
Gremlin Python in Web Application
我有一个 python flask web 应用程序,它正在使用 gremlin_python
查询 Janus 图数据库。一个基本问题是初始化图遍历对象的正确方法。
- 我可以初始化我的遍历
g = traversal().withRemote(DriverRemoteConnection(...)
并在请求中保留遍历变量 g
吗? (所有请求都针对同一张图。我尝试了这个并开始间歇性地获得 tornado.iostream.StreamClosedError
。
- 第二个选项是为每个请求创建一个遍历。我不太了解 gremlin python 架构;每个请求执行此操作是否有大量开销?
谢谢
Gremlin Python 是 Gremlin 语言变体实现,请参阅 http://tinkerpop.apache.org/docs/current/tutorials/gremlin-language-variants/。
因此它确实依赖 GremlinServer 来执行遍历。
作业:
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
将打开到服务器的 websocket 连接。通过保留该连接的副本,没有 "persisting" 这样的东西。持久性机制都发生在服务器端。当我尝试以下代码时,我很难发现这一点:
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
以上代码有效并加载了航线示例。但它打破了所有其他测试,因为现在下面提到的教程中使用的服务器的默认现代图已经消失了!
您可以打开多个到服务器的 websocket 连接,但它们都共享相同的 "state" 底层图形。坏消息是,通过 API 影响此状态并不容易,这是当前架构的故意决定。目前有很多配置 yaml 和 properties 文件以及涉及的启动和停止服务器。
我的改进建议 https://issues.apache.org/jira/projects/TINKERPOP/issues/TINKERPOP-2294?filter=allopenissues 是基于这种方法带来的挫败感。
特别是我分享你的"I do not understand the gremlin python architecture well enough"。恕我直言,这不是因为你或我在理解上有问题,而是因为它解释不够好。特别是缺少示例。这就是我开始的原因:http://wiki.bitplan.com/index.php/Gremlin_python - 一个旨在让 gremlin 入门 python 不那么痛苦的教程。
我有一个 python flask web 应用程序,它正在使用 gremlin_python
查询 Janus 图数据库。一个基本问题是初始化图遍历对象的正确方法。
- 我可以初始化我的遍历
g = traversal().withRemote(DriverRemoteConnection(...)
并在请求中保留遍历变量g
吗? (所有请求都针对同一张图。我尝试了这个并开始间歇性地获得tornado.iostream.StreamClosedError
。 - 第二个选项是为每个请求创建一个遍历。我不太了解 gremlin python 架构;每个请求执行此操作是否有大量开销?
谢谢
Gremlin Python 是 Gremlin 语言变体实现,请参阅 http://tinkerpop.apache.org/docs/current/tutorials/gremlin-language-variants/。
因此它确实依赖 GremlinServer 来执行遍历。
作业:
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
将打开到服务器的 websocket 连接。通过保留该连接的副本,没有 "persisting" 这样的东西。持久性机制都发生在服务器端。当我尝试以下代码时,我很难发现这一点:
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
以上代码有效并加载了航线示例。但它打破了所有其他测试,因为现在下面提到的教程中使用的服务器的默认现代图已经消失了!
您可以打开多个到服务器的 websocket 连接,但它们都共享相同的 "state" 底层图形。坏消息是,通过 API 影响此状态并不容易,这是当前架构的故意决定。目前有很多配置 yaml 和 properties 文件以及涉及的启动和停止服务器。
我的改进建议 https://issues.apache.org/jira/projects/TINKERPOP/issues/TINKERPOP-2294?filter=allopenissues 是基于这种方法带来的挫败感。
特别是我分享你的"I do not understand the gremlin python architecture well enough"。恕我直言,这不是因为你或我在理解上有问题,而是因为它解释不够好。特别是缺少示例。这就是我开始的原因:http://wiki.bitplan.com/index.php/Gremlin_python - 一个旨在让 gremlin 入门 python 不那么痛苦的教程。