2009-11-06 5 views
3

Quelle est la bonne façon de traiter une page Web qui renvoie les résultats d'une recherche qui pourrait avoir des résultats différents d'un moment à l'autre?Paging: Stockage des résultats de recherche

à savoir renvoyer la requête la première fois peut contenir des résultats différents lorsque l'utilisateur clique sur la page 2, et réexécuter la requête.

Comment la plupart des gens font face à ce scénario? En général, je travaille avec des applications ASP.Net internes (où la sécurité/la bande passante ne sont pas très préoccupantes), donc je stocke les résultats dans ViewState, et les publications traitent ces données contrairement à l'interrogation de la base de données.

Quelle est la bonne méthodologie pour l'utilisation externe de WWW? Ma meilleure estimation est de stocker les résultats dans une table de base de données temporaire (pas littéralement une table temporaire, je suppose que le 'staging' pourrait être plus précis), mais je pense que cette table serait martelée avec inserts/deletes/etc, et je pense que vous auriez besoin d'un processus pour nettoyer la table, ce qui ne semble pas être une solution très élégante.

Est-ce que je suis proche?

Répondre

2

La plupart des applications ne le traitent pas ... ils supposent que les résultats ne changeront pas assez pour justifier une sorte de mécanisme de mise en cache. Toutefois, si vous travaillez avec des données en temps réel hautement (comme les résultats Twitter, par exemple), vos liens de pagination regarderaient très probablement comme ceci:

?q=your+query&olderthan={last result shown}&limit=10

... où {last result shown} est l'ID du dernier résultat sur la page en cours. Cet ID serait utilisé pour vous permettre de demander des résultats plus anciens que l'ID spécifié: SELECT * FROM table WHERE id < {last result shown}.

+0

J'ai vu cela plusieurs fois et c'est une solution valable, mais ne fonctionnera pas si vous voulez ou devez utiliser POST vs GET. En outre, cela nécessite une gestion de la sécurité dans votre application - sinon Sombody peut changer l'URL pour limiter = 200000 - et si vous affichez une liste de produits disons - vous pouvez obtenir votre serveur martelé et navigateur gelé :-) – konung

+0

Cette méthode fonctionnerait juste très bien avec les requêtes POST. Glissez-le simplement dans ''. Et à propos de la limite de la limite ... Je pensais que cela allait sans dire;) – brianreavis

+0

J'aime le concept 'olderthan'. La chaîne de requête peut être validée par rapport à ce que vous autorisez ou les valeurs peuvent être stockées dans viewstate – John

1

Bien que la mémoire puisse être très gourmande en ressources, vous pouvez également stocker les résultats de la recherche dans la session et effectuer une pagination au cours de la session plutôt que d'exécuter une requête à chaque fois.

1

Que diriez-vous d'une session? Il s'agit de données temporaires spécifiques à une session, alors pourquoi ne pas utiliser la session?

Je n'ai pas fait d'asp depuis des lustres (d'avant l'ère .NET :-)), mais en PHP ou en rails vous utiliseriez des sessions pour n'importe quel magasin temporaire comme. Vous pouvez utiliser le système de fichiers local (sur le serveur) ou la base de données en tant que magasin de sessions. Il y a des façons d'optimiser, donc je ne m'inquiéterais pas de ce que DB soit martelé, à moins que vous n'ayez des milliers d'utilisateurs. Les bases de données sont également conçues pour gérer des milliers d'insertions et de suppressions - n'importe quel serveur DB-SQL majeur, MySQL, PostgreSQL ne devrait pas avoir de problème avec cela.