Расширитель автозаполнения Ajax, заполненный из SQL - PullRequest
1 голос
/ 26 сентября 2008

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

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

Я вроде потерял какие-либо предложения ??

Ответы [ 4 ]

2 голосов
/ 26 сентября 2008

Почему бы не отслеживать запрос, выполненный пользователем, в переменной сеанса, а затем использовать его для фильтрации любых дальнейших результатов?

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

Что бы я сделал: сохраните текущий список, возвращаемый запросом для слова «сторона сервера», и свяжите его с переменной сеанса. Это должно быть в основном весь список, я думаю. Затем для каждого введенного нового слова, пока существует исходное слово A, вы можете отфильтровать информацию о сеансе и выплюнуть отфильтрованные результаты без необходимости повторного запроса. Таким образом, в основном, запросите снова, только когда слово A меняется.

Я использую «сессию» в смысле PHP, возможно, вы используете другой язык с другой терминологией, но концепция должна быть одинаковой.

2 голосов
/ 26 сентября 2008

Этот вопрос зависит от того, насколько транзакционным является ваше хранилище данных. Очевидно, что если вы ищете штаты США (сбор данных, который реально не изменится в течение всего жизненного цикла приложения), то я бы либо кэшировал тип System.Collection.Generic List <>, либо если вам нужен объект DataTable.

Вы можете легко настроить кэш данных, которые вы хотите запросить, чтобы они зависели от XML-файла или базы данных, чтобы ваш расширитель всегда запрашивал объект данных, приведенный из кеша, а объект кеша обновлялся только при изменении источника данных .

1 голос
/ 01 октября 2008

ОЗУ дешево, а SQL сложнее масштабировать, чем IIS, поэтому кешируйте все в памяти:

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

В зависимости от желаемого поведения и производительности автозаполнения вам может потребоваться предварительный расчет данных и создание избыточных структур, оптимизированных для чтения. Используйте структуры вроде SortedList (когда вам нужно что-то вроде 'select top x ..., где z как @query +'% '), Hashtable, ...

0 голосов
/ 07 июня 2009

Хотя кэширование - это, безусловно, хорошая идея, ваш вопрос о том, какую структуру данных использовать, - это вопрос, на который здесь не был дан полный ответ. Лучшей структурой данных для автозаполнения расширителя является Trie. Вы можете найти хорошую статью .NET и код здесь .

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