Cómo Query DynamoDB en Descorden final
De forma predeterminada, DynamoDB Query devuelve elementos en orden de clave de clasificación ascendente. pero la mayoría
Los patrones de acceso "dame lo último" quieren lo contrario: lo más nuevo primero. La perilla es una
booleano único en Query: ScanIndexForward. Configúrelo en false y lo mismo
query lee la partición al revés.
Es un parámetro, pero hace tropezar a la gente porque es fácil de confundir con la clasificación. los resultados después del hecho (lo cual DynamoDB no hace) y porque el nombre dice backwards de lo que controla.
¿Cómo hago query DynamoDB en descorden final?
Establezca ScanIndexForward=false en el Query. De forma predeterminada, DynamoDB devuelve elementos en orden de clasificación ascendente; Al invertir este único booleano se lee la partición al revés, lo que le brinda los primeros resultados más recientes cuando su clave de clasificación es una marca de tiempo o una secuencia. Solo cambia el orden, no qué elementos coinciden, y las lecturas inversas cuestan exactamente lo mismo que las directas.
ScanIndexForward=true(predeterminado) → orden de clasificación ascendente.ScanIndexForward=false→ descorden final: el más nuevo primero cuando su clave de clasificación es una marca de tiempo o secuencia.- Solo afecta el pedido, no los artículos que coinciden; la condición clave aún decide eso.
- Es gratis. El pedido inverso cuesta lo mismo que el directo; DynamoDB lee el orden almacenado de la partición de cualquier manera.
- Utilice
Limitcon él para obtener "la N más reciente" en una lectura económica.
El problema: "muéstrame primero la última versión"
Supongamos que ejecuta una tabla de clasificación multijugador y almacena los eventos de puntuación de cada jugador en uno clave de partición, ordenada por una marca de tiempo creciente:
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 pointsEl panel necesita las puntuaciones más recientes. Un simple Query en GAME#42 devuelve
los más antiguos primero, por lo que estaría tentado a leer todo y revertirlo en su aplicación.
derrochador y roto en el momento en que agregas Limit. DynamoDB puede devolverlos
más nuevo primero directamente.
Cómo funciona ScanIndexForward
Los elementos de una partición se almacenan físicamente ordenados por clave de clasificación. Un Query camina
ese orden; ScanIndexForward simplemente elige la dirección de la caminata:
true(predeterminado): comienza en la clave de clasificación más baja y sube (ascendente).false: comienza en la clave de clasificación más alta, camina hacia abajo (descfinal).
Fundamentalmente, esta es una propiedad de la lectura, no de la tabla: los mismos elementos, los mismos
Condición clave, recién invertida. Y debido a que DynamoDB solo elige una dirección sobre
datos ya ordenados, las siguientes lecturas son
exactamente igual de barato
como ascendentes. Combínalo con Limit=10 y obtendrás "los 10 puntajes más recientes".
eventos" en un único y de costo mínimo Query.
Una sutileza: al paginar hacia atrás a través de un conjunto de resultados final desc, el
LastEvaluatedKey/ExclusiveStartKey el cursor aún funciona, solo manténgalo
ScanIndexForward=false consistente en todas las páginas del mismo query, o el cursor
la dirección y el orden no están de acuerdo.
Construyendo el query en DynoTable
Para ensamblar la condición clave en sí (y ver los mapas de nombre/valor de atributo coincidentes),
utilice el generador de expresiones DynamoDB. Para el
solicitud completa (índice, Limit y ScanIndexForward incluidos)
query constructor compone el Query y emite un
programa ejecutable SDK v3, CLI o boto3.
En DynoTable, lees una pestaña a través de una clave elegida y estableces la dirección de clasificación en la pestaña
con un interruptor: no es necesario escribir a mano ScanIndexForward. Voltéalo para obtener una vista previa
Los primeros resultados más recientes.

