Память сеанса JSP? - PullRequest
       6

Память сеанса JSP?

2 голосов
/ 07 декабря 2010

Мне нужно подтвердить теорию.Я изучаю JSP / Java.

Посмотрев на существующее приложение (я не писал), я заметил кое-что, что, как мне кажется, вызывает нашу проблему с производительностью.Или хотя бы некоторые из них.

Работает так:

1) пользователь открывает страницу поиска.

2) страница поиска (по умолчанию) сбрасывает ВСЕ СТРОКИ.329 000 из них.Да.329K.В ArrayList.Каждый элемент в ArrayList представляет собой пользовательский JavaBean, связанный с таблицей БД.

3) Затем ArrayList передается в PaginateResultSet.

4) Тогда PaginateResultSet (prs) (329k строк)хранится в переменной сеанса: session.setAttribute ("resultSet", prs);

5) Каждая дополнительная «Следующая страница» затем получает 20 строк из getAttribute («resultSet») и отправляет их в сетку данных Ext.

Хорошо, теперь я ошибаюсь, полагая, что гигантский набор результатов хранится в памяти СЕРВЕРА для каждого потока каждого пользователя?Так что, если этот набор результатов занимает 20 мегабайт оперативной памяти, и у нас 20 одновременных пользователей, у нас теперь 400 мегабайт, взятых с сервера?

Разве не плохая идея передавать ТАК много данных в атрибутах сеанса??

Спасибо за любые указатели.

1 Ответ

3 голосов
/ 07 декабря 2010

Это безусловно плохая идея дублировать все содержимое таблицы БД в память Java, не говоря уже о сеансе пользователя в многопользовательской среде.

Вам нужно разбить на страницы на уровне БД и сохранить только интересующие строки в области запроса. Как именно это сделать, зависит от интерфейса БД и используемой БД. Если вы используете базовый JDBC, вы можете найти этот ответ полезным. Для ядра Hibernate или JPA см. этот ответ .

...