Problèmes de pagination - Pagination basée sur le décalage et pagination basée sur le curseur

一 、 Pagination basée sur le décalage

La pagination basée sur l'offset est la solution prête à l'emploi la plus courante dans presque tous les frameworks modernes. Vous pouvez spécifier la limite de paramètres, le décalage, la page, etc. pour spécifier un ensemble de résultats spécifiques requis.

mode d'enquête

http://abc.dd.com/list?page=n&count=n

Désavantage

1. Au fur et à mesure que l'ensemble de données augmente, les performances ralentissent car toutes les données avant le numéro de page seront interrogées. Par exemple, sélectionnez * à partir de la limite de msgs 100000, 100; interrogera les 100,100 premières données.

2. Le nombre de données du jeu de résultats a changé, ce qui entraîne des données de requête inexactes. Dans certains cas, des résultats en double sont renvoyés.

avantage

Vous pouvez choisir le numéro de page à interroger à volonté, et vous pouvez ignorer le numéro de page.

Scénarios d'application

Contexte de gestion

二 、 Pagination basée sur le curseur

La pagination basée sur le curseur est la technique la plus efficace et fournit les résultats les plus précis. Le curseur fait référence à un jeu de touches qui pointe vers un élément spécifique dans le jeu de données. Il agit comme un pointeur vers l'enregistrement. Lors de l'appel de l'API, vous pouvez transmettre le jeu de clés avec la demande pour obtenir les données avant ou après le curseur. Vous pouvez également transmettre le paramètre limit pour limiter le jeu de résultats renvoyé.

mode d'enquête

Http://twitter.com/followers/ids/barackobama.xml?cursor=-1

avantage

1. De meilleures performances et une vitesse de requête plus rapide. Par exemple, sélectionnez * à partir de msgs où id> curseur_id limite 100; interrogera uniquement 100 éléments de données.

2. Il peut être adapté à de grands ensembles de données et fournir également des résultats cohérents. L'ensemble de résultats ne sera pas inexact en raison de changements dans le nombre de données

Désavantage

Ne peut interroger que des pages consécutives depuis le début; impossible de fournir le nombre total d'enregistrements et d'empêcher le passage à une page spécifique

Scénarios d'application

Cette méthode de curseur peut être utilisée pour tourner les pages de grands ensembles de données. Le meilleur cas d'utilisation de la pagination basée sur le curseur est de créer des pages avec un défilement infini. Supposons que l'ensemble de données change très fréquemment et que l'utilisateur peut souvent extraire l'ensemble de données des fils d'actualité, des publications, etc. Twitter et Facebook utilisent cette méthode. La pagination côté application est couramment utilisée de cette manière.

Pagination basée sur le curseur Twitter 事例 :

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

Pagination basée sur le curseur de l'API Facebook 事例 :

{
    "data":[
        {....},
        {....}
    ],
    "paging":{
        "cursors":{
            "after":"MTAxNTExOTQ1MjAwNzI5NDE=",
            "before":"NDMyNzQyODI3OTQw"
        },
        "previous":"https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw",
        "next":"https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
    }
}

Trois, les questions nécessitant une attention

1. La pagination basée sur le curseur doit être triée, le curseur est de préférence auto-croissant id dans la base de données, ordonné et globalement unique.Dans ce cas, l'implémentation est relativement simple. Dans la base de données, les données de la page suivante ou précédente peuvent être interrogées en étant supérieures ou inférieures à.

2. S'il n'y a pas d'identifiant d'incrémentation automatique dans la base de données, le curseur peut utiliser d'autres champs, mais le champ doit être de type numérique, afin que vous puissiez interroger la page suivante ou précédente en étant supérieur ou inférieur à, tel comme des horodatages tels que ctime.

3. Le problème avec l'utilisation de ctime comme curseur est le suivant: lorsque la concurrence est élevée, ctime est sujet à la duplication.

  • a. La solution est que le curseur utilise ctime pour ajouter une clé unique telle que le segment order_i, puis utilise le cryptage symétrique base64 + pour générer une chaîne de ctime + order_id, et le champ généré est utilisé comme curseur.

  • b. Lors de l'interrogation, par exemple, chaque page interroge 20 éléments, le backend déchiffre ctime + order_id et interroge le nombre d'éléments de données disponibles à ce moment en fonction de ctime. S'il y a 3 éléments de données, où ctime> ctimeValue et limit 20 + 3; Interrogez 23 éléments de données, puis recherchez les 20 éléments de données requis via order_id.

  • c. Générer un nouveau curseur basé sur les nouvelles données et revenir.

Suivez le compte officiel et entrez " java-summary " pour obtenir le code source.

Terminé, appelez ça un jour!

[ Diffusion des connaissances, partage de la valeur ], merci les amis pour votre attention et votre soutien, je suis [ Zhuge Xiaoyuan ], un travailleur migrant Internet qui lutte dans l'hésitation.

Je suppose que tu aimes

Origine blog.csdn.net/wuxiaolongah/article/details/114155510
conseillé
Classement