0

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

查询的第一个版本在 50 毫秒内给出来自数据库的前 40 条记录的结果,但查询 40 多条记录的第二个版本给出 19 秒。我们指出,从他的 53 记录性能显着下降。在其他查询阈值不同,可能由于结果的大小(可能与相关对象的数量有关)

第一个版本的代码。

EntityManagerFactory emf = Persistence.createEntityManagerFactory("objectdb://10.10.10.14/E_POLICIJA.odb;user=admin;password=admin"); //$非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));
    }

第二版代码

           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));
    }

谢谢你的帮助

4

1 回答 1

0

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

解决方案是将关系设置从渴望更改为懒惰。

更多细节可以在这个论坛帖子中找到。

于 2014-01-17T13:12:12.700 回答