6

如何获取 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,我总是等待很长时间,当我发出上面的查询时得到“未定义”..

有没有人在使用 gremlin 或 cypher 在 neo4j 上查询如此巨大的图表时有一些经验?

4

2 回答 2

2

对于最大程度,您还应该限制结果,因此 cypher 只需要保留前 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

否则,我同意 Stefan 的观点。

今天你也可以使用call apoc.stats.degrees('TYPE') whereTYPE是关系类型,你也可以通过nullor<TYPETYPE>with 方向。这个过程是并行实现的,适用于大图。

于 2013-08-06T11:59:16.600 回答
1

这实际上是一项非常昂贵的全球业务。在这种情况下,您最好使用使用GlobalGraphOperations.getAllRelationships. 在迭代所有关系期间,您构建一个 Map 并增加每个关系的开始和结束节点的计数器。最后一步是找到地图中的最大值。

于 2013-08-06T07:58:51.167 回答