ЗдесьАвтор: unkis
Дата: 07.06.07
обсуждают производительность больших апдейтов. Хотелось бы рассмотреть и вопрос больших выборок.
Criteria criteria = session.createCriteria(Some.class);
criteria.setFetchSize(1000);
List<Some> entries = (List<Some>) criteria.list();
for (Some entry : entries)
{
// делаем нечто
}
При этом похоже выборка в процессе обработки таки закачивается целиком в память. Профайлером пока не смотрел, каюсь (нету дома), но, судя по запросам этого куска во время выполнения (хотелось уменьшить -Xmx, чтобы не платить много хостеру), аппетит кода несравнимо больше, чем 1000 записей. Внутри цикла формируется ByteArrayOutputStream с итоговым размером < 10М, а выполнение кода требует 320М (записей в выборке ~100000).
В hibernate.cfg.xml установлено <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>. Код выполняется под Tomcat.
Вроде criteria.scroll должен помочь, однако он возвращает результат в неудобном формате.
Здравствуйте, dimok@, Вы писали:
D>ЗдесьАвтор: unkis
Дата: 07.06.07
обсуждают производительность больших апдейтов. Хотелось бы рассмотреть и вопрос больших выборок.
D>D> Criteria criteria = session.createCriteria(Some.class);
D> criteria.setFetchSize(1000);
D> List<Some> entries = (List<Some>) criteria.list();
D> for (Some entry : entries)
D> {
D> // делаем нечто
D> }
D>
D>При этом похоже выборка в процессе обработки таки закачивается целиком в память. Профайлером пока не смотрел, каюсь (нету дома), но, судя по запросам этого куска во время выполнения (хотелось уменьшить -Xmx, чтобы не платить много хостеру), аппетит кода несравнимо больше, чем 1000 записей. Внутри цикла формируется ByteArrayOutputStream с итоговым размером < 10М, а выполнение кода требует 320М (записей в выборке ~100000).
D>В hibernate.cfg.xml установлено <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>. Код выполняется под Tomcat.
D>Вроде criteria.scroll должен помочь, однако он возвращает результат в неудобном формате.
А как насчет setFirstResult и setMaxResults + цикл (если помнишь у нас такое было в BeanQuery
)? Плюс можно использовать stateless session она никаких entity в себе не хранит.