DynamoDB
DynamoDB는 Amazon에서 개발한 NoSQL 데이터베이스로, AWS 플랫폼을 통해 서비스된다.
NoSQL(Not Only SQL)은 전통적인 관계형 데이터베이스(RDBMS)와 다른 방식으로 데이터를 관리하는 비관계형 데이터베이스를 의미한다.
동시성에 최적화된 구조이다.
동시성?
여러 사용자가 동시에 데이터 베이스를 액세스 하거나 작업을 수행할 수 있도록 하는것.
데이터 모델
- DynamoDB는 Key-Value기반의 데이터베이스이다. Key-Value는 검색/저장 작업이 매우 빠르다
- RDBMS의 row와 column은 DynamoDB에서 각각 item과 attribute로 불린다.
- 스키마리스(Schema-less) 구조로, attribute의 개수가 고정되지 않고 가변적이다. 유연한 추가/삭제
Key 구조
key가 없으면 Table 생성이 불가능하다.
1. 필수 요소인 Partition Key
- 데이터가 물리적으로 분할되어 저장되는 기준이 되는 컬럼
- 테이블 생성 시 반드시 지정해야 한다.
2. 선택 요소인 Sort Key
- 필요에 따라 추가할 수 있는 보조 키
- Partition Key와 함께 복합 기본 키(PK)를 구성할 수 있다.
검색 방식
- 스캔(Scan): 전체 데이터를 검색하는 풀스캔 방식
- 쿼리(Query): 인덱스를 활용한 효율적인 검색 방식
- 쿼리 조건
- Partition Key는 equals(=) 조건만 사용 가능
- Sort Key는 equals(=)와 범위 조건 모두 사용 가능
보조 인덱스
기본 키를 통한 검색이 제한될 경우를 대비해 보조 인덱스를 통한 빠른 검색을 지원한다.
1. GSI (Global Secondary Index)
- Partition Key와 Sort Key를 새로 정의
- 테이블 전체 범위에서 최대 20개까지 생성 가능
2. LSI (Local Secondary Index)
- Partition Key는 유지하고 Sort Key만 새로 정의
- 파티션 내부 범위에서 최대 5개까지 생성 가능
NULL 값 처리
- attribute에서만 NULL 값 저장이 가능하다.
- NULL 값과 속성 생략은 다른 개념이다.
- 쿼리 실행 시 NULL 값 기준 검색은 불가능하며, attribute_exists를 사용해야 한다. 이 점을 고려해서 설계 필요
TTL (Time To Live)
- item 의 만료 시간을 지정하여 만료된 데이터를 자동으로 삭제한다. 일반적으로 48시간 내에 삭제된다.
- TTL attribute는 초단위인 unix timestamp 으로 저장해야 한다.
- TTL 설정을 위한 데이터 쓰기 비용과, TTL을 통한 데이터 삭제 비용은 0원이다. DynamoDB의 일반적인 데이터 쓰기나 삭제는 비용이 발생하지만, TTL 관련 작업은 모두 무료다.
싱글 테이블 디자인
DynamoDB는 단일 테이블 설계를 권장한다.
- 하나의 테이블에 여러 데이터를 저장하되, PK를 통해 논리적으로 데이터를 분리한다.
- JOIN을 지원하지 않는 대신, 단일 테이블 검색 성능이 RDBMS보다 우수하다.
- PK 관리를 통해 RDBMS와 유사한 방식으로 여러 엔티티를 효율적으로 관리할 수 있다.
대영님 PPT
NoSQL로 테이블을 생성해보자! (feat.DynamoDB, AWS)