为什么neo4j在这个密码查询上如此缓慢?
我有一个相当深的树,它由一个初始“事务”节点(称为树的第0层)组成,从该节点到下一个节点(称为树的第1层)有50条边,然后从平均约35条边到第二层,依此类推 初始节点是一个为什么neo4j在这个密码查询上如此缓慢?,neo4j,cypher,Neo4j,Cypher,我有一个相当深的树,它由一个初始“事务”节点(称为树的第0层)组成,从该节点到下一个节点(称为树的第1层)有50条边,然后从平均约35条边到第二层,依此类推 初始节点是一个:txnEvent,其余所有节点都是:mEvent mEvent节点有4个属性,其中一个称为channel\u name 现在,我想检索下到第4层的所有路径,以便这些路径包含一个channel\u name==a和channel\u name==B 此查询: match (n: txnEvent)-[r:TO*1..4]-&g
:txnEvent
,其余所有节点都是:mEvent
mEvent
节点有4个属性,其中一个称为channel\u name
现在,我想检索下到第4层的所有路径,以便这些路径包含一个channel\u name==a
和channel\u name==B
此查询:
match (n: txnEvent)-[r:TO*1..4]->(m:mEvent) return COUNT(*);
告诉我,只有<>代码> 1667444 /代码>要考虑的路径。
但是,以下查询:MATCH p = (n:txnEvent)-[:TO*1..4]->(m:mEvent)
WHERE ANY(k IN nodes(p) WHERE k.channel_name='A')
AND ANY(k IN nodes(p) WHERE k.channel_name='B')
RETURN
EXTRACT (n in nodes(p) | n.channel_name),
EXTRACT (n in nodes(p) | n.step),
EXTRACT (n in nodes(p) | n.event_type),
EXTRACT (n in nodes(p) | n.event_device),
EXTRACT (r in relationships(p) | r.weight )
执行几乎需要1分钟(neo4j的UI位于端口7474上)
对于完整性,neo4j告诉我:
"Started streaming 125517 records after 2 ms and completed after 50789 ms, displaying first 1000 rows."
所以我想知道我是否有明显的遗漏。顺便说一下,节点具有的所有属性都已编制索引。是查询速度慢,还是速度快而流媒体速度慢
UDATE:
此查询不返回数据流:
MATCH p = (n:txnEvent)-[:TO*1..4]->(m:mEvent)
WHERE ANY(k IN nodes(p) WHERE k.channel_name='A')
AND ANY(k IN nodes(p) WHERE k.channel_name='B')
RETURN
COUNT(*)
需要35秒,所以即使速度更快,大概是因为没有返回数据,我觉得还是相当慢
更新2:
理想情况下,这些数据应该放在带有python内核的jupyter笔记本中。感谢您的配置文件计划 请记住,您请求的查询很难处理。由于您希望路径中至少有一个节点具有一个属性,而路径中至少有一个其他节点具有另一个属性,因此无法在扩展期间修剪路径。相反,必须确定每一条可能的路径,然后必须访问160万条路径中的每一条路径中的每一个节点,以检查属性(对于每一条路径,这两个属性都必须执行两次)。因此,滤波器操作的命中率约为1000万db 您可以尝试扩展堆和页面缓存大小(如果您有空闲的RAM),但我看不到任何简单的方法来调优此查询
至于您关于查询时间与流媒体的问题,问题在于查询本身。您看到的消息意味着第一个结果被非常快地找到,因此第一个结果几乎立即就在流中准备好了。结果在找到时会添加到流中,但需要匹配和筛选的路径数量在扩展期间无法修剪路径,这意味着查询需要很长时间才能完成。在扩展计划的所有元素后,您可以截取查询的配置文件计划吗?完成!请看我的编辑,谢谢。