Maison > développement back-end > tutoriel php > Paginage des données en temps réel avec une pagination basée sur le curseur

Paginage des données en temps réel avec une pagination basée sur le curseur

Jennifer Aniston
Libérer: 2025-02-20 08:42:10
original
985 Les gens l'ont consulté

Paginage des données en temps réel avec une pagination basée sur le curseur

La pagination est une technique pour briser de grands records en plus petites portions appelées pages. En tant que développeur, vous devez être familiarisé avec la mise en œuvre de la pagination, mais la mise en œuvre de la pagination pour les données en temps réel peut devenir difficile même pour les développeurs expérimentés. Dans ce tutoriel, nous allons discuter des cas d'utilisation pratiques et des solutions pour la pagination de données en temps réel et la pagination basée sur le curseur.

Les plats clés

  • La pagination est une méthode utilisée pour diviser de grands ensembles d'enregistrements en parties plus petites, appelées pages. La mise en œuvre de la pagination pour des données en temps réel peut être difficile en raison de mises à jour fréquentes et du potentiel de résultats inexacts lors de l'ajout ou de la suppression des données.
  • Divers sites de réseautage social, tels que Twitter et Facebook, ont mis en œuvre avec succès la pagination de données en temps réel. Ils utilisent une pagination basée sur le curseur, qui s'appuie sur des identifiants uniques (curseurs) plutôt que sur le nombre d'enregistrements pour la pagination.
  • La pagination basée sur le curseur nécessite au moins une colonne avec des valeurs séquentielles uniques, similaires au paramètre MAX_ID de Twitter ou à Facebook après le paramètre. Il a également besoin d'un paramètre de comptage pour filtrer un nombre limité de résultats, et des URL suivantes et précédentes pour naviguer dans les données.
  • La pagination basée sur le curseur est généralement plus efficace et fiable que la pagination basée sur le décalage, en particulier pour les données en temps réel ou les grands ensembles de données. Il réduit la charge sur le serveur et rend le processus de pagination plus rapide et plus efficace.
  • La mise en œuvre de la pagination basée sur le curseur implique quelques étapes, notamment en décidant d'un identifiant unique à utiliser comme curseur, en modifiant la requête de la base de données pour récupérer des enregistrements en fonction de ce curseur, et à la mise à jour de l'interface utilisateur de l'application pour gérer les données paginées et permettre aux utilisateurs de naviguer dans les pages.

Identification des problèmes dans la pagination de données en temps réel

Wikipedia définit les données en temps réel comme des informations livrées immédiatement après la collecte. Il n'y a pas de retard dans l'aptitude des informations fournies. Dans de telles applications, il est difficile de fournir des données paginées précises en raison des mises à jour fréquentes. Jetons un coup d'œil aux problèmes de pagination standard lors de la gestion des données en temps réel.

  • suppose que les données sont statiques et ne changent pas fréquemment - dans la pagination par défaut, un ensemble d'enregistrements récupéré est divisé en plusieurs pages. Comme les données ne sont pas fréquemment modifiées, les utilisateurs ont l'impression que la pagination fonctionne avec précision, mais les résultats de la pagination deviennent inexacts lors de l'ajout de nouvelles données ou de la suppression des données existantes.

  • La pagination ne considère que le nombre d'enregistrements, au lieu de chaque enregistrement individuel - les enregistrements sont divisés en pages en utilisant le nombre total d'enregistrements et paginés normalement. Il ne considère pas si chaque enregistrement tombe dans la bonne page sur la pagination. Cela peut conduire à un affichage redondant des enregistrements.

Compte tenu de ces points, il est difficile d'utiliser les techniques de pagination par défaut pour gérer les données en temps réel. Essayons d'identifier les problèmes en utilisant un scénario pratique.

Supposons que nous avons 20 enregistrements initialement et que nous utilisons 10 comme limite pour diviser les enregistrements en pages. L'image suivante montre comment les enregistrements sont divisés en pages.

