DynamoDB를 내림차순으로 쿼리하는 방법
기본적으로 DynamoDB Query는 오름차순 정렬 키 순서로 항목을 반환합니다. 하지만 대부분의
"최신 정보 제공" 액세스 패턴은 그 반대, 즉 최신 정보를 원합니다. 손잡이는
쿼리에 대한 단일 부울: ScanIndexForward. false로 설정하고 동일하게 설정합니다.
쿼리는 파티션을 역방향으로 읽습니다.
하나의 매개변수이지만 정렬과 혼동하기 쉽기 때문에 사람들을 당황하게 합니다. DynamoDB에서는 수행하지 않는 사실 이후의 results 및 이름이 다음과 같기 때문입니다. 그것이 제어하는 것에서 거꾸로.
DynamoDB를 내림차순으로 쿼리하려면 어떻게 해야 합니까?
Query에서 ScanIndexForward=false를 설정하세요. 기본적으로 DynamoDB는 오름차순 정렬 키 순서로 항목을 반환합니다. 이 단일 부울을 뒤집으면 파티션을 역방향으로 읽어 정렬 키가 타임스탬프 또는 시퀀스인 경우 최신순 결과를 제공합니다. 일치하는 항목이 아닌 순서만 변경하며 역방향 읽기 비용은 정방향 읽기 비용과 동일합니다.
ScanIndexForward=true(기본값) → 오름차순 정렬 키 순서.ScanIndexForward=false→ 내림차순 — 정렬 키가 다음인 경우 최신 항목부터 타임스탬프 또는 시퀀스.- 주문에만 영향을 미치며 일치하는 항목이 무엇인지는 중요하지 않습니다. 여전히 핵심 조건입니다. 그것을 결정합니다.
- 무료입니다. 역주문 비용은 전달 비용과 동일합니다. DynamoDB는 다음을 읽습니다. 파티션의 저장된 순서는 어느 쪽이든 가능합니다.
Limit을 사용하면 한 번의 저렴한 읽기로 "가장 최근의 N"을 얻을 수 있습니다.
문제: "최신 내용을 먼저 보여주세요"
멀티플레이어 리더보드를 운영하고 각 플레이어의 점수 이벤트를 하나의 리더보드에 저장한다고 가정해 보겠습니다. 증가하는 타임스탬프를 기준으로 정렬된 파티션 키:
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 points대시보드에는 가장 최근 점수가 필요합니다. GAME#42에 대한 일반 Query 반환
가장 오래된 것부터 시작하므로 모든 내용을 읽고 앱에서 이를 되돌리고 싶은 유혹을 느낄 것입니다.
낭비적이고 Limit를 추가하는 순간 깨집니다. DynamoDB는 이를 다시 돌려줄 수 있습니다.
최신순으로 직접.
ScanIndexForward 작동 원리
파티션의 항목은 정렬 키에 따라 정렬되어 물리적으로 저장됩니다. A Query 걷기
그 순서; ScanIndexForward는 단지 걷는 방향을 선택합니다:
true(기본값) — 가장 낮은 정렬 키에서 시작하여 위로 이동합니다(오름차순).false— 가장 높은 정렬 키에서 시작하여 아래로 내려갑니다(내림차순).
결정적으로 이는 테이블이 아닌 읽기의 속성입니다. 동일한 항목, 동일한
핵심 조건은 반대입니다. 그리고 DynamoDB는 방향만 선택하기 때문에
이미 정렬된 데이터, 내림차순 읽기는
exactly as cheap
오름차순으로. Limit=10과 짝을 이루면 "가장 최근 점수 10개"를 얻게 됩니다.
이벤트"를 단일 최소 비용 쿼리로 처리합니다.
한 가지 미묘한 점: 내림차순 결과 집합을 통해 뒤로 페이징할 때
LastEvaluatedKey/ExclusiveStartKey 커서는 계속 작동합니다. 계속 유지하세요.
ScanIndexForward=false 동일한 쿼리의 모든 페이지 또는 커서에서 일관됩니다.
방향과 순서가 일치하지 않습니다.
DynoTable에서 쿼리 작성
키 조건 자체를 조합하려면(그리고 일치하는 속성 이름/값 맵을 확인하려면)
DynamoDB expression builder를 사용하세요. 에 대한
전체 요청 — 인덱스, Limit 및 ScanIndexForward 포함 —
query builder은 쿼리를 작성하고
실행 가능한 SDK v3, CLI 또는 boto3 프로그램.
DynoTable에서는 선택한 키를 통해 탭을 읽고 탭의 정렬 방향을 설정합니다.
토글 포함 — ScanIndexForward를 손으로 쓸 필요가 없습니다. 미리보기로 뒤집기
최신순 결과.

