【发布时间】:2017-07-25 03:06:08
【问题描述】:
我有一个由数百万个断开连接的子图组成的图。现在我试图找到所有这些子图的节点数。例如,假设我有这张图,其中包含 A-B-C、D-E、F-G-H。所以回报将是 3, 2, 3。
现在我可以使用以下查询来做到这一点:
MATCH (n) CALL apoc.path.subgraphNodes(n, {}) YIELD node WITH n , count(node) as nodesnum return nodesnum
但是它非常慢并且根本不适合具有数百万个节点的图,因此我想知道这是否可以以更快的方式完成。
【问题讨论】:
-
如果您不能针对特定节点...这总是会很慢,因为您正在读取整个数据库。我确实想知道为什么您会期望有“另一种更快的方式”?顺便说一句...您上面的示例查询将返回... 3, 3, 3, 2, 2, 3, 3, 3 ... 它计算每个节点的子图。
-
@TomGeudens 是的,你是对的。我更改了查询以添加“图形着色”,如果它们已被访问,则在子图中标记节点。但它仍然无济于事,因为标记需要一些时间。
-
很公平。它确实不会有太大的不同。你没有定位(我不明白你怎么能给出你的模型),因此至少遍历整个数据库一次。
标签: neo4j cypher neo4j-apoc