ajaxified авто предлагают - PullRequest
0 голосов
/ 06 февраля 2009

У меня есть модуль поиска с функцией автоматического предложения для построения в ASP.Net Критерием поиска является Имя тренинга, и в базе данных есть таблица, в которой хранятся тренинги. Размер таблицы может составлять до 30 000 тренировок, поэтому я должен быть очень осторожен при выборе подхода, учитывая производительность.

В систему могут одновременно заходить около 3000 пользователей. Когда пользователь начинает вводить имя для обучения, система должна автоматически ввести его.

Подходы, которые приходили мне в голову, были такими же, как и при

  1. Объект кэширования - после того, как пользователь введет 3 (например, saf) символа, произойдет попадание в базу данных, и система будет искать в таблице действий все тренировки, начинающиеся с saf, и будет их кэшировать. Другие запросы будут отправлены в этот кеш. Но проблема с этим подходом заключалась бы в том, что если бы в системе было 3000 одновременно работающих пользователей, и если они все искали разные комбинации из 3 разных букв, кэш просто сдул бы.

  2. Кэширование на стороне клиента - не особо задумывался над этим. Единственный недостаток, который я вижу здесь, это то, что нам, возможно, придется периодически очищать временную папку в Интернете.

  3. Использование сеанса - я подумал полностью исключить это, так как думал, что это снизит производительность.

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

Большое спасибо

Deepa.

Ответы [ 4 ]

1 голос
/ 06 февраля 2009

Мой любимый плагин jQuery для этого (если вы собираетесь использовать jQuery) - это Flexbox .

У него действительно впечатляющий список возможностей.

0 голосов
/ 06 февраля 2009

Ваше сообщение действительно содержит два вопроса:

  1. Как я могу получить автозаполнение на своей веб-странице?
  2. Я обеспокоен производительностью из-за большого количества запросов, одновременно попадающих в мою базу данных.

Мои ответы ...

1: мы обнаружили, что ASP.NET AJAX AutoComplete Extender хорошо работает во всех современных браузерах, обеспечивает удобство работы и довольно прост в реализации.

В вашем веб-приложении вам нужно создать веб-сервис, в котором есть метод с определенной сигнатурой (описан в документации, указанной выше).

2: Вы доказали, что у вас действительно есть узкое место в производительности с этой частью вашего проекта? Я бы порекомендовал настроить тестовый набор и добавить в вашу базу данных большое количество запросов на автозаполнение, чтобы узнать, сколько это может занять. Остерегайтесь преждевременной оптимизации .

0 голосов
/ 06 февраля 2009

Я думаю, ваш первый подход будет работать.

Убедитесь, что на поле есть индекс - вам, вероятно, не нужно будет индексировать все поле. Это должно дать базу приличный импульс. Вам может понадобиться посмотреть на полнотекстовое индексирование в зависимости от того, как работает ваш поиск, или даже использовать внешнюю библиотеку, такую ​​как lucene, для индексации - это проблема производительности.

Кэшируйте объект или даже полученный xml / json из запросов для повышения производительности.

Вам также следует установить заголовки http, чтобы браузеры также кэшировали xml / json.

0 голосов
/ 06 февраля 2009

Вы можете использовать плагин jQuery Auto Complete , который имеет встроенные функции кэширования.

$(document).ready(function()
{
        $(".landingpage").autocomplete('/AutoSuggestHandler.ashx',
        {
            minChars: 1,
            matchSubset: 1,
            autoFill: false,
            delay: 10,
            scroll: false
        }).result(OnResultSelected);
}

Кроме того, вы можете указать кэширование outpu в универсальном обработчике, чтобы удовлетворить потребность в кэшировании между пользователями.

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