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

Graph Neo4j上的节点度查询,具有巨大的图形(百万个节点和链接),graph,neo4j,cypher,gremlin,Graph,Neo4j,Cypher,Gremlin,如何获得Neo4j上每个节点的阶数,然后在一个非常巨大的图(200万个节点和500万个关系)中找出哪个节点的阶数最大 我知道我可以使用Cypher或Gremlin来实现这一点,比如: start n = node(*) match (n)--(c) return n, count(*) as connections order by connections dsec 或 但是我的电脑内存只有2G~4G,我总是等待很长时间,当我发出上面的查询时会得到“未定义” 有没有人有使用gremlin或c

如何获得Neo4j上每个节点的阶数,然后在一个非常巨大的图(200万个节点和500万个关系)中找出哪个节点的阶数最大

我知道我可以使用Cypher或Gremlin来实现这一点,比如:

start n = node(*) 
match (n)--(c)
return n, count(*) as connections
order by connections dsec

但是我的电脑内存只有2G~4G,我总是等待很长时间,当我发出上面的查询时会得到“未定义”


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

这实际上是一项非常昂贵的全局操作。在这种情况下,您最好使用使用。在迭代所有关系的过程中,您将构建一个映射,并为每个关系的开始和结束节点增加计数器。最后一步是在地图中找到最大值。

对于最大值,您还应该限制结果,因此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
否则我同意斯特凡的观点

今天,您还可以使用
调用apoc.stats.degrees('TYPE')
如果
TYPE
是关系类型,您还可以传递
null
或带方向的

这个过程是并行实现的,对于大型图形效果很好。

谢谢Michael,我完全忘记了“限制”。无论如何,非常感谢你们两位。顺便问一下,我想知道是否有一些节点没有链接,那么如果我按ascend订购,结果会怎样?它是显示“0”还是跳过它?在第二个命令中,我在靠近
(c)
的第2行中得到语法错误,如果您将其替换为
()
,它就会工作。你不需要它的名字
START n = node(*)
RETURN n, length((n)--(c)) as connections
ORDER BY connections DESC
LIMIT 10