Gremlin-Python绑定

时间:2018-04-07 11:12:47

标签: python-3.x tinkerpop3

我开始研究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中提到的语法。我错过了什么吗?

enter image description here

  • python3
  • tinkerpop 3.3.1
  • neo4j 3.3

1 个答案:

答案 0 :(得分:3)

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

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,因此您不会看到使用绑定的性能提升。

那就是说,你的遍历应该仍然适用于这种情况,你不应该得到错误。我会假设您提交脚本,但是当您收到此错误时,我无法想到除此之外您还有什么结果。如果不是这样,我可以尝试进一步扩展。