Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Pagination des résultats d'une requête de table dans DynamoDB
DynamoDB pagine les résultats des opérations Query
. Avec la pagination, les résultats Query
sont répartis en « pages » de données d'une taille maximum de 1 Mo. Une application peut traiter la première page des résultats, puis la deuxième page, et ainsi de suite.
Une opération Query
retourne uniquement un ensemble de résultats correspondant à la limite de taille de 1 Mo. Pour déterminer si le nombre de résultats est plus important et pour récupérer une page à la fois, les applications doivent procéder de la manière suivante :
-
Examinez le résultat de
Query
de niveau inférieur :-
Si le résultat contient un élément
LastEvaluatedKey
dont la valeur n'est pas null, passez à l'étape 2. -
S'il n'y a pas de
LastEvaluatedKey
dans le résultat, il n'y a plus aucun élément à récupérer.
-
-
Construisez une nouvelle demande
Query
, avec les mêmes paramètres que la précédente. Cependant, cette fois, acceptez la valeurLastEvaluatedKey
de l'étape 1 et utilisez-la comme paramètreExclusiveStartKey
dans la nouvelle demandeQuery
. -
Exécutez la nouvelle demande
Query
. -
Passez à l'étape 1.
En d'autres termes, l'élément LastEvaluatedKey
provenant d'une réponse Query
doit être utilisé comme ExclusiveStartKey
pour la demande Query
suivante. Si aucun élément LastEvaluatedKey
n'est présent dans la réponse Query
, vous avez extrait la dernière page de résultats. Si LastEvaluatedKey
n’est pas vide, cela ne signifie pas nécessairement qu'il y a plus de données dans le jeu de résultats. Le seul moyen de savoir que vous avez atteint la fin du jeu de résultats est lorsque LastEvaluatedKey
est vide.
Vous pouvez utiliser le AWS CLI pour visualiser ce comportement. AWS CLI envoie des Query
requêtes de bas niveau à DynamoDB à plusieurs reprises, LastEvaluatedKey
jusqu'à ce qu'elles ne soient plus présentes dans les résultats. Prenons l' AWS CLI exemple suivant qui récupère les titres de films d'une année donnée.
aws dynamodb query --table-name Movies \ --projection-expression "title" \ --key-condition-expression "#y = :yyyy" \ --expression-attribute-names '{"#y":"year"}' \ --expression-attribute-values '{":yyyy":{"N":"1993"}}' \ --page-size 5 \ --debug
Normalement, il AWS CLI gère automatiquement la pagination. Toutefois, dans cet exemple, le AWS CLI --page-size
paramètre limite le nombre d'éléments par page. La paramètre --debug
imprime les informations de niveau inférieur relatives aux requêtes et aux réponses.
Si vous exécutez l'exemple, la première réponse de DynamoDB est à similaire à ce qui suit.
2017-07-07 11:13:15,603 - MainThread - botocore.parsers - DEBUG - Response body: b'{"Count":5,"Items":[{"title":{"S":"A Bronx Tale"}}, {"title":{"S":"A Perfect World"}},{"title":{"S":"Addams Family Values"}}, {"title":{"S":"Alive"}},{"title":{"S":"Benny & Joon"}}], "LastEvaluatedKey":{"year":{"N":"1993"},"title":{"S":"Benny & Joon"}}, "ScannedCount":5}'
Le LastEvaluatedKey
de la réponse indique que certains éléments n'ont pas été récupérés. Il envoie AWS CLI ensuite une autre Query
demande à DynamoDB. Ce modèle de requête et de réponse se poursuit jusqu'à l'obtention d'une réponse finale.
2017-07-07 11:13:16,291 - MainThread - botocore.parsers - DEBUG - Response body: b'{"Count":1,"Items":[{"title":{"S":"What\'s Eating Gilbert Grape"}}],"ScannedCount":1}'
L'absence de LastEvaluatedKey
indique qu'il n'y a pas plus de d'élément à récupérer.
Note
Ils AWS SDKs gèrent les réponses DynamoDB de bas niveau (y compris la présence ou l'absence de) et fournissent diverses abstractions pour LastEvaluatedKey
la pagination des résultats. Query
Par exemple, l'interface documentaire SDK pour Java fournit un java.util.Iterator
support qui vous permet de parcourir les résultats un par un.
Pour obtenir des exemples de code dans différents langages de programmation, consultez le guide de démarrage Amazon DynamoDB et AWS SDK la documentation de votre langage.
Vous pouvez également réduire la taille de la page en limitant le nombre d'éléments dans l'ensemble de résultats, avec le paramètre Limit
de l'opération Query
.
Pour plus d'informations sur l'interrogation avec DynamoDB, consultez Interrogation de tables dans DynamoDB.