Come Query DynamoDB in ordine decrescente
Per impostazione predefinita, DynamoDB Query restituisce gli elementi in ordine di chiave di ordinamento ascendente. Ma la maggior parte
I modelli di accesso "dammi l'ultimo" vogliono il contrario: prima il più recente. La manopola è a
booleano singolo sull'Query: ScanIndexForward. Impostalo su false e lo stesso
la query legge la partizione al contrario.
È un parametro, ma fa inciampare le persone perché è facile confonderlo con l'ordinamento i risultati dopo il fatto (cosa che DynamoDB non fa) e perché il nome recita all'indietro rispetto a ciò che controlla.
Come posso interrogare DynamoDB in ordine decrescente?
Impostare ScanIndexForward=false sull'Query. Per impostazione predefinita, DynamoDB restituisce gli elementi in ordine crescente di chiave di ordinamento; lanciando questo singolo booleano si legge la partizione al contrario, fornendo i risultati più recenti quando la chiave di ordinamento è un timestamp o una sequenza. Cambia solo l'ordine, non quali elementi corrispondono, e le letture inverse costano esattamente come quelle in avanti.
ScanIndexForward=true(predefinito) → ordine crescente della chiave di ordinamento.ScanIndexForward=false→ ordine discendente: prima il più recente quando la chiave di ordinamento è un timestamp o una sequenza.- Influisce solo sull'ordine, non su quali articoli corrispondono: è ancora la condizione chiave lo decide.
- È gratis. L'ordine inverso costa come quello in avanti; DynamoDB legge il in ogni caso l'ordine memorizzato della partizione.
- Usa
Limitcon esso per ottenere "l'N più recente" in una lettura economica.
Il problema: "mostrami prima l'ultima versione"
Supponiamo che tu gestisca una classifica multiplayer e memorizzi gli eventi di punteggio di ciascun giocatore sotto uno chiave di partizione, ordinata in base a un timestamp crescente:
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 pointsLa dashboard necessita dei punteggi più recenti. Ritorna un semplice Query su GAME#42
prima quelli più vecchi, quindi saresti tentato di leggere tutto e invertirlo nella tua app —
dispendioso e rotto nel momento in cui aggiungi Limit. DynamoDB può restituirli
direttamente il più nuovo.
Come funziona ScanIndexForward
Gli Item in una partizione vengono archiviati fisicamente ordinati per chiave di ordinamento. Un Query cammina
quell'ordine; ScanIndexForward sceglie semplicemente la direzione della camminata:
true(predefinito): inizia dalla chiave di ordinamento più bassa, sali (ascendente).false: inizia dalla chiave di ordinamento più alta, prosegui verso il basso (discendente).
Fondamentalmente, questa è una proprietà della lettura, non della tabella: gli stessi elementi, gli stessi
condizione chiave, appena invertita. E poiché DynamoDB sta solo scegliendo una direzione
dati già ordinati, le letture discendenti lo sono
esattamente altrettanto economico
come ascendenti. Abbinalo a Limit=10 e otterrai "i 10 punteggi più recenti
eventi" in un unico Query dal costo minimo.
Una sottigliezza: quando si sfoglia all'indietro attraverso un set di risultati discendente, il file
Il cursore LastEvaluatedKey/ExclusiveStartKey funziona ancora: basta mantenerlo
ScanIndexForward=false coerente in ogni pagina della stessa query o nel cursore
la direzione e l'ordine non sono d'accordo.
Creazione della query in DynoTable
Per assemblare la condizione chiave stessa (e vedere le mappe nome-attributo corrispondenti/value),
utilizzare il creatore di espressioni DynamoDB. Per il
intera richiesta - indice, Limit e ScanIndexForward inclusi - il
costruttore di query compone l'Query ed emette a
programma SDK v3, CLI o boto3 eseguibile.
In DynoTable, leggi una scheda tramite un tasto scelto e imposti la direzione di ordinamento sulla scheda
con un interruttore: non è necessario scrivere a mano ScanIndexForward. Giralo per visualizzare l'anteprima
risultati più recenti.

