AWS DynamoDB - LSI (Local Secondary Index)
- 테이블에 대체 정렬 키 제공 (Alternative Sort Key)
- 하나의 스칼라 속성으로 존재 (String, Number, Binary)
- 테이블 당 최대 5개 LSI 가능
- 테이블 생성 전 정의
- 테이블로부터 일부 또는 전체 속성 얻을 수 있음 (LSI 생성 시 결정)
- 메인테이블의 WCU, RCU 사용
- 특별히 쓰로틀 고려할 것 없음
AWS DynamoDB - GSI (Global Secondary Index)
- 테이블에 대체 기본 키 제공 (Alternative Primary Key)
- non-key 속성의 쿼리 속도 높이는데 유용
- 하나의 스칼라 속성으로 존재 (String, Number, Binary)
- 해당 인덱스에 대해서는 반드시 RCU, WCU 프로비저닝 해야함
- 테이블 생성 후에도 추가 및 생성 가능
- GSI에서 쓰로틀 발생 시 메인 테이블도 쓰로틀됨
AWS DynamoDB - Accelerator (DAX)
- 완전 관리형, 고가용성의 인메모리 캐시
- 인기있는 데이터 쿼리 시 캐시된 읽기와 쿼리에 대해 마이크로초 지연
- 애플리케이션 로직 변경 없이 기존 DynamoDB API와 호환 (DAX 클러스터 생성)
- 핫키 문제 해결에 유용 (RCU 쓰로틀 방지)
- Application <-> DAX Cluster <-> DynamoDB
- 기본 TTL 5분
- 노드로 구성. 최대 10개 노드
- 프로덕션 권장 사양인 노드가 최소 3개 이상인 다중 AZ 설정 사용 권장 (AZ당 하나씩)
- vs ElastiCache
- DAX는 개별 객체 캐시 / 쿼리&스캔 캐시 (간단한 유형의 쿼리)
- ElastiCache는 복잡한 연산/집계 결과 등 캐시
AWS DynamoDB - Streams
- 테이블에서 item level의 수정에 대한 정렬된 스트림
- KDS, Lambda, Kinesis Client Library applications 등에서 스트림을 읽을 수 있음
- 보존 주기는 최대 24시간
- 사용 사례
- 테이블에서 발생하는 실시간 변경사항에 대응 (환영 이메일 등)
- 분석
- 글로벌 테이블과 cross-region replication 구현 등
- Application -> Table -> DynamoDB Streams -> Kinesis Data Streams -> Kinesis Data Firehose -> Amazon Redshift (분석) / Amazon S3 (아카이빙) / Amazon ElasticSearch (인덱싱)
- 사용자 지정 로직을 태우려면 DynamoDB Streams를 EC2에서 실행되는 KCL App or Lambda에서 읽어 처리 가능 (SNS로 보내 메시지, 알림 처리 가능 / 필터링, 변환을 통해 다시 DynamoDB 테이블에 저장)
AWS DynamoDB - S3와 연동
- 큰 사이즈의 객체를 DynamoDB에 저장
- DynamoDB 테이블에는 400KB 데이터까지만 저장 가능
- 이미지, 영상 등을 저장하기에는 부적합
- S3에 이미지, 영상 저장 -> DynamoDB에 메타데이터 저장 (url 등, S3에 대한 포인터 역할)
- DynamoDB를 S3 객체 메타데이터의 인덱스로 사용
- S3에 저장 -> 알림을 통해 람다 수행 -> 람다는 DynamoDB에 S3 객체의 메타데이터 저장
- S3 버킷의 특정 타임스탬프로 객체 검색 / 사용자 사용 총 스토리지 / 속성에 따라 객체를 리스팅 / 업로드된 S3 객체 검색 등의 애플리케이션 요청에 대해 DynamoDB 테이블 쿼리를 통해 결과를 빠르게 찾고 S3 버킷에서 필요한 객체를 검색
Reference