Тип и поиск, как улучшить производительность? - PullRequest
0 голосов
/ 20 ноября 2010

Я хочу реализовать что-то вроде поиска в вики, когда я хочу найти «яблоко», я набираю «а», оно показывает слова, начинающиеся с «а» ... Я знаю, что оно может реализовать, когда я печатаю, я отправьте SQL-запрос для поиска статьи, начинающейся с "a", но когда все больше и больше запросов запрашивают, это становится медленным ... ... Есть ли какая-либо техника снижения производительности при выполнении такого рода вещей? Спасибо.

Ответы [ 3 ]

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

На стороне сервера вы должны кэшировать результаты, в идеале в памяти (например, Memcached).Поэтому, если 10 человек нажмут «а», это будет только один запрос к базе данных и 9 сверхбыстрых данных из памяти.

Что касается оптимизации пропускной способности, вы должны отправить свои данные в формате JSON или, альтернативно, несколько раз.пользовательский формат данных.Смотрите эту удивительную статью: Построение быстрого поиска на стороне клиента

1 голос
/ 20 ноября 2010

Не уверен, какую версию SQL вы используете, но есть несколько предположений:

  • У вас есть индекс в поле, которое вы ищете
  • Вы возвращаете только необходимое поле(как заголовок), а не SELECT *

Я бы посоветовал подумать об уменьшении числа возвращаемых строк в зависимости от размера поискового запроса, например: (псевдокод, не знаюваш диалект SQL)

if len(searchString)<=3
   select top 50 title from table order by title
else
   select title from table order by title

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

0 голосов
/ 20 ноября 2010

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

Так что, если я хочу найти слово и быстро набрать "w", "o", "r", "d", вы только сделаете один запрос и, очевидно, сможете оптимизировать этот запрос SQL

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