Comment interroger DynamoDB en ordre décroissant
Par défaut, un Query DynamoDB renvoie les items en ordre croissant de clé de tri.
Mais la plupart des patterns d'accès « donne-moi les derniers » veulent l'inverse — le
plus récent d'abord. Le bouton, c'est un seul booléen sur le Query :
ScanIndexForward. Mets-le à false et la même requête lit la partition à l'envers.
C'est un seul paramètre, mais il fait trébucher les gens parce qu'on le confond facilement avec un tri des résultats après coup (ce que DynamoDB ne fait pas) et parce que son nom se lit à rebours de ce qu'il contrôle.
Comment interroger DynamoDB en ordre décroissant ?
Définis ScanIndexForward=false sur le Query. Par défaut, DynamoDB renvoie les items en ordre croissant de clé de tri ; basculer ce seul booléen lit la partition à l'envers, te donnant les résultats du plus récent au plus ancien quand ta clé de tri est un horodatage ou une séquence. Cela ne change que l'ordre, pas quels items correspondent, et les lectures en sens inverse coûtent exactement la même chose que les lectures en sens direct.
ScanIndexForward=true(par défaut) → ordre croissant de clé de tri.ScanIndexForward=false→ ordre décroissant — le plus récent d'abord quand ta clé de tri est un horodatage ou une séquence.- Il n'affecte que l'ordre, pas quels items correspondent — c'est toujours la condition de clé qui décide.
- C'est gratuit. L'ordre inverse coûte la même chose que l'ordre direct ; DynamoDB lit l'ordre stocké de la partition dans les deux cas.
- Utilise
Limitavec pour obtenir « les N plus récents » en une seule lecture pas chère.
Le problème : « montre-moi les derniers d'abord »
Disons que tu gères un classement multijoueur et que tu stockes les événements de score de chaque joueur sous une même clé de partition, triés par horodatage croissant :
PK: GAME#42 SK: SCORE#2026-06-27T10:00:00Z points
PK: GAME#42 SK: SCORE#2026-06-27T10:05:00Z points
PK: GAME#42 SK: SCORE#2026-06-27T10:09:00Z pointsLe tableau de bord a besoin des scores les plus récents. Un simple Query sur
GAME#42 les renvoie du plus ancien au plus récent, alors tu serais tenté de tout lire
et de l'inverser dans ton application — gaspilleur, et cassé dès que tu ajoutes Limit.
DynamoDB peut te les renvoyer du plus récent au plus ancien directement.
Comment fonctionne ScanIndexForward
Les items d'une partition sont physiquement stockés triés par clé de tri. Un Query
parcourt cet ordre ; ScanIndexForward choisit juste le sens du parcours :
true(par défaut) — démarre à la plus petite clé de tri, parcourt vers le haut (croissant).false— démarre à la plus grande clé de tri, parcourt vers le bas (décroissant).
Élément crucial : c'est une propriété de la lecture, pas de la table — les mêmes
items, la même condition de clé, juste inversés. Et comme DynamoDB ne fait que choisir un
sens sur des données déjà triées, les lectures décroissantes sont
exactement aussi peu chères
que les croissantes. Combine-le avec Limit=10 et tu obtiens « les 10 événements de
score les plus récents » en un seul Query au coût minimal.
Une subtilité : en paginant en arrière à travers un jeu de résultats décroissant, le
curseur LastEvaluatedKey/ExclusiveStartKey fonctionne toujours — garde simplement
ScanIndexForward=false cohérent sur chaque page du même scan, sinon le sens du curseur
et l'ordre se contredisent.
Construire la requête dans DynoTable
Pour assembler la condition de clé elle-même (et voir les maps correspondantes de noms/valeurs d'attributs), utilise le constructeur d'expressions DynamoDB.
Dans DynoTable, tu lis un onglet via une clé choisie et tu règles le sens de tri sur
l'onglet avec un sélecteur — pas besoin d'écrire ScanIndexForward à la main. Bascule-le
pour prévisualiser les résultats du plus récent au plus ancien.

Pièges et étapes suivantes
ScanIndexForwardinverse, il ne trie pas par un attribut arbitraire. L'ordre est toujours par clé de tri — pour trier par autre chose, il faut cet attribut comme clé de tri (souvent via un GSI).- Ne fais pas tout-lire-puis-inverser dans ton application — règle le flag et ajoute
Limit. - Garde le flag cohérent pendant la pagination d'un scan multi-pages, sinon le curseur se bat contre l'ordre.
- Tu veux le plus récent en numérique ? Assure-toi que la clé de tri se trie correctement — complète les nombres avec des zéros pour que l'ordre lexicographique corresponde.
- À voir aussi : stratégies de clé de tri et pagination.
Envie d'inverser l'ordre des résultats sans toucher aux paramètres de l'API ? Télécharge DynoTable et interroge tes tables directement.