Escollos + próximos pasos
ScanIndexForwardse invierte, no ordena por un atributo arbitrario. El orden es siempre por la clave de clasificación: para ordenar por otra cosa necesitas ese atributo como a clave de clasificación (a menudo mediante una GSI).- No leas todo y luego inviertes en tu aplicación: configura la bandera y agrega
Limit. - Mantenga la bandera consistente mientras pagina un query de varias páginas, o el cursor lucha contra el orden.
- ¿Quieres números numéricos más nuevos primero? Una clave de clasificación escrita con números ya ordena numéricamente. Sólo Si ha incrustado números dentro de una clave de clasificación cadena, ¿necesita hacerlo? rellene con ceros para que el orden lexicográfico coincida.
- Relacionado: estrategias de clave de clasificación y paginación.
¿Quiere invertir el orden de los resultados sin tocar API parámetros? Descarga DynoTable y query tus tablas directamente.
Claves de clasificación compuestas y numéricas
Descel orden final sigue reglas de tipo clave de clasificación, no tu modelo mental de "último":
| Ordenar clave almacenada como | Descfinalizar te ofrece | Gotcha |
|---|---|---|
Cadena UTC ISO-8601 2026-06-27T10:09:00Z | La marca de tiempo más reciente primero | El orden lexicográfico coincide con el cronológico cuando se fija la zona horaria |
Cadena de época rellena con ceros 00000000001009 | Secuencia más alta primero | Los números sin relleno se ordenan mal ("9" > "10"); consulte relleno de ceros |
Tipo de número N | El valor numérico más grande primero | Orden numérico natural, no cadena |
Prefijo de estado STATUS#open#... | Lexicografía inversa en SK completo | No es lo mismo que "abierto más recientemente" a menos que esté codificado en el sufijo |
Si "más reciente" significa algo distinto a la clave de clasificación (por ejemplo, ordenar por
points dentro de la misma partición del juego: necesitas esa métrica en el orden
clave (o en un GSI cuya clave de clasificación es points), no una clasificación post-query
código de aplicación.
Limit con desc lecturas finales
Limit cubre elementos evaluados, no elementos devueltos después de un filtro. par
ScanIndexForward=false con Limit=10 en una clave de clasificación ordenada en el tiempo para recuperar el
diez eventos más recientes en una partición leída.
Costo de ejemplo: diez elementos de 2 KB en un descfinal Query toque 20 KB → 3
eventualmente consistente RCU (redondeado a bloques de 4 KB). Leyendo toda la partición
de 10.000 eventos para revertir en el código de la aplicación toca ~20 MB → miles de
RCU para el mismo widget de interfaz de usuario. Modele el tamaño de su partición con el
calculadora de tamaño de artículo antes de elegir
Limit.
La paginación permanece direccional
Cuando pagina con ExclusiveStartKey, mantenga ScanIndexForward idéntico en
cada solicitud. Al girar la bandera entre páginas se invierte la semántica del cursor:
puedes omitir o duplicar filas.
Para API que exponen "cargar más", codifique en base64 el LastEvaluatedKey de forma opaca;
clients no deben mutar los componentes de clave de clasificación. Ver
paginación para token patrones.
PartiQL y SDK paridad
PartiQL ExecuteStatement consultas aceptan la misma semántica de ordenación a través de
Query parámetros subyacentes cuando el ejecutor se asigna a una lectura de condición clave.
El query constructor emite SDK v3, CLI o boto3.
programas con ScanIndexForward conectados explícitamente: útiles cuando su equipo se mezcla
PartiQL consultas ad hoc con SDK código de producción.
Patrones de acceso que usan descorden final
- Fuentes de actividad:
SKes una marca de tiempo ISO; descfinal +Limitproduce un ventana reciente. - Leaderboards — clave de clasificación numérica
score; descsuperficies finales puntuaciones más altas cuando la clave de partición abarca un juego o temporada. - Cola de auditoría:
EVENT#<ts>claves de clasificación de solo anexar; descfinal muestra lo más nuevo eventos primero sin un GSI.
Cuando la interfaz de usuario también necesita un historial ascendente ("mostrar el más antiguo primero"), lo mismo query
con ScanIndexForward=true evita duplicar datos o mantener dos índices.
Pruebe la opción de alternar entre datos reales
Conecte DynoTable, abra una pestaña query en una partición con una clave de clasificación ordenada por tiempo,
voltee ascendente/descfinal y observe cómo se reordena la cuadrícula sin editar API
parámetros. Compare la capacidad consumida en el registro de operaciones: avance y
las lecturas inversas en el mismo Limit deben coincidir.