Paginage des données en temps réel avec une pagination basée sur le curseur

Supposons maintenant que l'ensemble de résultats est mis à jour par cinq nouveaux enregistrements pendant que nous sommes sur la première page. L'image suivante montre le scénario actuel.

Paginage des données en temps réel avec une pagination basée sur le curseur

Maintenant, nous naviguons vers la deuxième page. Sur la base de notre première image, il devrait récupérer les enregistrements de 1 à 10. Cependant, les enregistrements avec les numéros 15-6 seront récupérés. Vous pouvez clairement voir que les numéros d'enregistrement 15-11 sont affichés à la fois dans la première page ainsi que dans la deuxième page.

cas d'utilisation pratique de la pagination de données en temps réel

Comme nous le savons tous, réinventer la roue n'est pas quelque chose qu'un développeur devrait faire. Nous devons examiner les techniques de pagination existantes des sites qui ont résolu ces problèmes avant de penser à construire le nôtre. De nombreux sites de réseaux sociaux tels que Twitter et Facebook fournissent des données en temps réel dans leurs profils d'utilisateurs. Dans cette section, nous examinerons les cas d'utilisation pratiques de pagination de données en temps réel en utilisant certains des sites les plus populaires.

pagination basée sur Twitter API basée sur le curseur

Les profils d'utilisateurs Twitter sont fréquemment remplis de nouveaux tweets, de sorte que le mécanisme de récupération des données de temporisation Twitter devrait être un bon début pour identifier les techniques de pagination dans les flux de données en temps réel. Voyons comment cela fonctionne en utilisant une méthode API Twitter.

Ce qui suit contient un exemple de demande à la méthode des tweets de recherche d'API Twitter.

https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Dans l’URL ci-dessus, nous demandons les tweets les plus récents contenant le mot «PHP» et cassent les résultats des résultats en blocs de 10 en utilisant le paramètre Count. Il s'agit du comportement typique de la pagination de décalage où nous répondons au nombre d'enregistrements. Mais ici, nous pouvons voir deux paramètres supplémentaires appelés depuis_id et max_id, qui permet une pagination basée sur le curseur. Voyons comment fonctionne la pagination basée sur le curseur en utilisant notre exemple précédent.

Nous avons eu 20 enregistrements brisés en 2 pages et supposons que nous sommes sur la première page. 5 nouveaux enregistrements sont ajoutés en haut de la liste. L'image suivante prévisualise le scénario actuel.

Paginage des données en temps réel avec une pagination basée sur le curseur

Voyons maintenant une partie de la réponse générée pour la première page de la demande de recherche Twitter. Vous pouvez afficher le format de réponse complet ici.

https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Comme vous pouvez le voir, la section Search_metadata fournit des détails sur les résultats. Il générera l'URL Next_Results, au cas où il y aura plus d'enregistrements à paginer. Nous utilisons principalement le paramètre MAX_ID pour la pagination. Avec chaque réponse, nous récupérerons le paramètre MAX_ID et nous pouvons l'utiliser pour générer le jeu de résultats suivant. Nous utilisons le paramètre MAX_ID pour recevoir des résultats plus anciens que l'ID donné.

Dans notre exemple, nous devons récupérer le paramètre MAX_ID comme enregistrement 11 tout en affichant les enregistrements 20-11. Ensuite, nous passons le Max_ID pour générer le jeu de résultats suivant. Ainsi, nous obtiendrons les résultats précis comme indiqué dans l'image suivante.

Paginage des données en temps réel avec une pagination basée sur le curseur

Comme vous pouvez le voir, nous avons les résultats précis pour la deuxième page en éliminant 15 enregistrements en haut au lieu de 10 dans une pagination basée sur le décalage. Dans la pagination basée sur le curseur, nous ne pouvons pas considérer le concept des pages, car il change rapidement, de sorte que les résultats seront considérés comme précédents ou suivants. Généralement, Max_ID est suffisamment efficace pour générer des résultats précis, mais il peut y avoir des scénarios où puisque_ID est également essentiel tout en paginant dans les deux sens. Vous pouvez consulter des exemples plus avancés d'utilisation à la fois max_id et depuis_ID sur la section des développeurs de Twitter.

