-
[DynamoDB (2)] DynamoDB 사용하기전 핵심 개념AWS 2023. 2. 16. 21:19
DynamoDB 사용에 앞서 주요 용어와 개념을 기록한다.
1. 주요 개념과 용어 설명
1) Table
- 데이터를 저장하는 공간이다. 모든 테이블은 0 또는 다수의 Items를 collection으로 가진다.
- People 테이블 예제
- Table은 Item를 가지고, Item은 Attribute를 가진다.
- Table은 schemaless가 특징이며 Attributes나 Data type이 미리 정의될 필요 없다.
- 예시)
People // table // an item { "PersonID": 101, // primary key "LastName": "Smith", // attributes "FirstName": "Fred", // attributes "Phone": "555-4321" // attributes }
2) Item
- Attributes의 collection이다.
- 모든 item은 유니크한 Primary Key를 가진다.
3) Attribute
- 가장 하위의 key-value 값
- 대부분의 attribute는 1개의 값만 가질 수 있다.
- address와 같이 32 levels deep까지 중첩의 attribute 값을 지원하기도 한다.
4) Primary Key
- DynamoDB는 Primary key로만 데이터를 검색할 수 있다.
- Primary Key의 종류
- Partition Key
- Hash Index 역할, 빠른 속도로 검색 영역을 제한하여 조회 가능하고 삽입 / 삭제가 빠르다.
- string, number, or binary 세 가지의 데이터 타입만 올 수 있다.
- 항상 == 연산자만 사용 가능
- Partition Key로 테이블 설계에 사용되는 용도 예시
- 서비스 이용자 프로파일
- 세션 스토어
- 이커머스 상품 정보 (장바구니)
- 복합키 (Partition Key + Sort Key)
- Sort Key
- B-tree Index 역할, 항상 정렬되어 있다. 삽입 / 삭제 시 정렬 발생하고, 정렬된 상태로 범위 제한하기 좋다.
- 내림차순, 오름차순 검색, range 기능 지원
- begins with
- between
- counts…
- 1:N 관계 설정 시 중요 역할
- 많이 사용 되는 값
- 알바벳, 숫자, 타임스템프, ULID, KSUID
- Partition Key + Sort Key로 테이블 설계시에 많이 사용 되는 용도
- IoT 로그
- 소셜 네트워크의 포스트 리스트
- 주문 상세 정보 혹은 이력
- Sort Key
- 스케일링이 발생할때 기억해야될 것
- 데이터 양이 올라가면 → 파티션이 늘어난다.
- AWS에서 파티션을 고르게 Hash 값으로 입력해서 분배한다.
- 작은 규모로 확장을 잘하도록 키를 설계해야한다.
- 각 파티션은 1 WCU, 3 RCU, 10 GB 제약 조건 항상 기억하기 (WCU? RCU? 아래 서술할 제약조건 참조)
- Partition Key
5) secondary indexes (보조 인덱스)
- Index를 추가하면 index를 기준으로 테이블을 복제하여 읽기에 사용한다.
- 사용하는 순간 과금 발생이 일어나기 때문에 사용 안하는 것이 Best! 사용하더라도 최소로 한다.
- 대안키로 table을 quary할 수 있게 하여, 애플리케이션에 more flexibility를 제공
- 하나의 테이블에 1개 이상의 secondary indexes를 생성할 수 있다.
- 2가지 종류의 보조 인덱스 제공
- Global secondary index
- 파티션키, 정렬키가 테이블과 다를 수 있는 인덱스
- RDBMS에서의 인덱스와 같은 역할을 한다.
- 테이블 생성 후에도 삭제, 추가 가능
- Local secondary index
- 파티션키는 테이블과 같지만, 정렬키는 테이블과 다른 인덱스
- 테이블 생성시에만 적용할 수 있고 까다롭다.
- Global secondary index
2. 제약 조건
2.1. 처리량 (DynamoDB는 비용 산정을 초당 발생하는 요청 수로 한다. RCU, WCU)
- RCU (Read Capacity Unit) : 4KB (읽기 요청)
- WCU (Write Capacity Unit) : 1KB (쓰기 요청)
- 쓰기 읽기는 독립적으로 수행된다.
2.2. 사이즈
- 아이템의 최대 크기는 400 KB (그러나 모두 사용하는건 권장하지 않음)
- 아이템 사이즈는 작게, 개수는 여러개로 관리하는 것을 권장
- 스케일링은 파티션을 통해 일어난다.
- 각 파티션은 1,000 WCU/초 혹은 3,000 RCU/초를 제공하여 둘중 하나가 초과하면 파티션이 늘어나는 구조
- 데이터 용량이 10GB 초과 시 파티션 늘어남
3. DynamoDB API
ORM 처럼 DB가 store 역할을 하고 API로 CRUD 기능 지원
3.1 Control plane
- DynamoDB 테이블 생성, 관리
- CreateTable
- DescribeTable → 테이블에 대한 정보 조회 (schema, throughput(초당 처리 작업 수) 설정, 인덱스 정보)
- ListTable → 나의 모든 테이블 이름 목록 조회
- UpdateTables → 테이블 수정 / 인덱스 생성, 삭제 / DynamoDB 스트림 수정
- DeleteTable → 테이블 삭제
3.2 Data plane
- 테이블에 대한 CRUD API
- PartiQL 사용 (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html)
- ExecuteStatement
- PutItem (쓰기)
- GetItem, Query, Scan
- 데이터 읽기 (API)
- GetItem
- 정확히 1개의 아이템을 반환
- 조건에 맞는 아이템이 없으면 0개 반환
- 아티템 크기에 따라 RCU 소비
- Query
- Partition Key의 정확한 값 지정
- 선택적으로 non-key 어트리뷰트에 필터링 가능
- 일치하는 아이템 여러개 반환 가능
- 아이템 크기에 따라 RCU 소비
- Scan
- RDB에서 풀스캔 같은 것
- 단 1MB 단위로 단일 호출도 가능하고, 페이지네이션 제공
- RDB에서 풀스캔 같은 것
- GetItem
- 데이터 읽기 (API)
- UpdateItem
- DeleteItem
- BatchExecuteStatement → 다수 테이블의 읽기, 쓰기, 삭제
- BatchGetItem
- 단일 호출로 최대 100개 아이템 혹은 최대 16MB 반환
- BatchWriteItem
- 단일 호출로 최대 25 PutItem 혹은 DeleteItem 수행하며 최대 16MB 쓰기
- 여러시점 나눠서 작업하는 것이 좋다.
- BatchGetItem
- ExecuteStatement
5.4 Transaction
- ExecuteTransaction
- TransactWriteItems
- TransactGetItems
- AWS Korea 영상 세미나
- DynamoDB 디자인패턴, Key 디자인 : https://www.youtube.com/watch?v=I7zcRxHbo98
- 기초 사용법
- DynamoDB 입문 Deep Dive : https://aerocode.net/298
- 우아한테크 기술블로그 : https://techblog.woowahan.com/2633/
반응형'AWS' 카테고리의 다른 글
2023 AWS 웹 호스팅하기 (Route53, S3, ACM, CloudFront) (0) 2023.05.31 EC2에 JAVA 17, Jenkins 설치하기 (0) 2023.05.01 [DynamoDB (1)] DynamoDB란? DynamoDB 사용 조건, DynamoDB 핵심 개념 설명 (0) 2023.02.16 AWS CloudFront Caching 하기 (0) 2022.07.15 CloudFront 주요 기능 정리 (0) 2022.07.15