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 de requête de table dans DynamoDB
DynamoDB pagine les résultats des opérations Query. Avec la pagination, les résultats de l’opération 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, 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 l’opération
Queryde niveau inférieur :-
Si le résultat contient un élément
LastEvaluatedKeydont la valeur n’est pas null, passez à l’étape 2. -
S’il n’y a pas de
LastEvaluatedKeydans le résultat, il n’y a plus aucun élément à récupérer.
-
-
Construisez une
Queryavec la mêmeKeyConditionExpression. Cependant, cette fois, acceptez la valeurLastEvaluatedKeyde l’étape 1 et utilisez-la comme paramètreExclusiveStartKeydans 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.
Une valeur non vide signifie LastEvaluatedKey uniquement que la page précédente Query s'est arrêtée à une limite de page, c'est-à-dire une limite de taille de page de 1 Mo ou une Limit valeur, et non qu'il reste nécessairement d'autres éléments correspondants. En particulier, lorsque vous utilisez aFilterExpression, Query applique la limite de 1 Limit Mo/page aux éléments qu'elle lit avant d'appliquer le filtre, de sorte qu'une page peut renvoyer aucun élément correspondant tout en incluant unLastEvaluatedKey. Continuez à envoyer des demandes avec les réponses renvoyées LastEvaluatedKey jusqu'à ce que la réponse n'en contienne plus.
Vous pouvez utiliser le AWS CLI pour afficher ce comportement. Il AWS CLI envoie des Query requêtes de bas niveau à DynamoDB à plusieurs reprises, jusqu'à ce que cela ne LastEvaluatedKey soit plus présent dans les résultats. Prenons l' AWS CLI exemple suivant qui extrait 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, la pagination des AWS CLI gères est automatique. 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 bas niveau relatives aux demandes et aux réponses.
Note
La pagination automatique est le comportement par défaut dans les AWS CLI versions 1 et 2. Une seule commande renvoie donc tous les éléments correspondants. Si vous devez plutôt vous paginer vous-même, utilisez l'--no-paginateoption permettant de renvoyer uniquement la première page (la réponse inclut LastEvaluatedKey alors les éléments restants), ou utilisez-la --max-items pour limiter le nombre d'éléments renvoyés et obtenir une NextToken valeur pour récupérer la page suivante.
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. AWS CLI Puis envoie 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
Les AWS kits SDK gèrent les réponses DynamoDB de bas niveau (y compris leur présence ou leur absenceLastEvaluatedKey) et fournissent diverses abstractions pour la pagination des résultats. Query Par exemple, l’interface de document du kit SDK pour Java fournit le support java.util.Iterator pour vous permettre de parcourir les résultats un par un.
Pour des exemples de code dans divers langages de programmation, consultez le Guide de prise en main d’Amazon DynamoDB et la documentation du kit SDK AWS pour 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.