Como consultar DynamoDB em ordem decrescente
Por padrão, um DynamoDB Query retorna itens em ordem de chave de classificação crescente. Mas a maioria
Os padrões de acesso “dê-me o mais recente” querem o oposto – o mais recente primeiro. O botão é um
único booleano na consulta: ScanIndexForward. Defina-o para false e o mesmo
consulta lê a partição ao contrário.
É um parâmetro, mas confunde as pessoas porque é fácil confundir com classificação os resultados após o fato (o que DynamoDB não faz) e porque o nome diz para trás do que ele controla.
Como faço para consultar o DynamoDB em ordem decrescente?
Defina ScanIndexForward=false no Query. Por padrão, DynamoDB retorna itens em ordem crescente de chave de classificação; inverter esse booleano único lê a partição ao contrário, fornecendo resultados mais recentes quando sua chave de classificação é um carimbo de data/hora ou sequência. Ele apenas altera a ordem, não quais itens correspondem, e as leituras reversas custam exatamente o mesmo que as leituras diretas.
ScanIndexForward=true(padrão) → ordem crescente de chaves de classificação.ScanIndexForward=false→ ordem decrescente — o mais novo primeiro quando sua chave de classificação é um carimbo de data/hora ou sequência.- Isso afeta apenas o pedido, e não quais itens correspondem - a condição principal ainda decide isso.
- É grátis. O pedido reverso custa o mesmo que o encaminhamento; DynamoDB lê o ordem armazenada da partição de qualquer maneira.
- Use
Limitcom ele para obter "o N mais recente" em uma leitura barata.
O problema: "mostre-me o mais recente primeiro"
Digamos que você execute uma tabela de classificação multijogador e armazene os eventos de pontuação de cada jogador em um chave de partição, classificada por um carimbo de data/hora 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 pointsO painel precisa das pontuações mais recentes. Um Query simples em GAME#42 retorna
os mais antigos primeiro, então você ficaria tentado a ler tudo e reverter em seu aplicativo -
desperdiçado e quebrado no momento em que você adiciona Limit. DynamoDB pode devolvê-los
mais novo-primeiro diretamente.
Como funciona o ScanIndexForward
Os itens em uma partição são armazenados fisicamente ordenados por chave de classificação. Um Query anda
essa ordem; O ScanIndexForward apenas escolhe a direção da caminhada:
true(padrão) — comece na chave de classificação mais baixa, suba (crescente).false— comece na chave de classificação mais alta, desça (descendente).
Crucialmente, esta é uma propriedade de read, não da tabela - os mesmos itens, os mesmos
condição chave, apenas invertida. E porque o DynamoDB está apenas escolhendo uma direção
dados já classificados, leituras decrescentes são
exatamente tão barato
como ascendentes. Combine-o com Limit=10 e você obterá "as 10 pontuações mais recentes
events" em uma única consulta de custo mínimo.
Uma sutileza: ao paginar para trás através de um conjunto de resultados descendente, o
O cursor LastEvaluatedKey/ExclusiveStartKey ainda funciona - apenas mantenha
ScanIndexForward=false consistente em todas as páginas da mesma consulta ou no cursor
a direção e a ordem discordam.
Construindo a consulta no DynoTable
Para montar a própria condição-chave (e ver os mapas de nome de atributo correspondente/value),
use o construtor de expressão DynamoDB. Para o
solicitação inteira - índice, Limit e ScanIndexForward incluídos - o
query builder compõe a Consulta e emite um
programa executável SDK v3, CLI ou boto3.
No DynoTable, você lê uma guia através de uma chave escolhida e define a direção de classificação na guia
com um botão de alternância – não há necessidade de escrever ScanIndexForward à mão. Vire para visualizar
resultados mais recentes.

