[英]node degree query on Neo4j with huge graph ( million nodes and links)
如何获得Neo4j上每个节点的程度,然后找出哪个节点在一个非常大的图形中具有最大程度(200万个节点和500万个关系)?
我知道我可以使用Cypher或Gremlin实现这一目标,例如:
start n = node(*)
match (n)--(c)
return n, count(*) as connections
order by connections dsec
要么
g.V.bothE
但是我的计算机只有2G~4G的RAM,我总是等待很长时间,并在上面发出查询时得到“未定义”。
有没有人在使用gremlin或cypher在neo4j上查询这样巨大的图表时有一些经验?
在最大程度上,您还应该限制结果,因此密码只需保留前10个结果。
START n = node(*)
MATCH (n)--(c)
RETURN n, count(*) as connections
ORDER BY connections DESC
LIMIT 10
或者你可以这样做:
START n = node(*)
RETURN n, length((n)--(c)) as connections
ORDER BY connections DESC
LIMIT 10
否则我同意斯特凡的观点。
今天你也可以使用call apoc.stats.degrees('TYPE')
,其中TYPE
是关系类型,你也可以传递null
或<TYPE
或TYPE>
方向。 此过程并行实现,适用于大型图形。
事实上,这是一项非常昂贵的全球运作。 在这种情况下,您可能最好使用使用GlobalGraphOperations.getAllRelationships
的非托管扩展 。 在迭代所有关系的过程中,您会构建一个Map并为每个关系的起始和结束节点递增计数器。 最后一步是在地图中找到最大值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.