2014-01-15 4 views
0

У нас большие проблемы с производительностью запросов в ObjectDB, это наш код. Любая помощь будет оценена по достоинству.Проблема с производительностью запросов JPA с ObjectDB

Первая версия запроса дает результат в 50 мс для первых 40 записей из базы данных, а вторая версия, которая запрашивает 40+ записей, дает 19 секунд. Мы отметили, что из его рекордных показателей значительно ухудшается. По другим запросам порог различен, возможен из-за размера результатов (вероятно, связанных с количеством связанных объектов)

Первая версия кода.

EntityManagerFactory эдс = Persistence.createEntityManagerFactory ("ObjectDB: //10.10.10.14/E_POLICIJA.odb; пользователь = администратор, пароль = администратор"); // $ 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)); 
    } 

Вторая версия кода

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

Спасибо за любую помощь

ответ

0

Проблема оказалось круговыми нетерпеливыми отношениями, определенный в это конкретное приложение, которое требовало рекурсии загрузки многих объектов с результатами запроса.

Решение было изменить настройку отношений от нетерпеливого к ленивому.

Подробнее см. В this forum thread.

+0

Actualy lazy loading didnt решить проблему, в настоящее время мы изменили двунаправленную связь с однонаправленной и реализуем дополнительные запросы. Все еще работает в progres :) – dilindul

+0

Заключение заключается в том, что ObjectDB не является источником проблемы. Двусторонние отношения должны быть, безусловно, лучше реализованы стандартным образом. – dilindul

Смежные вопросы