Балансировка нагрузки сервера / клиента для поиска автозаполнения - PullRequest
1 голос
/ 10 января 2011

В предисловии я работаю с Google App Engine, который не позволяет JOINS или полнотекстовый поиск.

Проблема: Я пытаюсь создать автозаполнение панель поиска (например, Google Instant Search). Для объяснения предположим, что каждая запись в базе данных представляет собой большую строку без пробелов. Если я наберу "cr", я получу помощь по автозаполнению со всеми строками, которые начинаются с "cr". Я нашел способ добиться этого поиска в Google App Engine, но кажется ужасной идеей отправлять запрос на сервер каждый раз, когда нажимается клавиша в строке поиска ввода.

Я думаю, что комбинация кэширования на стороне клиента и на стороне сервера может помочь сделать это эффективно? У кого-нибудь есть идеи? Или просто советы о лучших практиках? Благодарю.

Ответы [ 2 ]

1 голос
/ 11 января 2011

Возможно, вы могли бы сделать что-то вроде «запросить максимум 50 опций» при каждом нажатии клавиши или каждую 1 секунду, в зависимости от того, что случается реже. Я думаю, что серия почтовых запросов была бы хорошим решением.

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

0 голосов
/ 11 января 2011

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

...