Оптимизация запроса для Топ 5% пользователей - PullRequest
0 голосов
/ 20 мая 2010

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

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

Как можно оптимизировать запрос для этой группы пользователей?

Можно предположить, что правильные индексы уже построены.

РЕДАКТИРОВАТЬ: Хорошо, я думаю, что я был слишком расплывчатым. Перефразируя вопрос, как я могу оптимизировать свой сайт для повышения производительности для этих 5% пользователей. Учитывая, что этот SPROC один и тот же, который используется для каждого пользователя и что он уже хорошо оптимизирован, я предполагаю, что следующие шаги - изучить возможности кэширования на уровне данных и приложений?

EDIT2: Единственное различие между моими опытными пользователями и остальными пользователями заключается в количестве добавленного материала. Так что я думаю, что узким местом является просто огромное количество записей, которые извлекаются. Обычный пользователь добавляет около 200 товаров на мой сайт. Эти опытные пользователи добавляют более 10000 предметов. В их профиле я показываю все элементы, которые они добавили (вы можете просматривать их).

Ответы [ 4 ]

3 голосов
/ 20 мая 2010

Я думаю, что вы подвели итог здесь:

Обычный пользователь добавляет около 200 предметов. на мой сайт. Эти опытные пользователи добавляют 10000 предметов. В их профиле я показывая все элементы, которые они добавили (вы можете просматривать их).

Реализовать пейджинг, чтобы он получал только 100 за раз или что-то еще?

1 голос
/ 20 мая 2010

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

1 голос
/ 20 мая 2010

Ну, вы не можете оптимизировать запрос для определенного набора результатов и оставить запрос для остальных без изменений. Если вы понимаете, о чем я. Я предполагаю, что нужно изменить только один запрос, поэтому вы оптимизируете его для каждого типа пользователей. Поэтому этот сценарий оптимизации ничем не отличается от любого другого. Выясните, в чем проблема; это слишком много данных, возвращаемых? Расчеты занимают слишком много времени из-за объема данных? Где именно причина замедления? Это те вопросы, которые вам нужно задать себе.

Однако я вижу, что вы говорите о медленных страницах профиля. Когда вы думаете, что запрос, который возвращает эту информацию, уже оптимизирован (поскольку он работает на 95%), вы можете рассмотреть некоторую форму кэширования содержимого страницы профиля. Как правило, страницы профиля не должны предоставлять информацию в режиме реального времени.

Кэширование может быть выполнено многими способами, слишком много, чтобы охватить этот ответ. Но, чтобы дать вам один маленький пример; Вы могли бы работать с временной таблицей. Ваш «запрос профиля» возвращает информацию из этой временной таблицы, информацию, которая уже рассчитана. Поскольку этот запрос будет простым, его выполнение не займет много времени. В то же время вы должны периодически обновлять временную таблицу.

Просто пара идей. Надеюсь, они вам пригодятся.

Edit:

Обычный пользователь добавляет около 200 товаров на мой сайт. Эти опытные пользователи добавляют более 10000 предметов. В их профиле я показываю все элементы, которые они добавили (вы можете прокрутить через них).

Очевидной помощью для этого будет ограничение количества результатов внутри запроса или применение формы нумерации страниц (в DAL, а не в UI / BLL!).

0 голосов
/ 20 мая 2010

Разделите / отделите данные для этих пользователей, тогда данные таблицы будут использоваться только ими.

В кластерной среде, я полагаю, SQL распознает это и распределяет нагрузку для компенсации, однако в среде с одним сервером я не совсем уверен, как это происходит при оптимизации.

Так по существу (конечно, очень упрощенно) ...

Если у вас есть таблица под названием «Статьи», у вас есть 2 таблицы ... «Статьи», «Top5PercentArticles». Поскольку данные теперь разделены на 2 меньших подмножества данных, индексы меньше, и запросы на чтение и запись для одной таблицы в базе данных будут отброшены.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...