Ajax запросы / ответы: как сделать их молниеносно? - PullRequest
11 голосов
/ 10 декабря 2010

Я наткнулся на сайт, который делает что-то очень похожее на Google Suggest. Когда вы вводите 2 символа в поле поиска (например, «ca», если вы ищете продукты «canon»), оно делает 4 запроса Ajax. Кажется, что каждый запрос выполняется менее чем за 125 мс. Я случайно заметил, что Google Suggest принимает 500 мс или более.

В любом случае оба сайта работают быстро. Каковы общие концепции / стратегии, которым необходимо следовать для получения сверхбыстрых запросов / ответов? Спасибо.

РЕДАКТИРОВАТЬ 1: кстати, я планирую реализовать функцию автозаполнения для поиска на сайте электронной коммерции, где он: 1) предлагает подсказки для поиска в зависимости от того, что набирается, и 2) список возможных совпадений товаров на основе что было набрано до сих пор. Я пытаюсь найти что-то похожее на поиск в SLI Systems (см., Например, http://www.bedbathstore.com/).

Ответы [ 4 ]

9 голосов
/ 10 декабря 2010

Это вопрос типа «как долго это кусок строки», и поэтому я делаю это вики-сообществом ответом & mdash; все могут свободно прыгать на нем.

Я бы сказал, что вопрос в том, чтобы:

  1. Сервер / ферма серверов / облако, к которому вы обращаетесь, имеет правильный размер в соответствии с нагрузкой, которую вы к нему прикладываете, и / или может изменить свой размер в соответствии с этой нагрузкой
  2. Сервер / серверная ферма / облако подключены к хорошей быстрой сетевой магистрали
  3. Структуры данных, которые вы запрашиваете на стороне сервера (таблицы базы данных или что-то еще), настроены для максимально быстрого ответа на эти точные запросы
  4. Вы не делаете ненужных запросов (HTTP-запросы могут быть дорогими в настройке; вы хотите избегать запуска четырех из них, когда один будет делать); Вы, вероятно, также хотите добавить немного управления гистерезисом (задержка запроса во время набора текста, отправка только через несколько секунд после их остановки и сброс этого тайм-аута при повторном запуске)
  5. Вы отправляете по проводам как можно меньше информации, которую можно разумно использовать для выполнения работы
  6. Ваши серверы настроены на повторное использование соединений (HTTP 1.1), а не на их восстановление (в большинстве случаев это будет по умолчанию)
  7. Вы используете правильный тип сервера; если сервер имеет большое количество запросов поддержки активности, он должен быть спроектирован так, чтобы обрабатывать это корректно (например, NodeJS предназначен для этого; Apache, в частности, нет, хотя, конечно, это чрезвычайно способный сервер)
  8. Вы можете кэшировать результаты для общих запросов, чтобы избежать ненужного обращения к базовому хранилищу данных
2 голосов
/ 10 декабря 2010

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

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

select
  q.search
from
  previousqueries q
where
  q.search LIKE 'ca%'
group by
  q.search
order by
  count(*) DESC
limit 1

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

1 голос
/ 10 декабря 2010

Эта ссылка объясняет, как они сделали мгновенный просмотр быстро .Весь сайт highscalability.com является очень информативным сайтом.

Кроме того, вы должны хранить все в памяти и избегать извлечения данных с диска (медленно!).Redis, например, молниеносно!

1 голос
/ 10 декабря 2010

Вы можете начать с быстрого поиска вашей продукции. Проверьте Lucene для полнотекстового поиска. Он доступен для PHP, Java и .NET среди других.

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