Spring Data Query Execution Optimization:在JpaRepository中并行执行Hibernate @Query方法

Spring Data Query Execution Optimization:在JpaRepository中并行执行Hibernate @Query方法,第1张

概述我有一个仪表板视图,它需要来自整个数据库的表的小数据集.我优化了数据库查询(例如删除的子查询).现在有大约20个查询一个接一个地执行,它们从数据库中获取不同的数据集.大多数HQL查询都包含GROUP BY和JOIN子句.使用Spring REST接口,结果将返回到前端.如何优化自定义查询的执行?我最初的想法是并行运行数据库查询.但是我该如何实现呢?在做了一些

我有一个仪表板视图,它需要来自整个数据库的表的小数据集.我优化了数据库查询(例如删除的子查询).现在有大约20个查询一个接一个地执行,它们从数据库中获取不同的数据集.大多数HQL查询都包含GROUP BY和JOIN子句.使用Spring REST接口,结果将返回到前端.

如何优化自定义查询的执行?我最初的想法是并行运行数据库查询.但是我该如何实现呢?在做了一些研究后,我找到了注释@Async,这使得并行运行方法成为可能.但这是否适用于Hibernate方法?是否总是为JpaRepository中使用@query注释的每个方法创建一个新的数据库会话?运行数据库查询是否会对总体执行时间产生影响?

另一种并行运行数据库调用的方法是将Dashboard调用拆分为几个单独的AJAX调用(每个关注点都有自己的AJAX调用).我不想这样做,因为每次打开仪表板(或者例如更改日期范围)时,都会进行另外20次AJAX调用以获取新数据.同样的问题仍然存在:并行运行SQL查询是否会影响数据库的执行时间?

我目前还没有向数据库添加其他索引.这将是下一件事,我肯定会这样做.但是,我对并行运行查询的性能影响以及如何使用Spring以编程方式实现此问题感兴趣.

我的项目最初是由jHipster(Spring Boot,MariaDB,AngularJs等)生成的.

最佳答案首先,并行运行这些sql不会影响数据库,它只会使页面加载更快,因此设计应该关注它.

我发布这个答案假设你已经确定你不能组合这20个sql,因为数据是无关的(没有连接,视图等).

我建议不要使用@Async有两个原因.

原因1 – 当您想要解雇一堆任务并忘记,或者当您知道所有任务何时完成时,异步任务就很棒.因此,您需要“等待”完成所有异步任务.你要等多久?直到最慢的查询完成?

检查此示例代码是否为Async(来自指南@ spring.io —https://spring.io/guides/gs/async-method/)

// Wait until they are all donewhile (!(page1.isDone() && page2.isDone() && page3.isDone())) {     Thread.sleep(10); //10-millisecond pause between each check}

您的/服务组件是否应该等待20个异步DAO查询?

原因2 – 请记住,异步只是作为一个线程产生任务.由于您将使用JPA,请记住实体管理器不是线程安全的. DAO类将传播事务.以下是可能出现问题的一个例子 – http://alexgaddie.blogspot.com/2011/04/spring-3-async-with-hibernate-and.html

恕我直言,最好继续进行多个AJAX调用,因为这将使您的组件具有凝聚力.是的,您将拥有20个端点,但它们将具有更简单的DAO,更简单的sql,易于单元测试,并且返回的数据结构将更容易由AngularJs小部件处理/解析.当UI触发所有20个AJAX调用时,仪表板将在准备好时加载各个小部件,而不是同时加载所有小部件.这将通过优化仪表板的较慢加载部分(可能是缓存,索引等)来帮助您将来扩展您的设计.

捆绑DAO调用只会使数据结构变得复杂,并且单元测试更加困难.

总结

以上是内存溢出为你收集整理的Spring Data Query Execution Optimization:在JpaRepository中并行执行Hibernate @Query方法全部内容,希望文章能够帮你解决Spring Data Query Execution Optimization:在JpaRepository中并行执行Hibernate @Query方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存