DynamoDB
DynamoDB의 특징
- NoSQL 데이터베이스
- NoSQL 데이터베이스이기 때문에 JOIN, 정규화가 없다.
- 데이터베이스의 성능 향상을 위해 중복을 허용하고 JOIN을 줄이는 반정규화
- RDBMS는 종류나 특성에 따라 테이블을 나누지만 DynamoDB에는 모든것이 하나의 테이블에 표현 가능
- http 통신
- serverless
- AWS lambda와 같은 서버리스 기반 서비스와 같이 사용하기에 좋다.
- key-value 데이터베이스
- key를 제외한 테이블 속성을 미리 정의할 필요가 없다.
- auto-scailing
- AWS IAM으로 관리 가능
key
partition key (PK, hash key) 파티션키
- 물리적인 공간인 파티션을 구분하기 위한 키
- 스케일이 커져도 파티션키를 통해 데이터를 빠르게 조회할 수 있다.
- 파티션 키로는 일치하는 값만 가져올 수 있다.
- 파티션키는 DynamoDB 내에 존재하는 해쉬 함수를 거쳐 데이터를 저장할 파티션을 결정한다. 동일한 파티션을 지닌 데이터는 물리적으로 가까운 위치에 저장되고 이때 데이터를 구분하기 위해 정렬키를 사용한다.
- 정렬 키를 사용하면 동일한 파티션에 저장된 데이터는 정렬키를 기준으로 저장한다.
sort key (SK, range key) 정렬키
- 파티션 안에서 데이터를 정렬하기 위한 키
- dynamoDB에서는 Number, Binary, String 타입 지원
- 범위 지정 방식 검색 가능
- 정렬키만 가지고는 검색할 수 없다. 파티션키 + 정렬키 이용
index
- 특정 컬럼만을 사용해서 쿼리
- 테이블 전체가 아니고 기준점(pivot)을 사용해서 쿼리 이루어지고 성능이 좋다.
LSI 로컬 보조 인덱스
- 파티션키 + 정렬키를 합친 복합 인덱스
- 동일 파티션 키 내에서 정보들을 분리하고 싶을 때 사용한다.
- 로컬 인덱스는 테이블을 만들 때 미리 설정해둬야한다.
GSI 글로벌 보조 인덱스
- 기본키(파티션키)나 정렬키와 별개로 특정키를 인덱스키로 활용한다.
- 콘솔에서 인덱스를 만들 수 있고, 기존 attribute 중 하나를 선택해서 자유롭게 추가 수정 삭제 가능
DynamoDB에서 데이터를 읽어오는 방식 - Query, Scan
Query
- primary key를 활용해서 데이터 검색
- query 사용시 모든 데이터 반환
Scan
- primary key를 사용하지 않고 순차적으로 모든데이터를 불러온다.
- 테이블 크기가 작을 때 사용한다.
=> Query가 더 좋음!
DynamoDB 용량모드
*On-demand 온디맨드 *
- 사용한 만큼 비용을 지불한다.
- 이전 도달 최대 트래픽을 넘는다면 이전 2배에 해당하는 크기로 자동 조정된다.
Provisioned 프로비저닝
- 초당 읽기, 쓰기 횟수 지정
- auto-scailing을 사용해서 트래픽 변경에 따라 프로비저닝된 용량을 자동으로 조정
- 프로비저닝 모드를 사용하면 비용을 예측하는데 도움이 된다.
DynamoDB Stream
- DynamoDB 테이블에 일어나는 삽입, 수정, 삭제 등의 이벤트가 일어날 때 Steams에 기록된다.
- Log는 즉시 암호화가 일어나며 24시간동안 보관한다.
- 이벤트를 기록하고 이벤트 발생을 알리는 용도로 사용한다.