реализовать алгоритм мгновенного поиска - PullRequest
3 голосов
/ 25 ноября 2010

Итак, я хотел бы знать, каков общий алгоритм реализации мгновенного поиска , который не с интенсивной нагрузкой.Не только в Интернете, но даже в приложении для рабочего стола / winforms.

Поправьте меня, если я не прав, но никто не может отправлять асинхронные вызовы при каждом нажатии клавиши, верно?(Не уверен , как Google Instant управляет этим ). Это создаст безумную нагрузку на базу данных / магазин и т. Д.

Я думал о чем-то вроде этого:

  1. Таймер срабатывания каждые xxx миллисекунды
  2. При пожаре, отключить ввод, отключить таймер и отправить асинхронный вызов для поиска.
  3. Когда вызов вернется, отобразите результаты, включите ввод, включите таймер

Это так обычно обрабатывается или есть лучший способ?

1 Ответ

2 голосов
/ 25 ноября 2010

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

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

На клиенте:

  • Когда текст поиска изменится, отправьте его на сервер.
  • Когда сервер отправляет некоторые результаты, обновите страницу.

На сервере при получении запроса от клиента:

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