Какой объем данных сеанса приложения вы на самом деле можете хранить?

StackOverflow https://stackoverflow.com/questions/150739

Вопрос

В настоящее время у меня есть приложение, которым ежедневно пользуются более 20 000 пользователей, и в основном они просматривают одну таблицу данных.Эта таблица данных заполнена примерно 20 строками, но извлекается из "datatable" базы данных с 200 000-600 000 записями информации в таблице. Редактировать: Эти 20 строк являются "динамическими" и изменяются, если пользователь вводит какую-либо информацию через текстовое поле.

В настоящее время я также храню данные пользователя вместе с данными профиля.

В настоящее время я делаю около 4 обратных вызовов каждый раз, когда отображается datatable, и я не могу сократить его до 1 вызова.

Вопрос: Мне было интересно, смогу ли я на самом деле заполнять состояние приложения каждые 5 секунд 200 000-600 000 строками данных, и действительно ли это ускорит работу системы? Редактировать: что касается динамических строк, которые вводит пользователь или любой другой пользователь, то содержимое необходимо часто обновлять.

Вопрос 2: Сколько я на самом деле могу хранить в кэше приложения, и при этом мне все равно сойдет с рук, что это происходит быстрее?

Редактировать: Поскольку более 20 000 пользователей получают доступ к этим 200 000 строкам, мне нужно было бы кэшировать их все или, по крайней мере, я думаю, что это наилучшие практики.Когда пользователь заходит на мой сайт, это одна из главных страниц, на которую он просматривает и, вероятно, возвращается 2-5 раз за посещение.

Редактировать: Пользователь действительно видит уникальный набор из 20 строк, который мог бы отличаться от любых других 20 строк, которые видят пользователи.Это ОЧЕНЬ динамичный сайт, на котором пара разных строк может обновляться примерно раз в секунду.

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

Это было полезно?

Решение

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

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

  2. Как вы планируете искать что-то в таком количестве строк?Сервер базы данных выполняет за вас большой объем поиска и сортировки за кулисами.Они используют несколько довольно сложных алгоритмов, которые вы потеряете, если будете кэшировать данные на веб-сервере.

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

Другие советы

Вы говорите, что они в основном просматривают одну таблицу, и эта таблица содержит от 200 до 600 тысяч строк.Как часто вытаскивают этот стол?Является ли это сценарием типа "домашняя страница", когда пользователи в основном просматривают первую страницу данных?Зачем кэшировать все 200 тысяч строк, почему бы не кэшировать первые 20?

Вы уверены, что хотите сохранить это в состоянии сеанса?Я бы предпочел Состояние приложения если они используют одну и ту же базу данных, таким образом, в памяти будет сохранен только один набор данных.

Я думаю, что лимит памяти контролируется IIS.Есть такие Максимальный объем виртуальной памяти и Максимально используемая память пределы.Не забудьте проверить доступность данных.

Проверьте это: Настройка ASP.NET Приложений в режиме изоляции рабочих процессов (IIS 6.0)

Можете ли вы пояснить для меня - вы говорите, что пользователь получает таблицу данных из 20 записей, которая уникальна для этого пользователя и является результатом запроса таблицы 600K?Являются ли записи статичными для пользователя?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top