Insidie + passaggi successivi
ScanIndexForwardinverte, non ordina in base a un attributo arbitrario. L'ordine è sempre tramite la chiave di ordinamento — per ordinare in base a qualcos'altro è necessario l'attributo as a chiave di ordinamento (spesso tramite un GSI).- Non leggere tutto e poi invertire nella tua app: imposta il flag e aggiungi
Limit. - Mantieni coerente il flag durante il paging di una query multipagina oppure il cursore combatte il file ordine.
- Vuoi numerico prima i più nuovi? Una chiave di ordinamento digitata con un numero ordina già numericamente. Solo se hai incorporato dei numeri all'interno di una chiave di ordinamento string, ne hai bisogno azzerali in modo che l'ordine lessicografico corrisponda.
- Correlati: strategie di ordinamento e impaginazione.
Vuoi invertire l'ordine dei risultati senza toccare i parametri API? Scarica DynoTable ed interroga direttamente le tue tabelle.
Tasti di ordinamento compositi e numerici
L'ordine discendente segue le regole del tipo di chiave di ordinamento, non il tuo modello mentale "più recente":
| sort key memorizzato come | Discendente ti dà | Capito |
|---|---|---|
Stringa ISO-8601 UTC 2026-06-27T10:09:00Z | Prima il timestamp più recente | L'ordine lessicografico corrisponde a quello cronologico quando viene fissato il fuso orario |
Corda epoca con imbottitura zero 00000000001009 | Prima la sequenza più alta | I numeri non riempiti vengono ordinati in modo errato ("9" > "10") — vedere zero-padding |
Tipo di numero N | Prima il valore numerico più grande | Ordine numerico naturale, non stringa |
Prefisso di stato STATUS#open#... | Lessicografico inverso su SK completo | Non è uguale a "aperto più di recente" a meno che non sia codificato nel suffisso |
Se "più recente" significa qualcosa di diverso dalla chiave di ordinamento, ad esempio ordinamento per
points all'interno della stessa partizione di gioco: hai bisogno di quella metrica nell'ordinamento
key (o su un GSI la cui chiave di ordinamento è points), non un ordinamento post-query in
codice dell'applicazione.
Limit con letture discendenti
Limit limita gli articoli valutati, non gli articoli restituiti dopo un filtro. Coppia
ScanIndexForward=false con Limit=10 su una chiave di ordinamento in ordine temporale per recuperare il file
dieci eventi più recenti in una partizione letta.
Costo di esempio: dieci elementi da 2 KB in uno discendente Query toccano 20 KB → 3
RCU eventualmente coerente (arrotondato a blocchi da 4 KB). Lettura dell'intera partizione
di 10.000 eventi da invertire nel codice dell'applicazione tocca ~20 MB → migliaia di
RCU per lo stesso widget dell'interfaccia utente. Modella la dimensione della tua partizione con
calcolatore della dimensione dell'articolo prima di scegliere
Limit.
L'impaginazione rimane direzionale
Quando esegui la paginazione con ExclusiveStartKey, mantieni ScanIndexForward identico
ogni richiesta. Capovolgendo la bandiera tra le pagine si inverte la semantica del cursore:
puoi saltare o duplicare le righe.
Per gli API che espongono "carica di più", codificare in base64 l'LastEvaluatedKey in modo opaco;
i client non devono modificare i componenti della chiave di ordinamento. Vedi
impaginazione per modelli di token.
Parità PartiQL e SDK
Le query PartiQL ExecuteStatement accettano la stessa semantica di ordinamento
parametri Query sottostanti quando l'esecutore si associa a una lettura di condizioni chiave.
Il generatore di query emette SDK v3, CLI o boto3
programmi con ScanIndexForward cablato esplicitamente: utili quando il tuo team si mescola
Query ad hoc PartiQL con codice SDK di produzione.
Accedi ai modelli che utilizzano l'ordine discendente
- Feed attività:
SKè un timestamp ISO; discendente +Limitproduce a finestra recente. - Classifiche: chiave di ordinamento numerico
score; superfici discendenti punteggi migliori quando la chiave di partizione riguarda un gioco o una stagione. - Coda di controllo: chiavi di ordinamento
EVENT#<ts>di sola aggiunta; discendente mostra il più recente prima gli eventi senza GSI.
Quando l'interfaccia utente necessita anche di una cronologia crescente ("mostra prima il più vecchio"), la stessa query
con ScanIndexForward=true evita la duplicazione dei dati o il mantenimento di due indici.
Prova a attivare/disattivare i dati reali
Connetti DynoTable, apri una scheda di query su una partizione con una chiave di ordinamento ordinata nel tempo,
capovolgi ascendente/descending e osserva il riordino della griglia senza modificare API
parametri. Confronta la capacità consumata nel registro delle operazioni: avanti e
le letture inverse sullo stesso Limit dovrebbero corrispondere.


