如果我这样做:
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
杀死它。
答案 0 :(得分:2)
您是否尝试过实施分页机制?也许使用skip关键字:http://neo4j.com/docs/stable/query-skip.html
与在postgres / mysql查询中使用limit / offset类似。
编辑:我之前说过整个结果集都存储在内存中,但是在使用api流时似乎并非如此 - 根据Nigel(Neo工程师)的评论。