我想在neo4j中用py2neo计算一个很大的图中的中间度。
我使用的密码查询如下:
MATCH p=allShortestPaths((source:DOLPHIN)-[*]-(target:DOLPHIN))
WHERE id(source) < id(target)
AND length(p) > 1
UNWIND nodes(p)[1..-1] as n
RETURN n.name, count(*) as betweenness
ORDER BY betweenness DESC它适用于小图,但不工作于有100万节点的大图。我使用py2neo传递了这个查询。
早些时候,我得到了错误超时,这已经解决了,但现在运行了一段时间后,它是说查询不能处理。我收到以下错误:-
File "/usr/local/lib/python2.7/dist-packages/py2neo/cypher/core.py", line 111, in execute
results = tx.commit()
File "/usr/local/lib/python2.7/dist-packages/py2neo/cypher/core.py", line 306, in commit
return self.post(self.__commit or self.__begin_commit)
File "/usr/local/lib/python2.7/dist-packages/py2neo/cypher/core.py", line 261, in post
raise self.error_class.hydrate(error)
py2neo.cypher.error.statement.ExecutionFailure: The statement has been closed.我已经搜了很多遍了。请帮我处理这个
发布于 2015-04-21 15:26:30
我不能评论你用来给作者排序的算法/方法。最终,您正在运行的查询是一个完整的图搜索,带有一些聚合。Neo4j不是为这种情况而设计的。随着数据的增加,运行查询将更加困难。
理想情况下,查询应该只遍历图的一小部分。因此,对于您的情况,不需要问谁是最受欢迎的,您可以在每个查询中询问每个作者的排名。为所有这些人做这件事,一次一次,然后自己对他们进行排名,在这里可能会更好。除非您采取不同的方法,例如限制相邻节点的遍历范围,或者限制最长路径的长度,甚至两者兼而有之。但我怀疑这会影响你的结果。
我建议你根据你的需要重新审视你的领域模型,并根据你的计算方法,找出一个可以帮助你轻松回答问题的设计模型,比如谁是最受欢迎的作者。再检查一遍,确保你在使用索引,以防万一。
用neo4j建模:
有时候,最简单的模型并不能帮助我们回答某些问题;我不得不自己重新建模几次,并将关系转换为用于时态数据排序的节点,因为它在第一次出现时并不明显。不管怎样,我希望你能找到解决办法。
干杯
https://stackoverflow.com/questions/29643983
复制相似问题