Mysql Memory Charge de Javascript Live Search
-
28-10-2019 - |
Question
J'exécute une recherche en direct via une zone de texte que lorsqu'un utilisateur tape, il renvoie des lignes correspondant à une base de données MySQL. Le problème est que c'est l'une des principales caractéristiques du site et a vraiment augmenté la charge de mémoire sur ma base de données MySQL. Parce que chaque tour de clé envoie une demande au script PHP pour interroger la base de données.
J'ai PHP ignorer tout terme de recherche de moins de 3 caractères, mais en plus de quoi pourrais-je faire d'autre?
Il y a quelques options ici:Optimisation de recherche en direct dans JavaScript
Mais je me demandais si je devais sortir d'une feuille XML en cache, ou y a-t-il en quelque sorte un moyen de mettre en cache MySQL lui-même.
Que fait Google, ou certains des autres grands sites qui s'appuient sur cette fonctionnalité?
La solution
J'essaierais d'optimiser autant que possible la requête SQL:
- pas de sélection *
- pas de jointure
- Utilisez le lieu où dans les champs indexés
Aussi, du côté PHP:
- Cachez les résultats de la recherche pour les termes les plus fréquemment recherchés (plus les données recherchées sont mises à jour, plus la durée de vie du cache est courte dans les fichiers en texte brut
- Utilisez Redis, Memcached si possible
Envisagez également une base de données Nosql parallèle
Et
Zend_search_lucene est idéal pour les sites de trafic bas / moyen (aurait des problèmes lors de la mise à l'échelle)
Autres conseils
Utilisez des moteurs d'indexation pour indexer vos données et accélérer vos résultats de recherche. Comme: http://sphinxsearch.com/ ou http://lucene.apache.org/core/
Configurez le travail CRON pour indexer les données, il existe une API PHP pour SPHINX et le module Zend Framework. La vitesse d'indexation est beaucoup des choses, si elles sont utilisées correctement.