Pagination basée sur Facebook API basée sur le curseur

La mise en œuvre de l'API de Facebook est légèrement différente de celle de Twitter, même si les deux API utilisent la même théorie. Jetons un coup d'œil à la réponse d'un exemple de demande d'API Facebook.

"search_metadata": {
  "max_id": 250126199840518145,
  "since_id": 24012619984051000,
  "refresh_url": "?since_id=250126199840518145&q=php&result_type=recent&include_entities=1",

  "next_results": "?max_id=249279667666817023&q=php&count=10&include_entities=1&result_type=recent",

  "count": 10,
  "completed_in": 0.035,
  "since_id_str": "24012619984051000",
  "query": "php",
  "max_id_str": "250126199840518145"
}
Copier après la connexion
Copier après la connexion

Comme vous pouvez le voir, Facebook utilise deux curseurs basés sur des chaînes appelées avant et après, pour la pagination, au lieu de depuis_ID et max_id. Dans Facebook, le curseur avant pointe vers le début de la page tandis que le curseur After pointe jusqu'à la fin de la page.

La plupart des API avec des données en temps réel utilisent ce mécanisme pour paginer avec précision à travers leurs résultats. En tant que développeurs, nous devons connaître la théorie derrière la pagination basée sur le curseur afin d'utiliser les API existantes et de créer la nôtre si nécessaire.

Les bases de la création de pagination pour les données en temps réel

La mise en œuvre de la pagination de données en temps réel est une tâche complexe au-delà de la portée de ce tutoriel, nous allons donc examiner les besoins de base et le processus de création d'un simple mécanisme de pagination pour comprendre la pagination basée sur le curseur.

Identifions les composants de base de la pagination basée sur le curseur, en utilisant les exemples discutés précédemment.

  • Curseurs - Nous devons avoir au moins une colonne avec des valeurs séquentielles uniques pour implémenter une pagination basée sur le curseur. Cela peut être similaire au paramètre MAX_ID de Twitter ou à Facebook après le paramètre.

  • Nombre - Nous avons besoin du paramètre de comptage comme avec une pagination basée sur le décalage pour filtrer un nombre limité de résultats, avant ou après le curseur.

  • URL suivante - Ceci est nécessaire au cas où nous fournirons la pagination via une API. Les utilisateurs doivent savoir si la page suivante est disponible et comment obtenir le prochain ensemble de données.

  • URL précédente - Ceci est nécessaire au cas où nous fournissons la pagination via une API. Les utilisateurs doivent savoir si la page précédente est disponible et comment obtenir le prochain ensemble de données.

Ce sont les besoins de base de la pagination basée sur le curseur. Les développeurs travaillent souvent avec une pagination basée sur le décalage et ont rarement la chance de travailler avec une pagination basée sur le curseur, il est donc important d'identifier les différences et les avantages de chaque technique pour les utiliser dans des scénarios appropriés.

  • Dans la pagination de décalage, nous pouvons trier par n'importe quelle colonne et paginer les résultats tandis que la pagination basée sur le curseur dépend du tri de la colonne de curseur unique.

  • La pagination de décalage contient des numéros de page en plus des liens suivants et précédents. Mais en raison de la nature très dynamique des données, nous ne pouvons pas fournir de numéros de page pour la pagination basée sur le curseur.

  • Généralement, la pagination de décalage nous permet de naviguer dans les deux directions tandis que la pagination basée sur le curseur est principalement utilisée pour la navigation vers l'avant.

Jusqu'à présent, nous avons examiné les besoins de base et les différences de pagination basée sur le curseur. Nous pouvons maintenant passer à une implémentation d'échantillon pour identifier son fonctionnement.

Implémentation de la pagination basée sur le curseur de base