함정과 다음 단계
ScanIndexForward역순, 임의의 속성으로 정렬되지 않습니다. 순서는 다음과 같습니다. 항상 정렬 키를 사용합니다 — 다른 항목으로 정렬하려면 해당 속성이 필요합니다 as 정렬 키(종종 GSI를 통해).- 앱에서 모두 읽은 다음 역순으로 읽지 마세요 — 플래그를 설정하고
Limit를 추가하세요. - 여러 페이지 쿼리를 페이징하는 동안 플래그를 일관되게 유지하십시오. 그렇지 않으면 커서가 주문.
- 숫자를 최신순으로 원하십니까? 숫자 유형 정렬 키는 이미 숫자순으로 정렬됩니다. 만 문자열 정렬 키 안에 숫자를 삽입한 경우 다음을 수행해야 합니까? zero-pad them이므로 사전 편찬 순서가 일치합니다.
- 관련: sort-key strategies 및 pagination.
API 매개변수를 건드리지 않고 결과 순서를 뒤집고 싶으십니까? Download DynoTable 테이블을 직접 쿼리하세요.
복합 및 숫자 정렬 키
내림차순은 정신적 모델이 아닌 정렬 키 유형 규칙을 따릅니다. "최신":
| 다음으로 저장된 정렬 키 | 내림차순은 당신에게 | 알았어 |
|---|---|---|
ISO-8601 UTC 문자열 2026-06-27T10:09:00Z | 최신 타임스탬프 먼저 | 시간대가 고정된 경우 사전 편찬 순서가 시간순으로 일치합니다. |
제로 패딩된 에포크 문자열 00000000001009 | 가장 높은 순서부터 | 채워지지 않은 숫자 정렬이 잘못되었습니다("9" > "10") - zero-padding |
숫자 유형 N | 가장 큰 숫자 값부터 | 문자열이 아닌 자연 숫자 순서 |
상태 접두사 STATUS#open#... | 전체 SK의 역사전 | 접미사 |
"최신"이 정렬 키 이외의 것을 의미하는 경우(예: 다음을 기준으로 정렬)
points 동일한 게임 파티션 내부 — 정렬에 해당 측정항목 이 필요합니다.
키(또는 정렬 키가 points인 GSI의 경우), 쿼리 후 정렬이 아님
애플리케이션 코드.
Limit(내림차순 읽기 포함)
Limit 캡 항목 평가됨, 필터 후 반환된 항목이 아닙니다. 쌍
ScanIndexForward=false과 Limit=10를 시간순으로 정렬한 정렬 키로 가져오려면
하나의 파티션에서 가장 최근 이벤트 10개를 읽습니다.
비용 예: 하나의 2KB 항목 10개 내림차순 Query 터치 20KB → 3
최종적으로 일관된 RCU(4KB 블록으로 반올림됨) 전체 파티션 읽기
애플리케이션 코드에서 되돌릴 이벤트 10,000개 ~20MB → 수천 개
동일한 UI 위젯에 대한 RCU입니다. 다음을 사용하여 파티션 크기를 모델링하십시오.
item-size calculator 선택하기 전에
Limit.
페이지 매김은 방향성을 유지합니다.
ExclusiveStartKey로 페이지를 호출할 때 ScanIndexForward을 동일하게 유지하세요.
모든 요청. 페이지 간에 플래그를 뒤집으면 커서 의미가 반전됩니다.
행을 건너뛰거나 복제할 수 있습니다.
"더 많은 로드"를 노출하는 API의 경우 17을 불투명하게 base64로 인코딩합니다. 클라이언트는 정렬 키 구성 요소를 변경해서는 안 됩니다. 참조 토큰 패턴의 경우 pagination.
PartiQL과 SDK의 패리티
PartiQL ExecuteStatement 쿼리는 다음을 통해 동일한 순서 의미 체계를 허용합니다.
실행기가 키 조건 읽기에 매핑될 때 기본 Query 매개변수.
query builder는 SDK v3, CLI 또는 boto3을 방출합니다.
ScanIndexForward이 명시적으로 연결된 프로그램 — 팀이 믹싱할 때 유용
프로덕션 SDK 코드를 사용한 PartiQL 임시 쿼리.
내림차순을 사용하는 액세스 패턴
- 활동 피드 —
SK는 ISO 타임스탬프입니다. 내림차순 +Limit는 최근 창. - 리더보드 — 숫자 정렬 키
score; 하강 표면 최고 점수 파티션 키의 범위가 하나의 게임이나 시즌인 경우. - 감사 꼬리 — 추가 전용
EVENT#<ts>정렬 키; 내림차순으로 최신 항목 표시 GSI 없이 먼저 이벤트를 진행하세요.
UI에도 오름차순 기록이 필요한 경우("가장 오래된 것부터 표시") 동일한 쿼리가
ScanIndexForward=true를 사용하면 데이터가 중복되거나 두 개의 인덱스가 유지되는 것을 방지할 수 있습니다.
실제 데이터를 전환해 보세요.
DynoTable을 연결하고 시간순 정렬 키가 있는 파티션에서 쿼리 탭을 엽니다.
API를 편집하지 않고도 오름차순/내림차순을 뒤집고 그리드 재정렬을 볼 수 있습니다.
매개변수. 작업 로그에서 소비된 용량을 비교합니다.
동일한 Limit에 대한 역방향 판독값이 일치해야 합니다.


