Hibernate多线程会减慢我的应用程序

时间:2017-09-07 13:21:48

标签: java mysql multithreading hibernate

我正致力于数据可视化。我有一个MySQL数据库,java后端,js前端。我通过Hibernate访问数据库。 我需要检索几个mio。来自数据库的行,以便正确显示它们。

初始问题:整个过程大约需要20-30秒

这不是非常人性化,所以我需要缩短时间! 我查看了漫长的等待时间来自哪里,它肯定是从DB接收的数据:当我想在MySQLWorkbench中使用纯SQL而不是Hibernate检索相同的数据时,它几乎需要相同的时间。

因此,后端的数据处理不是问题,它首先获取数据。

我尝试用多线程解决这个问题 我读到了使用多线程和hibernate的常见问题并试图避免它们,但我仍然觉得我忽略了一些重要的东西。

这是我到目前为止所尝试的内容:
在应该返回所有数据以供进一步处理的方法中我有

 some code...
 for(int i = 0; i <= numberOfThreads; i++) {
     Runnable r = new Runnable() {
        @Override
        public void run() {
             try{
                 someDataStructure = HibernateUtil.executeHqlCustom(hql, 
                       lowerLimit, stepSize);
             }catch(someException){
                  ...
             }
        }
     };
     r.run();
     r = null;
 }
 return someDataStructure;

“executeHqlCustom”创建会话,创建查询,使用 setFirstResult 设置下限并使用 setMaxResult 设置每个线程应该的数据量负责(这样就应该以块的形式收到数据) 会议结束。

我尝试了很多不同的组合(从DB的每一行中的几个线程到1个线程(我知道这很荒谬!)但是最后使用没有多线程总是比其他所有更快我刚才描述的选项。

我还尝试使用一个自己的类来实现Runnable / extends Thread,并将boolean标志作为实例变量,以便在不再需要时将线程设置为null。

这些都不是更好。

就像我说的,我99%肯定我忽略了一些非常重要的东西,或者我误解了多线程的一些概念(我对此很新)。

感谢任何帮助!

0 个答案:

没有答案