我开始研究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中提到的语法。我错过了什么吗?
答案 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,因此您不会看到使用绑定的性能提升。
那就是说,你的遍历应该仍然适用于这种情况,你不应该得到错误。我会假设您提交脚本,但是当您收到此错误时,我无法想到除此之外您还有什么结果。如果不是这样,我可以尝试进一步扩展。