繁体   English   中英

py2neo查询计算中间误差

[英]py2neo query for calculating betweenness error

我想使用py2neo在neo4j中计算一个非常大的图中的中间性。

我正在使用这样的密码查询:

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.

我已经搜索了很多。 请在这件事上给予我帮助

对于您用来对作者进行排名的算法/方法,我无法发表评论。 最终,您正在运行的查询是一个完整的图形搜索,并带有一些聚合。 Neo4j并非针对此类情况设计。 随着数据的增加,运行查询将变得更加困难。

理想情况下,查询应仅遍历图的一小部分。 因此,对于您的情况,您可以询问每个查询的每个作者的排名,而不是询问最受欢迎的人。 一次对所有这些执行一次,然后自己对它们进行排名可能会更好。 除非您采用其他方法,否则不要限制要遍历的相邻节点的范围,最长路径的长度,甚至是两者都不能。 但我怀疑这会影响您的结果。

我建议您根据需要重新考虑您的领域模型,并根据您的计算方法,找出一个可以帮助您轻松回答问题的设计模型,例如谁是最受欢迎的作者。 并仔细检查以确保使用索引,以防万一。

用neo4j建模:

有时,最简单的模型无法帮助我们回答某些问题。 我不得不自己进行几次重塑,并将关系转换为用于时间数据排序的节点,因为第一次就不那么明显了。 无论如何,我希望您能找到解决方案。

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM