DynamoDB 복합 기본 키: 파티션 + 정렬 키 설명
복합 기본 키는 파티션 키와 정렬 키. 파티션 키는 항목이 있는 위치를 결정합니다. 정렬 키 해당 파티션 내부의 항목을 주문합니다.
SQL에서는 고유한 id 열이라기보다는 다음과 같이 생각합니다.
GROUP BY partition, ORDER BY sort는 테이블 자체에 구워졌습니다.
DynamoDB 복합 기본 키란 무엇입니까?
DynamoDB 복합 기본 키는 파티션 키와 파티션 키라는 두 가지 속성을 결합합니다.
정렬 키. 파티션 키는 항목이 있는 물리적 파티션을 결정합니다.
정렬 키는 해당 파티션 내부의 항목을 정렬합니다. 그들은 함께 항목을 형성합니다.
고유한 ID를 갖고 단일 Query가 하나 대신 정렬된 범위를 반환하도록 합니다.
아이템.
- 두 부분, 두 가지 작업. 파티션 키는 항목을 물리적 위치로 라우팅합니다. 파티션; 정렬 키는 해당 파티션 키를 공유하는 모든 항목의 순서를 지정합니다.
- 고유성은 쌍입니다. 두 항목은 오랫동안 파티션 키 값을 공유할 수 있습니다. 정렬 키가 다르기 때문에 하나의 파티션이 많은 행을 보유하는 방식입니다.
- 정렬 키가 핵심입니다. 이를 통해
Query가 범위를 반환할 수 있습니다. (>=,between,begins_with) 하나의 항목 대신Scan이 없습니다. - 키는 스칼라여야 합니다. 파티션 및 정렬 키는 문자열, 숫자, 또는 이진 — 지도도 없고 목록도 없습니다(AWS docs).
단순 키 대 복합 키
단순 기본 키는 파티션 키일 뿐입니다. 이는 고유하게 식별합니다.
항목이 있으면 GetItem로 다시 읽어보세요. 그게 다입니다. 범위를 읽지 않습니다.
"최신 N을 주세요."
복합 키는 정렬 키를 추가하며, 그 단일 추가로 인해 DynamoDB는 해시 맵이 아닌 데이터베이스처럼 느껴집니다.
| 간단한 키 | 복합 키 | |
|---|---|---|
| 속성 | 파티션 키만 | 파티션 키 + 정렬 키 |
| 독창성 | 파티션 키 값 | 값의 쌍 |
| 파티션당 여러 항목 | 아니요 | 예 |
Query 범위 | 아니요(GetItem만 해당) | 예(begins_with, between, >) |
| 자연스러운 핏 | 아이디로 조회 | 시계열, 일대다, 기록 |
센서 판독값 테이블 모델링
여러 현장 센서에서 온도 샘플을 수집한다고 가정해 보겠습니다. 접근 패턴은 "시간 내에 하나의 장치에 대한 판독값을 최신 장치부터 가져옵니다. 창". 교과서의 합성키입니다.
장치 ID를 파티션 키로 사용하고 읽기 타임스탬프를 정렬 키:
| deviceId | readingTs | tempC | humidity |
|---|---|---|---|
| DEV#a1b2 | 2026-06-23T08:00:00Z | 21.4 | 48 |
| DEV#a1b2 | 2026-06-23T08:05:00Z | 21.7 | 47 |
| DEV#a1b2 | 2026-06-23T08:10:00Z | 22.1 | 46 |
| DEV#c9d8 | 2026-06-23T08:00:00Z | 19.8 | 55 |
세 개의 DEV#a1b2 판독값은 모두 물리적으로 저장된 동일한 파티션에 저장됩니다.
함께 readingTs로 정렬됩니다.
AWS에서는 파티션 키를 hash 속성, 정렬 키를 range라고 부릅니다. attribute — 정렬 키는 스캔할 수 있는 범위입니다. (AWS docs).
항목은 각 파티션 아래 하나의 로 축소됩니다. 키:
파티션 키에 대한 1 Query은 해당 장치에 대한 모든 판독값을 읽습니다.
이미 타임스탬프 순서로 되어 있습니다. 클라이언트에서 정렬이 없고 두 번째 왕복도 없습니다.
창문 비용
파티션에서 각각 2KB의 10개 판독값을 합하면 측정된 20KB입니다. DynamoDB 라운드
4KB 블록당 최대 읽기를 수행하므로 해당 창에서 최종적으로 일관된 Query 비용이 발생합니다.
3 읽기 요청 단위(20KB → 4KB 블록 5개 × 각각 0.5 RCU). 에이
동일한 창에서 강력한 일관된 읽기 비용은 5 단위(블록당 RCU 1개)입니다.
10개의 개별 GetItem 호출과 최소 1블록을 사용하여 동일한 10개 행을 가져옵니다.
항목당 규칙 적용 → 5 단위 최종 일관성, 10 강력
일관성 — 추가 왕복 횟수를 계산하기 전.
| 패턴 읽기 | 아이템 | 터치된 데이터 | EC 읽기 단위 |
|---|---|---|---|
시작과 끝 사이에 1개의 Query, readingTs | 10 | 20KB | 3 |
전체 복합 키의 경우 10 × GetItem | 10 | 20KB | 5 |
Query 파티션만, 앱에서 습도 필터링 | 10 | 20KB | 3 |
Scan 테이블, 필터 deviceId + 시간 창 | 모두 | 테이블 전체 | 테이블 크기 |
프로토타이핑하는 동안 ReturnConsumedCapacity: TOTAL를 전달합니다. 는
pricing calculator은 그 단위 수를 다음과 같이 바꿉니다.
초당 요청 수를 알면 월별 광고 항목입니다.
범위를 쿼리하고 스캔하지 마세요.
readingTs은 ISO-8601 문자열이므로 사전순으로 동일하게 정렬됩니다.
시간순으로 정렬하는 방식입니다. 따라서 시간 범위 읽기는 핵심 조건 범위입니다.
필터가 아닙니다:
Query
deviceId = "DEV#a1b2"
readingTs BETWEEN "2026-06-23T08:00:00Z" AND "2026-06-23T08:10:00Z"
KeyConditionExpression입니다. DynamoDB 이전 읽기 범위를 좁힙니다.
데이터를 반환하므로 창에 표시된 항목에 대해서만 비용을 지불합니다. A FilterExpression
읽기 이후 실행하고 스캔한 모든 항목에 대해 비용을 청구합니다. 그건
미니어처의 Scan footgun.
자리 표시자와 입력된 값이 있는 표현식 자체는 쓰기가 까다롭습니다.
손으로. 다음을 사용하여 시각적으로 구축하세요.
DynamoDB Expression Builder 및 복사
SDK 호출에 정확히 KeyConditionExpression를 입력합니다.
정렬 키를 의도적으로 디자인
정렬 키는 범위 읽기를 위한 유일한 레버이므로 귀하의 쿼리에 맞게 구성하십시오.
- 정렬 가능한 타임스탬프를 사용하세요. ISO-8601 문자열 또는 에포크 번호 올바르게 정렬하십시오. 원시 현지화된 날짜는 그렇지 않습니다.
- 일대다 의 접두사를 붙입니다. 다음과 같은 정렬 키
READING#2026-06-23T08:00:00Z을 사용하면 하나의 파티션에서 엔터티 유형을 혼합할 수 있습니다.begins_with로 썰어주세요. 그게 이음새야 single-table design. - 카디널리티가 높은 차원을 파티션 키에 넣습니다. 센서 ID에는
수천 개의 값이 있으므로 균등하게 쓰기가 분산됩니다. 낮은 카디널리티 파티션
키(예:
region)는 을 생성합니다.
초당 10,000회 쓰기에 50개의 고유 값만 있는 파티션 키 스트림은 DynamoDB가 분할되기 전에 논리 파티션당 최대 200WCU를 집중합니다 — 프로토타입 규모에서는 괜찮지만 생산 규모에서는 고통스럽습니다. 다음과 같은 식별자를 선호합니다. 대략적인 그룹화를 통해 플릿(장치 ID, 테넌트 ID, 세션 ID)과 함께 성장 의도적으로 제한된 데이터 세트를 같은 위치에 두지 않는 한.
합성키에 물렸을 때
복합 키는 약속입니다. 파티션 키를 선택하고 배송하세요. 그런 다음 다른 그룹화가 필요한 액세스 패턴을 발견합니다 — "모두 전체 차량에서 30°C 이상의 판독값이 표시됩니다."
기본 테이블은 이에 답할 수 없습니다. 파티션 키가 고정되어 있습니다. 귀하의 옵션은 다른 키를 사용하는 global secondary index, 또는 구조 조정.
키 스키마를 커밋하기 전에 읽기를 열거하세요. 기본 키 변경
ALTER TABLE이 아니라 테이블 마이그레이션을 의미합니다.
DynoTable에서 테이블 브라우저를 열고 복합 키 테이블을 옆에서 검사합니다. GSI 측면 — 정렬 키의 정렬 순서는 행별로 표시됩니다. 프로덕션에 도달하기 전에 개별 타임스탬프 형식을 명확하게 만듭니다.
다음 단계
복합 키는 일대다 항목 컬렉션의 기초입니다. 관계 및 가장 유용한 인덱스 디자인 — 읽기 single-table design 및 GSI vs LSI를 클릭하여 어디로 가는지 확인하세요.
에서 KeyConditionExpression를 스케치하세요.
DynamoDB Expression Builder, 전체 방출
query builder에서 Query로 페이지를 매긴 다음
try DynoTable 실제 파티션을 찾아보고 정렬을 확인하세요.
자신의 테이블에 줄을 서서 주문하세요.