Вывести большой xml из набора результатов - PullRequest
3 голосов
/ 07 марта 2011

У нас есть приложение, в котором строка XML создается из сохраненного набора результатов proc и преобразуется с использованием XSLT для возврата к вызывающему сервлету. Это хорошо работает с меньшим набором данных, но вызывает ошибку нехватки памяти с большим объемом данных. Каким будет идеальное решение в этом случае?

Ответы [ 3 ]

3 голосов
/ 07 марта 2011

XSLT-преобразования, как правило, требуют загрузки всего набора данных в память, поэтому проще всего получить больше памяти.

Если вы можете переписать свой XSLT, есть потоковые преобразования для XML, которые позволяютдля пошаговой обработки данных.

1 голос
/ 07 марта 2011

Несколько важных вещей для заметки.

Вы упомянули, что нормально работают функционально с небольшим набором данных, но не хватает памяти с большими наборами данных.вам необходимо определить, является ли его создание наборов данных причиной нехватки памяти или переносом наборов данных в один и тот же процесс.

Вы делаете что-то, что заставляет множество объектов оставаться в памяти.Еще раз проверьте свой код и обнулите некоторые объекты после использования. Это облегчит жизнь сборщику мусора.Играйте с настройками MaxPermSize JVM.Это даст вам дополнительное пространство для строк.

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

Предложение, которое может работать для вас.

  • Разбейте это в асинхронном процессе. Сделайте создание больших наборов данных отдельным процессом, а загрузку этих наборов данных - другим процессом.

  • Делая наборы данных доступными для загрузки, вы можете очень хорошо контролировать потребление памяти с помощью потоковой загрузки.

1 голос
/ 07 марта 2011

Если вы обрабатываете весь XML-документ одновременно, похоже, вам нужно выделить больше памяти для кучи Java. Но это работает только до определенного максимального размера кучи. Знаете ли вы разумный максимальный размер набора данных или он неограничен?

Зачем вам нужна база данных для генерации XML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...