https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • Tout d'abord, nous créons la connexion de la base de données à l'aide de PDO. Ensuite, nous exécutons la fonction HandlePaginationData pour paginer les résultats.

  • Ensuite, nous vérifions si le paramètre MAX_ID ou MIN_ID est disponible en URL. Max_id est similaire à Facebook après le paramètre et utilisé pour avancer. MIN_ID est similaire au paramètre avant Facebook et utilisé pour naviguer vers l'arrière. De plus, nous avons configuré la direction de navigation, la clause WHERE en utilisant max_id ou min_id et l'ordre de tri.

  • Ensuite, nous exécutons la requête pour obtenir le nombre complet de résultats suivis de la même requête avec une instruction limite pour affiner les résultats.

  • Au cas où nous traversons la direction précédente, nous devons changer le tri à l'ASC. Sinon, il récupérera les enregistrements les plus récents au lieu de la page précédente. Nous inversons les enregistrements dans le tableau pour les montrer comme descendant.

  • Ensuite, nous parcourons les résultats. Pendant la boucle, nous attribuons l'ID du premier enregistrement en tant que min_id et dernier enregistrement en tant que max_id. Ces valeurs de curseur sont utilisées pour filtrer les données précises en éliminant la duplication.

  • Enfin, nous pouvons consulter la fonction Paginator pour implémenter les liens de pagination.

"search_metadata": {
  "max_id": 250126199840518145,
  "since_id": 24012619984051000,
  "refresh_url": "?since_id=250126199840518145&q=php&result_type=recent&include_entities=1",

  "next_results": "?max_id=249279667666817023&q=php&count=10&include_entities=1&result_type=recent",

  "count": 10,
  "completed_in": 0.035,
  "since_id_str": "24012619984051000",
  "query": "php",
  "max_id_str": "250126199840518145"
}
Copier après la connexion
Copier après la connexion

Le code suivant contient le code d'initialisation pour la pagination générée dans cette section.

https://api.twitter.com/1.1/search/tweets.json?q=php&since_id=24012619984051000&max_id=250126199840518145&result_type=recent&count=10
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Maintenant, nous avons un échantillon de pagination de données simple pour comprendre comment fonctionne la pagination de données en temps réel. Utilisez ce code et paginez via les résultats. En paginant, ajoutez quelques enregistrements à la fin de la table pour le rendre en temps réel. Paginez ensuite vers l'avant et vers l'arrière pour vérifier les duplications de données en pages. Faites de même avec une pagination basée sur le décalage pour comprendre la différence.

Conclusion

Dans ce tutoriel, nous avons appris la théorie derrière la pagination de données en temps réel avec une pagination basée sur le curseur. Faites-nous savoir vos pensées et vos expériences dans les commentaires ci-dessous!

Questions fréquemment posées (FAQ) sur la pagination basée sur le curseur

Quelle est la principale différence entre la pagination basée sur le décalage et le curseur?

La pagination basée sur le décalage implique de sauter un certain nombre d'enregistrements dès le début, puis de récupérer un nombre défini de enregistrements. Cependant, cette méthode peut entraîner des problèmes tels que des enregistrements en double si des données sont ajoutées ou supprimées pendant la pagination. D'un autre côté, la pagination basée sur le curseur utilise un identifiant unique (le curseur) du dernier enregistrement récupéré pour récupérer le prochain ensemble d'enregistrements. Cette méthode est plus efficace et évite les problèmes associés à la pagination basée sur le décalage, ce qui la rend idéale pour les données en temps réel.

Comment la pagination basée sur le curseur gère-t-elle les données en temps réel?

Cursor - La pagination basée sur une base est particulièrement efficace pour les données en temps réel car elle utilise un identifiant unique (le curseur) du dernier enregistrement récupéré pour récupérer le prochain ensemble d'enregistrements. Cela signifie que même si de nouvelles données sont ajoutées ou que les données existantes sont supprimées pendant le processus de pagination, le curseur pointera toujours vers le prochain enregistrement correct, garantissant qu'aucun enregistrement n'est manqué ou dupliqué. être utilisé avec n'importe quel type de données?

