Neo4J / py2neo - 基于游标的查询?

时间:2015-02-17 10:06:40

标签: python neo4j py2neo

如果我这样做:

from py2neo import Graph
graph = Graph()
stuff = graph.cypher.execute("""
    match (a:Article)-[p]-n return a, n, p.weight
""")

在包含大量文章和链接的数据库上,查询需要很长时间并使用我所有系统的内存,大概是因为它将整个结果集一次性复制到内存中。是否有某种基于游标的版本,我可以一次迭代一次结果,而不必将它们全部存入内存中?

修改

我找到了stream函数:

stuff = graph.cypher.stream("""
    match (a:Article)-[p]-n return a, n, p.weight
""")

这似乎是我想要的根据文档,但现在我得到一个超时错误(py2neo.packages.httpstream.http.SocketError: timed out),然后服务器变得无法响应,直到我使用kill -9杀死它。

1 个答案:

答案 0 :(得分:2)

您是否尝试过实施分页机制?也许使用skip关键字:http://neo4j.com/docs/stable/query-skip.html

与在postgres / mysql查询中使用limit / offset类似。

编辑:我之前说过整个结果集都存储在内存中,但是在使用api流时似乎并非如此 - 根据Nigel(Neo工程师)的评论。