AWS DynamoDB GSI와 LSI
AWS DynamoDB GSI와 LSI — #개발자의도구들 #AWSDynamoDB #다이나모DB #DynamoDBGSI #DynamoDBLSI 참고: ExamP...
#개발자의도구들 #AWSDynamoDB #다이나모DB #DynamoDBGSI #DynamoDBLSI
참고: ExamPotic Disscussion
문제 찾는법 : 여기 최하단
DynamoDB의 key들
DynamoDB에는 보조 인덱스 키를 설정할 수 잇다. 특히 DVA-C02의 단골 문제이기 때문에 개념 정리를 확실하 하고자 한다.
우선 DynamoDB에 다음 테이블을 구축했다고 가정하자
Table: userEvents
PK (PartitionKey): userId
SK (SortKey): ts // ts = 이벤트 발생 시각
{ "userId": "u1", "ts": "2025-08-29T10:00:00Z", "eventType": "LOGIN", "score": 5 }
{ "userId": "u1", "ts": "2025-08-29T10:03:00Z", "eventType": "PURCHASE", "score": 50 }
{ "userId": "u2", "ts": "2025-08-29T10:05:00Z", "eventType": "VIEW", "score": 1 }
이때 dynamoDB는 partition key를 hash function에 넣은 결과로 partition을 결정한다.
hashFunction(pk) -> hash 값으로 pk 결정!
👉 자체적인 hashFunction이 존재
여기서 결정되는 partition들은 실제 물리적 디스크에 분산되어 데이터가 저장된다는 의미이다.
복합키
저장된 데이터를 보면 알겠지만, userId가 중복해서 저장되어 있다. 이는 SK가 추가되었기 때문이며 (PK, SK)가 중복되면 안된다. 즉 (1, 1), (1, 2) 형태는 가능하다는 것
복합키의 경우 복합키 자체로 hash 값을 계산하여 파티션에 분할되어 저장된다. 그래서 두 개의 키 전체를 partition key라고 부르는 것이다.
LSI
Local Secondary Index
LSI의 규칙
- 원본과 같은 PK를 가져야 한다. (이 경우 userId)
- SK는 달라도 된다.
예시)
LSI1: PK=userId, SK=eventType
LSI2: pk=userId, SK=score
사용하는 이유
userId별로 다른 Column 정렬 값을 보고 싶을 때.
👉 userId별 evnetType을 보고 싶거나
👉 userId별 score를 보고 싶거나
🚀 추가특징들
- 테이블 생성 시에만 생성이 가능하다. 이후 추가, 삭제 불가
- 강한 일관성 읽기 지원
- 테이블 RCU/WCU만 사용
- 테이블 용량과 공유한다.
- 같은 파티션 키 값에 대해 테이블 + 모든 LSI 합산 10GB제한
- 테이블당 최대 5개
GSI
Global Secondary Index
GSI의 경우 PK도 다른 값으로 바꿀 수 있다. 기존 테이블과는 완전히 다른 파티션 키이다.
GSI1: PK=eventType, SK= ts
GSI2: PK=email (정렬키 없어도 된다)
🚀 특징
- 테이블 생성 후에도 추가/삭제 가능
- 강한 일관성 미지원
- 인덱스별 RCU/WCU를 따로 가진다. 테이블 쓰기를 하면 테이블 WCU + GSI WCU를 모두 사용함
- 테이블과 독립적으로 자동 스케일링
- 테이블당 최대 20개
- 전혀 다른 접근이 필요한 경우 사용하기