Вопрос

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

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

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

Итак, что лучше в данном случае:a плоский файл система или База данных?

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

Решение

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

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