2011-01-30 6 views
0

Предположим, у меня есть сайт, на котором страница отчетов будет содержать ежедневные ежедневные отчеты.используя сеансы: я злоупотребляю им?

По умолчанию пользователь приземляется на текущий отчет, но затем, если он нажмет на элемент управления календарем и выберет новую дату, на этот день будет загружен новый отчет. Я хочу использовать сеансы как кеш для отчетов. В первый раз, когда он загружает отчет в течение дня, он загружается из базы данных в сеанс, а затем из сеанса на страницу. Каждый раз, когда он загружает новый отчет для даты, логика сначала проверяет, находится ли этот конкретный отчет в сеансе, и только если он не загружен из БД. Отчет содержит около 15 столбцов и состоит из примерно 300-500 строк в день. То, что будет храниться в сеансе, - это словарь списков объектов, с датой в качестве ключа и списка в качестве значения. Я использую сессию InProc. Я также рассматриваю возможность хранения нескольких других словарей, а также для других списков объектов.

Является ли это эффективным способом максимально использовать инфраструктуру .net? Если на самом деле это не улучшит производительность перед вызовом источника данных, будет ли он работать медленнее? Я собираюсь создать что-то, что будет масштабироваться примерно до 500-1000 одновременных пользователей или около того.

Спасибо.

+0

Являются ли отчеты конкретными для каждого пользователя? –

+0

Вы используете сессию inproc? – Victor

+0

yes, inproc session – frenchie

ответ

2

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

Разве ваши пользователи выразили обеспокоенность по поводу производительности?

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

+0

Я делаю первую сборку. Я просто думаю, что эта проблема возникнет, потому что отчет играет важную роль в приложении и будет называться много раз. Я хочу не возвращаться к БД, чтобы получить те же данные. Я также думаю о том, чтобы сбрасывать отчеты в XML-файлах на конец сеанса и загружать их оттуда в начале сеанса. Мысли? – frenchie

+2

@frenchie Это именно то, что я говорю. Проводите ли какие-либо тесты производительности, чтобы убедиться, что у вас есть проблема? Тесты нагрузки? Всегда лучше измерять сначала, а не просто догадываться. Если вы запустите тесты, чтобы выяснить, где ваша система работает медленно, вы можете узнать что-то совершенно иное, чем то, о чем вы сейчас думаете. Что делать, если вызов базы данных не замедляет вас вообще, это то, что вложенное в цикл вы забыли рефакторировать в своей части ORM и т. Д. И т. Д. Вы не узнаете ни одной из этих вещей до тех пор, пока не будете измерены. – Joseph

+0

Мог ли делать то, что я обсуждаю, вызывают проблемы с производительностью? – frenchie

0

есть поразительные различия между кэшем и состояния сеанса:

  • кэш сервер на основе, но сеанс пользователя на основе (может быть на нескольких серверах)
  • Кэш обычно основан на URL-адресе , если URL-адрес для всех пользователей одинаковый, это невозможно реализовать через кеш.
  • кэш будет переработан и память отозвана, когда сервер находится близко к из памяти (так вы не получите OutOfMemory исключения, используя кэш), но сеанс только растет, и вы получите OutOfMemory, если вы используете в процессе сеансов и не.
  • Сессия обычно используется для состояния пользовательского уровня, которое необходимо сохранить, но кеш предназначен для повышения производительности.

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

+0

Данные, которые я собираюсь ввести в сеанс, зависят от пользователя. Если я реализую то, что я обсуждаю, как вы думаете, это может негативно повлиять на производительность? Я ищу для создания приложения, которое первоначально будет поддерживать до 500 одновременных пользователей, прежде чем создавать архитектурные изменения. Благодарю. – frenchie

Смежные вопросы