问题:
python循环的每次迭代都会向Neo4j发送一个返回值的密码查询。这需要相当长的时间,并且是瓶颈,因为循环项目的数量为50或更多。
环境
- windows服务器2019
- Neo4j服务器版本:3.5.9(社区(
- python 3.6
- Neo4j python驱动程序4.2.1
问题
一次调用自定义存储过程会比客户端重复请求Neo4j更快吗
详细信息
将向存储过程传递所有50项的密码参数,并需要返回全部的结果。
好吧,如果您可以重构代码以对存储过程进行一次调用,这意味着您也可以重构以生成一个Cypher查询并处理结果应用程序端。
也许存储过程会更快,因为您可以利用JVM多线程。
然而,使用存储过程也有一些缺点:
- 当存储过程的代码发生更改时,您需要重新部署并重新启动Neo4j
- 您需要维护它并使用新的Neo4j版本进行升级
- 这意味着您可以用Java编写它们
我很少看到使用存储过程来提高性能(这种情况确实存在,但它有一些利基用例(。
正如您所说,瓶颈是查询数据库的循环,我会先尝试解决这个问题。
其次,Neo4j的性能通常由三个主要因素处理:
- 您能够很好地对图形建模,以便优化查询
- 您调整Cypher查询的能力
- 您的索引配置正确
在使用Neo4j的过程中,99.99%的问题将通过以上3点得到解决。