2009-11-16 8 views
0

J'ai un site Web avec moteur de recherche interne qui recherche des utilisateurs avec des paramètres spécifiques comme l'âge, la hauteur .... Il y a des milliers d'utilisateurs, donc j'ai décidé de utiliser CTE avancé afin de récupérer 10 enregistrements à chaque fois pour réduire la charge sur le serveur MSSQL.La logique du moteur de recherche avec pagination, travailler avec grand ensemble de résultats

Dans ce CTE, j'obtiens des résultats par pages (c'est-à-dire 10 enregistrements par page) tout en le commandant par lastVisit de l'utilisateur. Le problème est que je ne peux pas utiliser asp.net par défaut construit le contrôle téléavertisseur donc j'ai fait le mien qui fonctionne bien mais j'ai besoin d'obtenir le nombre de pages dans l'ensemble des résultats à chaque fois que la recherche est générée le jeu de résultats, puis le nombre maximum d'enregistrements, donc je peux le diviser par 10 pour obtenir le dernier numéro de page à utiliser dans mon contrôleur de téléavertisseur.

donc chaque fois que la page charge deux appels db sont faites, tandis que je veux éviter la quantité inutile d'enregistrements lorsque l'utilisateur change juste une page avec les mêmes paramètres de recherche.

Comment pourriez-vous nous conseiller?

Répondre

1

Cachez le nombre total de résultats, par ex. en affectant un jeton (dépendant de l'utilisateur) et en le renvoyant au serveur lorsque l'utilisateur pagine? Vous pouvez également mettre en cache le résultat lui-même de cette façon.

+0

Quels sont les déclencheurs pour l'ajout, la mise à jour et la suppression du cache "max row"? L'ensemble de résultats est de 50000 enregistrements et augmente rapidement, donc la mise en cache de tout cela n'est pas une option. – eugeneK

+0

Vous pouvez avoir différentes stratégies en fonction de la vitesse de croissance et de la probabilité que de nouveaux résultats soient pertinents. Une option consiste à utiliser un délai d'attente, lorsque le cache expire après une certaine période d'inactivité de l'utilisateur. Une autre option consiste à calculer une somme de contrôle du jeu de résultats nouvellement récupérés (les premières pages) et si elle diffère de la précédente que quelque chose a changé et que vous voulez expirer le cache – Dmitry

+0

Que voulez-vous dire en calculant la somme de contrôle pour le résultat nouvellement récupéré? – eugeneK

Questions connexes