2011-10-19 5 views
1

J'ai une page de recherche écrite en PHP, et il faut chercher dans la base de données MySQL, et le résultat doit être triable. Cette page de recherche sera accessible par de nombreux utilisateurs (> 1000 à tout moment).Puis-je utiliser des tables temporaires MySQL pour stocker les résultats de recherche?

Cependant, il n'est pas possible de trier le résultat de la recherche dans MySQL, car cela serait très lent.

Je pense à stocker chaque résultat de recherche dans une table temporaire (non MySQL table temporaire), et le nom de la table est stockée dans une autre table de référence comme ceci:

| id | table_name | timeout | 
----------------------------- 
| 1 | result_1 | 10000 | 
| 2 | result_2 | 10000 | 

Ensuite, je peux utiliser la tables temporaires pour trier les résultats de la recherche chaque fois que nécessaire sans avoir à reconstruire (avec quelques modifications) la requête.

Chaque table sera supprimée, conformément au délai d'attente spécifié.

En supposant que je ne puisse pas modifier la structure des tables existantes utilisées dans la requête, est-ce une bonne solution ou existe-t-il de meilleurs moyens? Veuillez nous conseiller

Merci

+2

avec MySQL devrait être plus rapide que presque toute alternative, une de ses des choses pour lesquelles un db est spécifié. –

+0

Si vous avez besoin de classer les résultats de tri en fonction de la fréquence des mots clés ou d'une autre, utilisez une instruction de requête SQL pour générer des colonnes de tri supplémentaires. Il est rare que le stockage des résultats de la requête dans une nouvelle table entraîne des requêtes plus rapides - plus les données supplémentaires que vous insérez sont susceptibles de dégrader les performances, à mon avis. –

+0

Je suis d'accord avec @Dagon. Pourquoi ne serait-il pas possible de trier le résultat dans mysql? Les systèmes de base de données sont conçus pour filtrer et trier rapidement. Peut-il s'agir d'un problème d'index ou de problème de conception de table? – iWantSimpleLife

Répondre

1

Il n'y a pas besoin d'aller à la peine de stocker les résultats dans une base de données persistante lorsque vous voulez juste mettre en cache les résultats de la recherche dans la mémoire. Avez-vous besoin d'un accès indexé aux données relationnelles? Si la réponse est non, ne la stockez pas dans une base de données MySQL.

Je sais que phpbb (un forum web open source qui supporte les backends MySQL) utilise un magasin de valeurs-clés pour sauvegarder ses résultats de recherche. Si le forum est configuré pour vous donner un lien vers la page de résultats spécifique (avec le hash de recherche dans la chaîne de requête de l'URL), ce lien sera valide pendant un certain temps mais sera finalement vidé du cache, comme vous le souhaitez. Il est peut-être trop compliqué d'implémenter une couche d'abstraction complète de la base de données si vous utilisez MySQL. Quoi qu'il en soit:

http://wiki.phpbb.com/Cache

Vous devez simplement utiliser memcached ou quelque chose pour stocker les données de résultats, et vous pouvez facilement récupérer les données et le tri en PHP. Il y a aussi quelques cadres de cache spécifiques à PHP qui réduisent au minimum le coût des données de chargement et de déchargement de l'interprète:

si les tables sont mis en place le tri correctement

https://en.wikipedia.org/wiki/List_of_PHP_accelerators

Questions connexes