2013-02-15 5 views
2

Приложение на основе MVC, перехватывает некоторые веб-службы, которые отправляют много данных! Используя то же самое, я просматриваю свои взгляды. Веб-службы медленны и не поддаются контролю. Итак, я хотел бы сохранить эту информацию за сеанс, но я боюсь, что это снизит мой веб-сервер на колени. С несколькими сотнями пользователей веб-сервер будет исчерпан.Хранить большие объемы данных за сеанс ASP.NET MVC

Есть ли способ сохранить данные сеанса в файле за сеанс? Я больше смотрю на некоторые из открытых решений с открытым исходным кодом.

Я приветствую, новое предложение, а также!

+1

Но почему вы не хотите использовать кеширование? – Maris

+0

@Maris: Эти данные не изменяются очень часто, но представления, которые используют эти данные, отображаются много раз! – Nauman

+0

@Maris: Кэширование на данный момент не является опцией, поскольку данные являются специфичными для пользователя, а Session, на мой взгляд, является правильным кандидатом для таких данных. – Nauman

ответ

2

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

Если вы имеете дело только с несколькими МБ данными, их сохранение в объекте Session (или Cache, как предлагает @Rick) не обязательно является серьезной проблемой. Как только данные будут возвращены из веб-службы и проанализированы в ваши собственные внутренние структуры данных, просто поместите объект корня структуры данных в сеанс. Я использую этот метод довольно часто, чтобы хранить результаты запросов к базе данных, которые занимают много времени, особенно если критерии запроса вряд ли будут часто меняться.

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

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

+0

Решение на базе БД является дополнительной зависимостью. Который я не готов инвестировать. Но, если ничего не работает, я могу быть вынужден пойти этим путем! :( – Nauman

+1

Базы данных настолько обычны в наши дни, что я не склонен думать о них как о проблеме. Вы можете использовать что-то вроде [csharp-sqlite] (http://code.google.com/p/csharp-sqlite /), если вы не хотите настраивать полную базу данных SQL-сервера. – Corey

1

Кэширование - ваш друг. И так как вы используете технологию MS, вы можете взглянуть на the Cache Class

+0

Кэширование также будет иметь ту же проблему, если только это не в памяти! Кроме того, эти данные специфичны для пользователя! Итак, на мой взгляд, сессия лучше всего подходит. Но большие данные - моя забота. – Nauman

+0

Итак? Используйте пользователь/сеанс в качестве ключа кэша и выберите память/диск в качестве хранилища данных. Он по-прежнему называется кэшированием. – Rick

0

Вы можете просто сериализовать сборник результатов и сохранить его на файлах в виде xml (даже обрабатывать его с помощью linq/XPath непосредственно из XML) или использовать любую собственную базу данных .net для хранения и сохранения данных в файле.

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