繁体   English   中英

具有巨大图形(百万个节点和链接)的Neo4j上的节点度查询

[英]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<TYPETYPE>方向。 此过程并行实现,适用于大型图形。

事实上,这是一项非常昂贵的全球运作。 在这种情况下,您可能最好使用使用GlobalGraphOperations.getAllRelationships非托管扩展 在迭代所有关系的过程中,您会构建一个Map并为每个关系的起始和结束节点递增计数器。 最后一步是在地图中找到最大值。

暂无
暂无

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

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