Сколько данные сессии слишком много?

Мы сталкиваемся с необычно проблемами использования верхней памяти. И я заметил, что много мест в нашем коде мы вытягиваем 100 с записей от DB, упаковывая его в пользовательских объектах данных, добавляя его к arraylist и храним на сессии. Я хочу знать то, что является рекомендуемыми данными хранящего верхнего предела на сессии. Просто хорошая практика плохой вид практики вещи.

Я использую JRockit 1.5 и 1.6 ГБ RAM. Я сделал профилирование с Jprobe и нашел, что некоторые части приложения имеют очень тяжелый объем потребляемой памяти. Большинство этих данных в сессию, которая будет использоваться позже.

5
задан Ravi Gupta 22 January 2010 в 10:52
поделиться

7 ответов

, который полностью зависит от того, сколько сеансов обычно присутствуют (что, в свою очередь, зависит от того, сколько у вас есть пользователей, как долго они остаются на сайте, и время ожидания сеанса) и сколько баран сервер имеет.

Но в первую очередь: вы фактически использовали Profiler Memory, чтобы сказать вам, что ваша «использование высокой памяти» вызвана данными сеанса, или вы просто догадаетесь?

Если только проблема, которую у вас есть «высокая память» Использование «На производственной машине (т. Е. Это может справиться с производственной нагрузкой, но не выполнять, как и вам хотелось), самое простое решение состоит в том, чтобы получить больше RAM для сервера - намного быстрее и дешевле, чем переработать приложение.

Но кэширование целых наборов результатов на сессии тоже плохо для разных причин: что, если данные изменяются в БД, и пользователю ожидает, что это изменение? Если вы собираетесь кэш, используйте одна из существующих систем , которые делают это на уровне запроса DB - они позволят вам кэшировать результаты между пользователями, и у них есть объекты для аннулирования кэша.

6
ответ дан 18 December 2019 в 09:50
поделиться

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

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

6
ответ дан 18 December 2019 в 09:50
поделиться

Нет, HTML5 не будет иметь функций, которые не имеет возможности XHTML, потому что он определяет XHTML5 в том же документе.

-121--3723825-

Я бы сказал, что это сильно зависит от количества активных сессий, которые вы ожидаете. Если вы пишете приложение INTRATENT с помощью <20 пользователей, это, безусловно, нет проблем, чтобы поставить несколько МБ на сеансе. Тем не менее, если вы ожидаете, что вы ожидаете, что 5000 живых сеансов, каждая MB данных, хранящихся на сеанс, составляет 5 ГБ ОЗУ.

Тем не менее, я, как правило, рекомендую не хранить какие-либо данные из БД в сеансе. Просто сделайте из БД за каждый запрос. Если производительность представляет собой проблему, используйте кэш-память на приложении (например, 2-й уровень уровня Hibernate).

1
ответ дан 18 December 2019 в 09:50
поделиться

Что это данных? Это действительно необходимо за сеанс или может быть кэшируется на уровне применения? Вам действительно нужны все столбцы или только подмножество? Как часто это добраться? На каких страницах это нужно быть доступно? И так далее.

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

1
ответ дан 18 December 2019 в 09:50
поделиться

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

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

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

1
ответ дан 18 December 2019 в 09:50
поделиться

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

1
ответ дан 18 December 2019 в 09:50
поделиться

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

1
ответ дан 18 December 2019 в 09:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: