0

我有一个由数百万个断开连接的子图组成的图。现在我试图找到所有这些子图的节点数。例如,假设我有这个包含 ABC、DE、FGH 的图表。所以回报将是 3, 2, 3。

现在我可以使用以下查询来做到这一点:

MATCH (n) CALL apoc.path.subgraphNodes(n, {}) YIELD node WITH n , count(node) as nodesnum return nodesnum

但是它非常慢并且根本不适合具有数百万个节点的图,因此我想知道这是否可以以更快的方式完成。

4

2 回答 2

0

您可以像这样使用 size()

MATCH (n) return n.id, size((n)-[*]-()) limit 100

这使用投影而不是将所有节点都调用到内存中,并且加载速度更快!请注意,如前面针对您的示例所述,第一个子图将获得 A、3 B、3 C、3 等。

于 2018-10-18T01:28:06.237 回答
0

您可能想查看使用 Neo4j 图形算法库,因为连接的组件过程可能会执行您想要的操作:

连接组件或联合查找算法在无向图中查找连接节点集,其中每个节点都可以从同一集中的任何其他节点到达。

有几种方法可以使用它,从流式传输结果到将分区属性写入节点以供以后使用。

这是流式传输的示例,返回集合的 id 和集合的节点数,对节点的标签或关系类型没有限制:

CALL algo.unionFind.stream('', '', {})
YIELD nodeId,setId
RETURN setId, count(nodeId) as count
于 2018-10-18T19:43:25.533 回答