Разница в производительности между использованием статического контента IIS и выборкой данных из SQL Server Jquery WCF - PullRequest
2 голосов
/ 17 мая 2011

У нас есть портал, разработанный в ASP .Net и размещенный на сервере Windows 2008 IIS, доступ к которому осуществляется глобально (вне сети) более чем 200 000 человек, из которых 40% одновременно.

  1. В части портала нам нужно будет показывать уведомления, специфичные для пользователя

    (ежедневно может быть более 50 уведомлений, которые будут содержать, скажем, 20 строк представленного контента, отображаемого в HTML)

  2. уведомления могут быть получены на сервере в виде файлов XML (в режиме реального времени или по расписанию).

  3. мы хотим создать этот высокоэффективный образец архитектуры

  4. Дайте мне знать, какой из предметов будет соответствовать тому же.

1 Ответ

1 голос
/ 18 мая 2011

Ах, это напоминает мне кое о чем, что я делал в моем предыдущем запуске Pageflakes. Нам приходилось выдавать оповещения, уведомления отдельным пользователям и позволять каждому пользователю отмечать их как прочитанные.

Во-первых, мы думали сделать это обычным способом. создать таблицу уведомлений, имеющую идентификатор пользователя, заголовок уведомления и флаг чтения. Но это сильно фрагментируется со временем, становится все медленнее и медленнее, и индексы необходимо перестраивать и т. Д., Поскольку миллионы уведомлений добавляются / обновляются / удаляются.

Итак, мы выбрали альтернативу. Мы добавили таблицу уведомлений с идентификатором пользователя, но в ней есть гигантский столбец char, в котором содержится XML, содержащий все уведомления, которые может видеть пользователь. Поскольку вам никогда не нужно выполнять поиск среди пользователей, один пользователь всегда будет смотреть только на уведомления этого пользователя. Это означает, что таблица уведомлений может в худшем случае иметь такое же количество строк, что и пользовательская таблица, и никогда больше. И мы не добавляем / не обновляем / не удаляем строки в этой таблице часто, поэтому нет проблем с фрагментацией БД, перестроением индекса и т. Д.

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

Notification:
=============
UserID int FK to user table
RecentNotifications  char(4000)
ArchivedNotifications char(4000)

В RecentNotifications вы храните XML, содержащий уведомления, которые необходимо показать пользователю. Архивные уведомления содержат архивные сообщения, которые пользователь может видеть, когда пользователь переходит на какую-либо страницу уведомлений.

Вы можете использовать xml для его хранения:

<notifications>
  <notification title="" datetime="" read="yes/no" />
</notifications>

Это отвечает на ваш вопрос?

...