neo4j cypher_优化Neo4j Cypher查询

neo4j cypher 上周,我花了很多时间来尝试优化大约20个使用实时系统数据执行的灾难性的Cypher查询(36866ms至155575ms)。 经过一番尝试和错误,以及来自Michael的大量投入,我能够大致确定对查询进行哪些操作才能使它们性能更好-最后,性能最差的查询降至521ms。冷图和1GB堆空间(并且该查询具有可选路径-不确定如何改进),其余都在50ms以下-与原始数字相比有很...
摘要由CSDN通过智能技术生成

neo4j cypher

上周,我花了很多时间来尝试优化大约20个使用实时系统数据执行的灾难性的Cypher查询(36866ms至155575ms)。 经过一番尝试和错误,以及来自Michael的大量投入,我能够大致确定对查询进行哪些操作才能使它们性能更好-最后,性能最差的查询降至521ms。冷图和1GB堆空间(并且该查询具有可选路径-不确定如何改进),其余都在50ms以下-与原始数字相比有很大改进。

希望这可能对其他人有所帮助,这就是我所做的事情(大多数是猜测工作,并且在很大程度上是不科学的)-也许Michael可以帮助解释内部原理,并根据某些假设对我进行纠正。 我要做的第一件事是确保每个密码查询都使用参数-如Neo4j文档中所述 ,这有助于缓存执行计划。

其次,我在Neo4j邮件列表中碰到了一个帖子,迈克尔在其中提到不重新实例化ExecutionEngine,以便上述参数化查询实际上可以缓存。 对于许多人来说,这似乎很明显,但这是一个容易被忽视的事实,因为我有一个名为QueryExecutor的类,该类包含一个执行带有参数映射的查询的方法,并且该方法为每个查询创建了一个新的ExecutionEngine。 一旦编写并多次使用了此方法,就很容易忘记。 但是,这是影响整体性能的一个非常重要的因素(文档中的提及将非常有帮助),它解释了为什么即使在参数化的情况下,我的查询通常也需要花费相同的时间来执行。 将其更改为使用缓存的ExecutionEngine,可以看到我的查询时间工作表的下半部分下降了……在缓存之后0到1毫秒-取得了出色的进展。

现在,要开始每个查询,从最坏的情况开始。 我决定在仅分配1GB堆空间的本地计算机上

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值