Gremlin-Python 绑定

Gremlin-Python Bindings

我开始研究bindings,似乎它会提高常用查询的速度,我就去尝试了。

我的查询很简单:

g.V(('id', 1))

但它不起作用

File "/home/galaxia/PycharmProjects/helloworld/venv/lib/python3.5/site-packages/gremlin_python/driver/protocol.py", line 106, in data_received
    "{0}: {1}".format(status_code, data["status"]["message"]))
gremlin_python.driver.protocol.GremlinServerError: 597: startup failed:
Script19.groovy: 1: expecting ')', found ',' @ line 1, column 10.
   g.V(('id', 1))
            ^

我觉得我遵循了 doc 中提到的语法。我错过了什么吗?


我需要先澄清一些事情。您是否将 g.V(('id', 1)) 作为脚本发送到 Gremlin 服务器,例如:

client = Client('ws://localhost:8182/gremlin', 'g', pool_size=1)
client.submit("g.V(('id', 1))").all().result()

或者您正在使用远程遍历,例如:

>>> graph = Graph()
>>> g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
>>> g.V(('id', 1))

如果您要发送脚本,那么您没有正确使用绑定。您链接到的文档是针对后一种方法的,如果您使用该语法尝试前者,我想您会遇到该特定错误。如果你想对脚本使用绑定,那么你会想要这样做:

client = Client('ws://localhost:459408182/gremlin', 'g', pool_size=1)
client.submit("g.V(id)", {'id':1}).all().result()

对于这种用法,您会发现性能有显着提高。

现在,如果您正在执行后者并使用远程遍历,那么首先要了解的是,文档并未完全清楚说明性能改进是什么。目前,只有当您的遍历包含 lambda 时,性能增强才会与绑定一起出现。这本来应该是一个临时限制,但从未进一步实施(尽管在撰写本文时正在对其进行检查)。因此,由于您的遍历(在此示例中)没有 lambda,因此您不会看到使用绑定的性能提升。

就是说,您上面的遍历在这种情况下应该仍然有效,并且您不应该收到错误。我将假设您在收到此错误时正在提交脚本,因为我想不出您还可以如何以其他方式结束此输出。如果不是这样,我可以尝试进一步扩展。