Armadilhas + próximos passos
ScanIndexForwardinverte, não classifica por um atributo arbitrário. A ordem é sempre pela chave de classificação — para classificar por outra coisa, você precisa desse atributo como um chave de classificação (geralmente por meio de um GSI).- Não leia tudo e depois reverta em seu aplicativo — defina o sinalizador e adicione
Limit. - Mantenha o sinalizador consistente ao paginar uma consulta de várias páginas, ou o cursor luta contra o ordem.
- Deseja numérico mais novo primeiro? Uma chave de classificação digitada em número já classifica numericamente. Somente se você incorporou números dentro de uma chave de classificação string, você precisa adicione-os com zero para que a ordem lexicográfica corresponda.
- Relacionado: estratégias de chave de classificação e paginação.
Quer inverter a ordem dos resultados sem tocar nos parâmetros do API? Baixe DynoTable e consulte suas tabelas diretamente.
Chaves de classificação compostas e numéricas
A ordem decrescente segue regras do tipo chave de classificação, não seu modelo mental de "mais recente":
| Chave de classificação armazenada como | Descer dá a você | Entendi |
|---|---|---|
Sequência ISO-8601 UTC 2026-06-27T10:09:00Z | Carimbo de data/hora mais recente primeiro | A ordem lexicográfica corresponde à cronologia quando o fuso horário é fixo |
String de época com preenchimento de zeros 00000000001009 | Sequência mais alta primeiro | Números não preenchidos são classificados incorretamente ("9" > "10") - consulte preenchimento de zero |
Tipo de número N | Maior valor numérico primeiro | Ordem numérica natural, não string |
Prefixo de status STATUS#open#... | Lexicográfico reverso em SK completo | Não é o mesmo que "aberto mais recentemente", a menos que esteja codificado no sufixo |
Se "mais recente" significar algo diferente da chave de classificação — por exemplo, classificar por
points dentro da mesma partição do jogo – você precisa dessa métrica na classificação
key (ou em um GSI cuja chave de classificação é points), não uma classificação pós-consulta em
código do aplicativo.
Limit com leituras descendentes
O Limit limita os itens avaliados, não os itens retornados após um filtro. Par
ScanIndexForward=false com Limit=10 em uma chave de classificação ordenada por tempo para buscar o
dez eventos mais recentes em uma partição lida.
Custo de exemplo: dez itens de 2 KB em um Query descendente tocam 20 KB → 3
RCU eventualmente consistente (arredondado para blocos de 4 KB). Lendo a partição inteira
de 10.000 eventos para reverter no código do aplicativo atinge aproximadamente 20 MB → milhares de
RCU para o mesmo widget de UI. Modele o tamanho da sua partição com o
calculadora de tamanho do item antes de escolher
Limit.
A paginação permanece direcional
Ao paginar com ExclusiveStartKey, mantenha ScanIndexForward idêntico em
cada pedido. Inverter o sinalizador entre páginas inverte a semântica do cursor –
você pode pular ou duplicar linhas.
Para APIs expondo "carregar mais", codifique em base64 o LastEvaluatedKey de forma opaca;
os clientes não devem alterar os componentes da chave de classificação. Veja
paginação para padrões de token.
Paridade PartiQL e SDK
PartiQL As consultas ExecuteStatement aceitam a mesma semântica de ordenação através
parâmetros Query subjacentes quando o executor mapeia para uma leitura de condição-chave.
O construtor de consultas emite SDK v3, CLI ou boto3
programas com ScanIndexForward conectados explicitamente – útil quando sua equipe mixa
Consultas ad hoc PartiQL com código SDK de produção.
Padrões de acesso que usam ordem decrescente
- Feeds de atividades —
SKé um carimbo de data/hora ISO; descendente +Limitproduz um janela recente. - Placares — tecla de classificação numérica
score; melhores pontuações em superfícies descendentes quando a chave de partição abrange um jogo ou temporada. - Audit tail — chaves de classificação
EVENT#<ts>somente anexadas; descendente mostra o mais novo eventos primeiro sem um GSI.
Quando a IU também precisa de histórico ascendente ("mostrar o mais antigo primeiro"), a mesma consulta
com ScanIndexForward=true evita duplicação de dados ou manutenção de dois índices.
Experimente alternar para dados reaisConecte o DynoTable, abra uma guia de consulta em uma partição com uma chave de classificação ordenada por tempo,
vire ascendente/descending e assista à reordenação da grade sem editar API
parâmetros. Compare a capacidade consumida no log de operação — encaminhamento e
leituras reversas no mesmo Limit devem corresponder.


