Оптимизация hibernate-коллекций
От: dimok@  
Дата: 09.06.07 08:10
Оценка:
Здесь
Автор: 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 должен помочь, однако он возвращает результат в неудобном формате.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.