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é?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top