Garder la pagination répétable si des opérations de changement sont effectuées

StackOverflow https://stackoverflow.com/questions/84615

  •  01-07-2019
  •  | 
  •  

Question

Si l'on veut paginer les résultats d'une source de données prenant en charge la pagination, il faut passer par un processus de:

  1. définition de la taille de la page - c’est le nombre de résultats à afficher par page;
  2. va chercher chaque page demandée par l'utilisateur en utilisant un offset = numéro de page (basé sur 0) * taille de la page
  3. affiche les résultats de la page récupérée.

Tout cela fonctionne très bien, sans tenir compte du fait qu'une opération peut affecter le système dorsal qui gâche la pagination en cours. Je parle de quelqu'un qui insère des données entre deux extractions de page ou en supprime des données.

page_size = 10;
get page 0 -> results from 0 to 9;
user inserts a record that due to the query being executed goes to page 0 - the one just shown;
get page 1 -> results from 10 to 19 - the first results on the page is the result on the old page 0.

Le comportement décrit peut causer de la confusion chez le spectateur. Connaissez-vous une solution pratique pour résoudre ce problème?

Était-ce utile?

La solution

Il y a quelques écoles de pensée à ce sujet.

  1. les données sont mises à jour, qu'il en soit ainsi
  2. Vous pouvez implémenter une sorte de méthode de mise en cache qui tiendra le ensemble de résultats entier (cela peut ne pas être une option si vous travaillez vraiment grands jeux de données)
  3. Vous pouvez effectuer une comparaison sur chaque opération de page et en informer le utilisateur si le nombre total d'enregistrements changements

.

Autres conseils

Si les mises à jour qui vous intéressent sont principalement des nouvelles insertions (par exemple, StackOverflow lui-même semble souffrir de ce problème lors de la consultation de questions et de nouvelles questions), une façon de la gérer consiste à capturer un horodatage lors de l'émission du message. première requête de pagination, puis limitez les résultats des demandes de pages suivantes aux éléments qui existaient avant cet horodatage.

Tant que les utilisateurs comprendront que les données sous-jacentes sont en constante évolution, ils ne seront pas déroutés. Alors, faites-le simplement.

Vous pouvez mettre en cache les premières pages du résultat et l'utiliser pour les vues suivantes, mais les résultats ne seront plus synchronisés avec la base de données, ce qui est encore plus déroutant.

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