Come interrogare DynamoDB in ordine decrescente
Per impostazione predefinita una Query di DynamoDB restituisce gli Item in ordine
crescente di sort key. Ma la maggior parte dei pattern di accesso del tipo «dammi gli
ultimi» vuole l'opposto — i più recenti per primi. La manopola è un singolo booleano sulla
Query: ScanIndexForward. Impostalo a false e la stessa query legge la partizione al
contrario.
È un solo parametro, ma manda in confusione perché è facile scambiarlo con l'ordinamento dei risultati a posteriori (cosa che DynamoDB non fa) e perché il nome si legge al contrario rispetto a ciò che controlla.
Come si interroga DynamoDB in ordine decrescente?
Imposta ScanIndexForward=false sulla Query. Per impostazione predefinita DynamoDB restituisce gli Item in ordine crescente di sort key; cambiare questo singolo booleano legge la partizione al contrario, dandoti i risultati dal più recente quando la sort key è un timestamp o una sequenza. Cambia solo l'ordinamento, non quali Item corrispondono, e le letture inverse costano esattamente quanto quelle dirette.
ScanIndexForward=true(predefinito) → ordine crescente di sort key.ScanIndexForward=false→ ordine decrescente — i più recenti per primi quando la tua sort key è un timestamp o una sequenza.- Influisce solo sull'ordinamento, non su quali Item corrispondono — questo lo decide comunque la condizione sulla chiave.
- È gratis. L'ordine inverso costa quanto quello diretto; DynamoDB legge comunque l'ordine memorizzato della partizione.
- Usalo con
Limitper ottenere «gli N più recenti» in una sola lettura economica.
Il problema: «mostrami prima i più recenti»
Supponi di gestire una classifica multiplayer e di memorizzare gli eventi di punteggio di ogni giocatore sotto un'unica partition key, ordinati per 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 ha bisogno dei punteggi più recenti. Una semplice Query su GAME#42 li
restituisce dal più vecchio, quindi saresti tentato di leggere tutto e invertirlo nella tua
app — uno spreco, e rotto nel momento in cui aggiungi Limit. DynamoDB può restituirteli
direttamente dal più recente.
Come funziona ScanIndexForward
Gli Item in una partizione sono fisicamente memorizzati ordinati per sort key. Una
Query percorre quell'ordine; ScanIndexForward sceglie semplicemente la direzione del
percorso:
true(predefinito) — parte dalla sort key più bassa, sale (crescente).false— parte dalla sort key più alta, scende (decrescente).
Fondamentale: questa è una proprietà della lettura, non della tabella — gli stessi Item,
la stessa condizione sulla chiave, solo invertiti. E poiché DynamoDB sceglie solo una
direzione su dati già ordinati, le letture decrescenti sono
esattamente altrettanto economiche
di quelle crescenti. Abbinalo a Limit=10 e ottieni «i 10 eventi di punteggio più recenti»
in un'unica Query a costo minimo.
Una sottigliezza: quando pagini all'indietro in un set di risultati decrescente, il
cursore LastEvaluatedKey/ExclusiveStartKey funziona comunque — basta mantenere
ScanIndexForward=false coerente in ogni pagina dello stesso scan, altrimenti la direzione
del cursore e l'ordine non concordano.
Costruire la query in DynoTable
Per assemblare la condizione sulla chiave stessa (e vedere le mappe dei nomi/valori degli attributi corrispondenti), usa il generatore di espressioni DynamoDB.
In DynoTable, leggi una scheda attraverso una chiave scelta e imposti la direzione di
ordinamento sulla scheda con un interruttore — non serve scrivere a mano ScanIndexForward.
Invertilo per vedere in anteprima i risultati dal più recente.

Trappole e prossimi passi
ScanIndexForwardinverte, non ordina per un attributo arbitrario. L'ordine è sempre per sort key — per ordinare per qualcos'altro ti serve quell'attributo come sort key (spesso tramite una GSI).- Non leggere-tutto-e-poi-invertire nella tua app — imposta il flag e aggiungi
Limit. - Mantieni il flag coerente durante la paginazione di uno scan multi-pagina, altrimenti il cursore va in conflitto con l'ordine.
- Vuoi i numeri dal più recente? Assicurati che la sort key si ordini correttamente — riempi i numeri con zeri così l'ordine lessicografico corrisponde.
- Correlati: strategie per le sort key e paginazione.
Vuoi invertire l'ordine dei risultati senza toccare i parametri dell'API? Scarica DynoTable e interroga le tue tabelle direttamente.


