Viewstate в плоских файлах против viewstate в SQLserver - PullRequest
2 голосов
/ 11 октября 2009

Я написал свой собственный класс PageStatePersister на основе SessionPageStatePersister, который записывает самые последние 10 Viewstate сессий для общего диска. Я полагаю, что это масштабируется лучше, чем сохранение Viewstate в сеансе, поскольку все веб-серверы имеют к нему доступ, им не придется иметь дело с истечением срока действия и использовать меньше памяти.

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

  1. Каждый файл ViewState имеет в среднем 30 КБ.
  2. В настоящее время он просто читает скрытое поле, чтобы получить ключ Viewstate, получить прямой доступ к файлу и десериализацию. Там нет необходимости сортировать или искать.
  3. Каждый час будет около 2000 одновременных пользователей, а сохранение последних 20 сеансов Viewstate будет составлять около 20 тыс. Временных файлов просмотра в час.
  4. Он должен периодически перебирать файлы и удалять самый старый файл.

Что лучше в этом случае: система flatfile или база данных ?

1 Ответ

3 голосов
/ 11 октября 2009

Было бы гораздо лучше сохранить ViewState в SQL Server. Например, если вы захотите увеличить его с 10 самых последних до 50 самых последних, это будет относительно тривиальным увеличением нагрузки на БД. Дискового ввода-вывода обычно следует избегать всякий раз, когда это возможно, более того, чем ввод-вывод БД. Операции очистки также будут работать намного лучше, так как поиск в пустом пространстве заброшенных файлов на диске, вероятно, намного тяжелее, чем WHERE DateInserted > 20 minutes ago.

...