загрузка памяти mysql из прямого поиска javascript
-
28-10-2019 - |
Вопрос
Я выполняю поиск в реальном времени через текстовое поле, которое, когда пользователь вводит, возвращает соответствующие строки из базы данных 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.Скорость индексирования много, если правильно использовать.