Oui, la pagination basée sur le curseur peut être utilisée avec n'importe quel type de données. Cependant, il est particulièrement efficace avec des données en temps réel ou de grands ensembles de données où l'efficacité est cruciale. Le curseur peut être n'importe quel identifiant unique, comme un horodatage ou un identifiant unique, qui peut être utilisé pour récupérer le prochain ensemble d'enregistrements.

Comment la pagination basée sur le curseur améliore-t-elle les performances?

La pagination basée sur le curseur améliore les performances en réduisant la quantité de données qui doivent être traitées immédiatement. Au lieu de récupérer tous les enregistrements, puis de sauter un certain nombre, la pagination basée sur le curseur ne récupère que l'ensemble suivant d'enregistrements basé sur le curseur. Cela réduit la charge sur le serveur et rend le processus de pagination plus rapide et plus efficace.

Comment puis-je implémenter une pagination basée sur le curseur dans mon application?

La mise en œuvre de la pagination basée sur le curseur dans votre application implique quelques étapes. Tout d'abord, vous devez décider d'un identifiant unique à utiliser comme curseur. Cela pourrait être un horodatage, un identifiant unique ou toute autre valeur unique. Ensuite, vous devez modifier votre requête de base de données pour récupérer des enregistrements en fonction de ce curseur. Enfin, vous devez mettre à jour l'interface utilisateur de votre application pour gérer les données paginées et permettre aux utilisateurs de naviguer dans les pages.

Quels sont les inconvénients potentiels de la pagination basée sur le curseur?

Alors que la base du curseur basé sur le curseur La pagination est plus efficace et fiable que la pagination basée sur le décalage, elle présente quelques inconvénients potentiels. Par exemple, il peut être plus complexe à mettre en œuvre, surtout si vos données n'ont pas un identifiant unique à utiliser comme curseur. De plus, il peut ne pas convenir à tous les cas d'utilisation, par exemple lorsque vous devez passer à un numéro de page spécifique.

La pagination basée sur le curseur peut-elle être utilisée avec GraphQL?

Oui, curseur -La pagination basée sur une base peut être utilisée avec GraphQL. En fait, GraphQL a une prise en charge intégrée pour la pagination basée sur le curseur via la spécification de relais. Cela vous permet d'implémenter facilement une pagination efficace et fiable dans vos applications GraphQL.

Comment la pagination basée sur le curseur fonctionne-t-elle avec MySQL?

La pagination basée sur le curseur peut être implémentée dans MySQL en utilisant un unique Identifiant, comme un horodatage ou un identifiant unique, comme curseur. Vous pouvez ensuite modifier votre requête SQL pour récupérer des enregistrements en fonction de ce curseur, en utilisant les clauses «où» et «limiter» pour spécifier la plage d'enregistrements à récupérer.

Comment le Slack utilise-t-il une pagination basée sur le curseur dans leur API?

Slack utilise une pagination basée sur le curseur dans leur API pour récupérer efficacement de grandes quantités de données. Ils utilisent un identifiant unique comme curseur et fournissent ce curseur dans la réponse API pour permettre aux clients de récupérer le prochain ensemble d'enregistrements. Cela leur permet de gérer de grands ensembles de données avec des performances et une fiabilité élevées.

Quelle est la spécification de l'API JSON pour la pagination basée sur le curseur?

La spécification de l'API JSON pour la pagination basée sur le curseur implique l'utilisation d'un unique Identifiant comme le curseur et incluant ce curseur dans l'objet «liens» de la réponse de l'API. Cela permet aux clients de récupérer facilement l'ensemble des enregistrements suivants en suivant le lien fourni. Cette spécification fournit un moyen standard et cohérent d'implémenter une pagination basée sur le curseur dans les API JSON.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal