首页 文章

JPA查询ObjectDB的性能问题

提问于
浏览
0

我们在ObjectDB中的查询性能存在很大问题,这是我们的代码 . 任何帮助,将不胜感激 .

查询的第一个版本为数据库中的前40个记录提供50ms的结果,而查询40个记录的第二个版本给出19秒 . 我们指出,从他的53个记录表现显着下降 . 在其他查询阈值是不同的,可能由于结果的大小(可能与相关对象的数量有关)

First version of code.

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“objectdb://10.10.10.14/E_POLICIJA.odb; user = admin; password = admin”); // $ NON-NLS-1 $

em = emf.createEntityManager();


         long startTime;
         long endTime;

         startTime = System.currentTimeMillis();

          int i = 0;
          while(i < 40){
              TypedQuery<AktImpl> queryAkt =
                  em.createQuery("SELECT e FROM AktImpl e", AktImpl.class);

              queryAkt.setFirstResult(i);
              queryAkt.setMaxResults(20);
              queryAkt.getResultList();
              i += 20; 
          }

          endTime = System.currentTimeMillis();
        System.out.println((endTime - startTime));
    }

Second version of code

EntityManagerFactory emf =
                    Persistence.createEntityManagerFactory("objectdb://10.10.10.14/E_POLICIJA.odb;user=admin;password=admin"); //$NON-NLS-1$

           em = emf.createEntityManager();


         long startTime;
         long endTime;

         startTime = System.currentTimeMillis();

          int i = 0;
          while(i < 60){
              TypedQuery<AktImpl> queryAkt =
                  em.createQuery("SELECT e FROM AktImpl e", AktImpl.class);

              queryAkt.setFirstResult(i);
              queryAkt.setMaxResults(20);
              queryAkt.getResultList();
              i += 20; 
          }

          endTime = System.currentTimeMillis();
        System.out.println((endTime - startTime));
    }

谢谢你的帮助

1 回答

  • 0

    发现该问题是在该特定应用程序中定义的循环渴望关系,其需要递归地使用查询结果加载许多对象 .

    解决方案是将关系设置从急切变为懒惰 .

    更多细节可以在this forum thread找到 .

相关问题