首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Neo4j中的多级路径遍历更快

如何使Neo4j中的多级路径遍历更快
EN

Stack Overflow用户
提问于 2019-01-07 18:59:45
回答 1查看 164关注 0票数 0

我想找到从叶节点(E)到根节点(A)的所有路径。(不适用于任何特定节点,因此此处没有id或字段筛选器)

数据模型如图像所示。

我使用了一个基本的Cypher查询来查找路径(A到E):

代码语言:javascript
复制
MATCH path=(:A)-[:USE*]->(:E) RETURN path

--它一直在运行,从未完成。--

我尝试使用以下方法获取从C到E的路径:

代码语言:javascript
复制
MATCH path=(:C)-[:USE*]->(:E) RETURN path

这是查询,最多需要18秒才能返回18k路径。我试过使用扫描,但在时间上没有改进。

如何改进这个遍历以在较短的时间内返回结果?我要在4-5秒内得到结果。

系统配置:

系统内存为32 is

储存: SSD

电流Neo4j Conf:

堆大小:初始值-12 max最大值-12 max

缓存:12

数据库大小: 1.6GB

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-07 21:17:06

如果您的DB路径具有很大的可变性(例如,C节点并不总是后面跟着D节点),但是您知道您总是想要一个特定的路径模式(例如A->B->C->D->E),那么指定显式模式应该要快得多:

代码语言:javascript
复制
MATCH path=(:A)-[:USE]->(:B)-[:USE]->(:C)-[:USE]->(:D)-[:USE]->(:E)
RETURN path

可变长度的路径模式是昂贵的,因为它们具有指数复杂性(基于路径的深度)。

更新

即使您感兴趣的DB路径没有任何可变性(例如,从AE的路径总是类似于A->B->C->D->E),但是包含这些路径的路径更长(例如,如果E节点有较长的传出USE路径),那么没有上限的可变长度路径模式将迫使neo4j测试所有这些传出路径。在这种情况下,如果您仍然希望使用可变长度的路径模式,那么应该指定一个固定的上界,因为您知道感兴趣的路径的确切长度(在本例中为4):

代码语言:javascript
复制
MATCH path=(:A)-[:USE*..4]->(:E) RETURN path
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54080242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档