如何获得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上查询这样巨大的图表时有一些经验?
答案 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
或<TYPE
或TYPE>
。
此过程是并行实现的,适用于大型图形。
答案 1 :(得分:1)
事实上,这是一项非常昂贵的全球运营。在这种情况下,您最好使用使用unmanaged extension的GlobalGraphOperations.getAllRelationships
。在迭代所有关系期间,您构建一个Map并为每个关系的起始和结束节点递增计数器。最后一步是在地图中找到最大值。