У нас большие проблемы с производительностью запросов в 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));
}
Спасибо за любую помощь
Actualy lazy loading didnt решить проблему, в настоящее время мы изменили двунаправленную связь с однонаправленной и реализуем дополнительные запросы. Все еще работает в progres :) – dilindul
Заключение заключается в том, что ObjectDB не является источником проблемы. Двусторонние отношения должны быть, безусловно, лучше реализованы стандартным образом. – dilindul