Вопрос

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

У меня php игнорирует любой поисковый запрос длиной менее 3 символов, но что еще я мог сделать?

Здесь есть несколько вариантов: Оптимизация поиска в реальном времени в Javascript

Но мне было интересно, следует ли мне извлекать из кешированного XML-листа или есть какой-то способ кэшировать сам mysql.

Что делает Google или некоторые другие крупные сайты, которые в значительной степени используют эту функцию?

Это было полезно?

Решение

Я бы попытался максимально оптимизировать SQL-запрос:

  • нет SELECT *
  • не ПРИСОЕДИНЯТЬСЯ
  • используйте WHERE только в индексированных полях

Также на стороне PHP:

  • кэшировать результаты поиска по наиболее часто используемым словам (чем чаще обновляются данные для поиска, тем короче время жизни кеша) в простых текстовых файлах.
  • используйте redis, если возможно, memcached

Также рассмотрите возможность параллельной базы данных NoSQL

И

Zend_Search_Lucene отлично подходит для сайтов с низким / средним трафиком (по имеющимся данным, есть проблемы при масштабировании)

Другие советы

Используйте механизмы индексирования для индексации ваших данных и ускорения результатов поиска. Например: http://sphinxsearch.com/ или http://lucene.apache.org/core/

Настройте задание cron для индексации данных, есть PHP API для sphinx и модуль Zend Framework.Скорость индексирования много, если правильно использовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top