Quelle est la meilleure pratique pour mettre en cache les résultats de recherche paginés dont l'ordre / les propriétés peuvent être modifiés?
Disons que dans ma candidature, quelqu'un veut voir les 20 derniers fils de discussion (sur 10 000). Une demande serait envoyée à la base de données, via servlet
, pour récupérer les 20 premiers enregistrements de la table des fils de discussion au format XML / JSON. S'ils veulent ensuite voir les 20 prochains, ils passent à la page de résultats suivante et cela déclenche une autre demande pour obtenir le lot suivant (limite et décalage = 20, etc.).
Afin de réduire la charge du serveur et l'attente du client, je voudrais mettre en cache les pages de résultats précédentes. Cependant, j'ai deux questions:
- Le tableau dans lequel les résultats sont affichés peut être ordonné par plus d'un attribut (c'est-à-dire, date de création du fil, auteur du fil, dernière date de post). Cela signifie qu'une déclaration comme «les 20 premiers résultats» n'a aucun sens sans contexte (c'est-à-dire, par quoi ordonnons-nous). Comment le serveur frontal communique-t-il alors au serveur principal ce qu'il a déjà chargé? Ma première pensée a été d'utiliser des identifiants pour chaque résultat, mais les renvoyer au serveur lors de requêtes ultérieures (et filtrer les résultats en fonction d'eux) prendrait autant de temps que de tout renvoyer à l'aveuglette. Comment puis-je faire ceci?
- Que se passe-t-il si un attribut d'un résultat précédemment renvoyé (c'est-à-dire le plus récent post-date) a changé? Nous avons ensuite besoin d'un moyen de vérifier chaque résultat pour voir s'il a été modifié côté serveur depuis qu'il a été paginé. Comment faire?