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

时间:2013-08-06 05:15:46

标签: graph neo4j cypher gremlin

如何获得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上查询这样巨大的图表时有一些经验?

2 个答案:

答案 0 :(得分:2)

在最大程度上,你也应该限制结果,因此密码只需保留前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>。 此过程是并行实现的,适用于大型图形。

答案 1 :(得分:1)

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