[database] DynamoDB
Updated:
개요
- 사이트
- 완전관리형 NoSQL 데이터베이스 서비스
- key-value 데이터베이스
- key-value 쌍의 집합을 데이터로 저장
구성 요소
- 테이블
- 리전에 종속적
- 기본 테이블
- 인덱스가 속한 테이블
- a 테이블에 b 인덱스를 만들었을 경우
- b 인덱스의 기본 테이블은 a
- 글로벌 테이블
- 완전관리형 다중 리전 다중 활성 데이터베이스 옵션
- 복제 솔루션을 직접 구축하여 관리하지 않고도 다중 리전의 다중 활성 데이터베이스를 배포할 수 있는 완전관리형 솔루션을 제공
- 항목
- RDB의 행
- 항목을 구분 짓는 기본키가 있어야 하며 기본키를 제외하고 스키마는 없음
- 각 항목마다 서로 다른 속성을 가질 수 있음
- 속성
- RDB의 열
- 최대 32개 깊이의 중첩 속성 지원
- 기본 키
- 테이블 생성 시 지정해야 함
- 종류
- 파티션 키
- 하나의 속성으로 구성
- 파티션 수와 상관없이 항목을 테이블의 파티션에 균일하게 분배하는 데 최적화되어 있으므로 항목 수에 비해 많은 수의 고유 값을 가질 수 있는 파티션 키를 선택할 것을 권장
- 파티션 키 및 정렬 키
- 파티션 키 값이 동일한 모든 항목은 정렬 키 값을 기준으로 정렬되어 함께 저장
- 파티션 키 값이 같을 경우 정렬 키 값이 달라야 함
- 파티션 키
- 보조 인덱스
- 기본 키 이외에 대체 키를 사용하여 쿼리를 해야할 경우 사용
- 인덱스 키 속성은 문자열, 숫자, 이진수 중 하나여야 함
- 종류
- 글로벌 보조 인덱스(GSI)
- 파티션 키 및 정렬 키가 테이블과 다를 수 있는 인덱스
- 최종적 일관된 읽기만 지원
- 로컬 보조 인덱스(LSI)
- 기본 테이블과 파티션 키는 동일하지만 정렬키가 다른 인덱스
- 테이블 생성 시에만 생성 가능
- 생성 후에는 삭제 불가
- 보조 인덱스가 있는 테이블을 2개 이상 생성하려면 순차적으로 해야함
- 테이블 당 최대 5개 생성 가능
- 글로벌 보조 인덱스(GSI)
- Streams
- 테이블의 데이터 수정 이벤트를 캡처하는 선택적 기능
- 이벤트에 대한 데이터가 발생 순서대로 실시간(거의)으로 스트림에 표시
- 테이블에서 스트림을 활성화하면 이벤트 하나가 발생할 때마다 스트림 레코드를 기록
- 이벤트 종류
- 항목 추가
- 전체 항목의 이미지 캡쳐
- 항목 업데이트
- 수정된 속성의 사전 및 사후 이미지를 캡쳐
- 항목 삭제
- 삭제되기 전 전체 항목 이미지를 캡쳐
- 항목 추가
- AWS Lambda의 트리거로 사용 가능
- 스트리밍 모델
API
- 컨트롤 플레인
- 테이블 CRUD
- CreateTable, DescribeTable, ListTables, UpdateTable, DeleteTable
- 데이터 플레인
- 데이터 CRUD
- PartiQL - SQL 호환 쿼리 언어
- ExecuteStatement
- 단일 항목 CRUD
- BatchExecuteStatement
- 여러 항목 CRUD
- ExecuteStatement
- 클래식 API
- 생성
- PutItem
- 단일 항목 CRUD
- BatchWriteItem
- 최대 25개의 항목 생성
- PutItem
- 읽기
- GetItem
- 단일 항목 읽기
- BatchGetItem
- 하나 이상의 테이블에서 최대 100개의 항목 가져오기
- Query
- 특정 파티션 키가 있는 모든 항목 가져오기
- Scan
- 지정한 테이블 혹은 인덱스의 모든 항목 가져오기
- GetItem
- 수정
- UpdateItem
- 항목에서 하나 이상의 속성 수정
- UpdateItem
- 삭제
- DeleteItem
- 단일 항목 삭제
- BatchWriteItem
- 최대 25개의 항목 삭제
- BatchWriteItem
- 하나 이상의 테이블에서 여러 항목을 삭제
- DeleteItem
- 생성
- Streams
- ListStreams
- 모든 스트림 목록 또는 특정 테이블의 스트림 반환
- DescribeStream
- 해당 Amazon 리소스 이름(ARN) 및 애플리케이션이 처음 몇 개 스트림 레코드를 읽기 시작할 수 있는 위치와 같은 스트림에 대한 정보를 반환
- GetShardIterator
- 샤드 반복자를 반환
- 샤드 반복자
- 애플리케이션이 스트림에서 레코드를 가져오는 데 사용하는 데이터 구조
- GetRecords
- 지정된 샤드 반복자를 사용하여 하나 이상의 스트림 레코드 가져오기
- ListStreams
- 트랜잭션
- PartiQL - SQL 호환 쿼리 언어
- ExecuteTransaction
- 양자택일 결과가 보장되는 테이블 내와 테이블 간 모두에서 여러 항목에 대한 CRUD 작업을 허용하는 배치 작업
- ExecuteTransaction
- 클래식 API
- TransactWriteItems
- 양자택일 결과가 보장되는 테이블 내와 테이블 간 모두에서 여러 항목에 대한 CUD 작업을 허용하는 배치 작업
- TransactGetItems
- 하나 이상의 테이블에서 여러 항목을 가져오는 Get 작업을 허용하는 배치 작업
- TransactWriteItems
- PartiQL - SQL 호환 쿼리 언어
SDK Documentation
이름 지정 규칙
데이터
읽기 정합성
- 최종적 일관된 읽기(Eventually Consistent Reads)
- 모든 읽기 작업의 기본 읽기 일관성 모델
- 최근에 완료된 쓰기 작업은 읽기 응답에 반영되지 않을 수 있음
- 읽기 요청을 반복하면 보다 최근 데이터를 응답
- 최종적으로는 모든 쓰기 작업이 완료된 최신 데이터를 응답
- 비용은 강력한 일관된 읽기의 절반
- 강력한 일관된 읽기(Strongly Consistent Reads)
- GetItem, Query, Scan 같은 읽기 작업은 선택적 ConsistentRead 파라미터를 제공
- 읽기 요청 이전에 성공한 모든 쓰기 작업이 반영된 최신 데이터를 응답
- 테이블과 로컬 보조 인덱스에서만 지원
- 글로벌 테이블 읽기 일관성(Global tables read consistency)
- 다중 활성 및 다중 리전 복제를 위한 글로벌 테이블 지원
- 서로 다른 AWS 리전에 있는 여러 복제본 테이블로 구성
- 복제본 테이블의 항목이 변경되면 동일한 글로벌 테이블에 있는 다른 모든 복제본에 변경 내용이 복제
- 복제는 일반적으로 1초 내에 이루어지며 최종 일관성을 갖음
읽기/쓰기 용량 모드
- 온디맨드
- 용량 계획 없이 초당 수천 개의 요청을 처리할 수 있는 유연한 청구 옵션
- 요청당 지불 가격을 제공하므로 사용하는 만큼에 대해서만 비용을 지불
- 이전에 도달한 트래픽 수준까지 확장 또는 축소할 때 즉시 워크로드를 수용
- 워크로드 트래픽 수준이 새로운 피크를 기록할 경우에는 워크로드를 수용하기 위해 신속하게 조정을 수행
- 한 자릿수 밀리초 지연 시간, 서비스 수준 계약(SLA) 약정 및 보안을 제공
- 새로운/기존 테이블 모두 사용 가능
- 사용 사례
- 알 수 없는 워크로드를 포함하는 테이블을 새로 만들 경우
- 애플리케이션 트래픽이 예측 불가능한 경우
- 사용한 만큼에 대해서만 지불하는 요금제를 사용하려는 경우
- 프로비저닝
- 애플리케이션에 필요한 초당 읽기 및 쓰기 횟수를 지정
- Auto Scaling을 사용하여 트래픽 변경에 따라 테이블의 프로비저닝된 용량을 자동으로 조정 가능(기본적으로 활성화)
- 사용 사례
- 애플리케이션 트래픽이 예측 가능한 경우
- 트래픽이 일관되거나 점진적으로 변화하는 애플리케이션을 실행할 경우
- 비용 관리를 위해 용량 요구 사항을 예측할 수 있는 경우
테이블 클래스
- 모든 테이블은 테이블 클래스와 연결
- 변경 가능
- 종류
- Standard
- 기본값
- Standard-IA(Infrequent Access)
- 스토리지 비용이 많이 드는 테이블에 최적화
- 로그, 과거 게시물, 주문 내역 등 자주 액세스하지 않는 데이터를 저장하는 테이블에 적합
- Standard
DynamoDB의 다운로드 가능 버전
- Amazon DynamoDB 웹 서비스 외에도 컴퓨터에서 실행할 수 있고 코드 개발 및 테스트에 적합한 DynamoDB의 다운로드 가능 버전을 제공
- 배포
액세스
Auto Scaling
- 낮에 사용량이 늘어나고 밤에 줄어든다거나, 게임이 출시 초반에는 사용자가 적다가 점점 많아 진다거나 하는 경우 프로비저닝된 처리 능력을 실제 트래픽 패턴에 따라 사용자 대신 동적으로 조정
- 인덱스에도 동일한 정책을 적용하는 것을 권장
TTL
- 항목 별 타임스탬프를 정의하여 항목이 더 이상 필요하지 않은 시점을 결정
- 지정된 타임스탬프의 날짜 및 시간이 지난 직후 테이블에서 항목을 삭제
Pagination
Transactions
Accelerator(DAX)
- 인 메모리 캐시로서 최종적 일관된 읽기 워크로드의 응답 시간을 한 자릿수 밀리초에서 마이크로초까지 대폭 감소