Updated:

4 minute read

개요

  • 사이트
  • 완전관리형 NoSQL 데이터베이스 서비스
  • key-value 데이터베이스
  • key-value 쌍의 집합을 데이터로 저장


구성 요소

  • 테이블
    • 리전에 종속적
    • 기본 테이블
      • 인덱스가 속한 테이블
      • a 테이블에 b 인덱스를 만들었을 경우
        • b 인덱스의 기본 테이블은 a
    • 글로벌 테이블
      • 완전관리형 다중 리전 다중 활성 데이터베이스 옵션
      • 복제 솔루션을 직접 구축하여 관리하지 않고도 다중 리전의 다중 활성 데이터베이스를 배포할 수 있는 완전관리형 솔루션을 제공
  • 항목
    • RDB의 행
    • 항목을 구분 짓는 기본키가 있어야 하며 기본키를 제외하고 스키마는 없음
    • 각 항목마다 서로 다른 속성을 가질 수 있음
  • 속성
    • RDB의 열
    • 최대 32개 깊이의 중첩 속성 지원
  • 기본 키
    • 테이블 생성 시 지정해야 함
    • 종류
      • 파티션 키
        • 하나의 속성으로 구성
        • 파티션 수와 상관없이 항목을 테이블의 파티션에 균일하게 분배하는 데 최적화되어 있으므로 항목 수에 비해 많은 수의 고유 값을 가질 수 있는 파티션 키를 선택할 것을 권장
      • 파티션 키 및 정렬 키
        • 파티션 키 값이 동일한 모든 항목은 정렬 키 값을 기준으로 정렬되어 함께 저장
        • 파티션 키 값이 같을 경우 정렬 키 값이 달라야 함
  • 보조 인덱스
    • 기본 키 이외에 대체 키를 사용하여 쿼리를 해야할 경우 사용
    • 인덱스 키 속성은 문자열, 숫자, 이진수 중 하나여야 함
    • 종류
      • 글로벌 보조 인덱스(GSI)
        • 파티션 키 및 정렬 키가 테이블과 다를 수 있는 인덱스
        • 최종적 일관된 읽기만 지원
      • 로컬 보조 인덱스(LSI)
        • 기본 테이블과 파티션 키는 동일하지만 정렬키가 다른 인덱스
        • 테이블 생성 시에만 생성 가능
        • 생성 후에는 삭제 불가
        • 보조 인덱스가 있는 테이블을 2개 이상 생성하려면 순차적으로 해야함
        • 테이블 당 최대 5개 생성 가능
  • Streams
    • 테이블의 데이터 수정 이벤트를 캡처하는 선택적 기능
    • 이벤트에 대한 데이터가 발생 순서대로 실시간(거의)으로 스트림에 표시
    • 테이블에서 스트림을 활성화하면 이벤트 하나가 발생할 때마다 스트림 레코드를 기록
    • 이벤트 종류
      • 항목 추가
        • 전체 항목의 이미지 캡쳐
      • 항목 업데이트
        • 수정된 속성의 사전 및 사후 이미지를 캡쳐
      • 항목 삭제
        • 삭제되기 전 전체 항목 이미지를 캡쳐
    • AWS Lambda의 트리거로 사용 가능
    • 스트리밍 모델


API

  • 컨트롤 플레인
    • 테이블 CRUD
    • CreateTable, DescribeTable, ListTables, UpdateTable, DeleteTable
  • 데이터 플레인
    • 데이터 CRUD
    • PartiQL - SQL 호환 쿼리 언어
      • ExecuteStatement
        • 단일 항목 CRUD
      • BatchExecuteStatement
        • 여러 항목 CRUD
    • 클래식 API
      • 생성
        • PutItem
          • 단일 항목 CRUD
        • BatchWriteItem
          • 최대 25개의 항목 생성
      • 읽기
        • GetItem
          • 단일 항목 읽기
        • BatchGetItem
          • 하나 이상의 테이블에서 최대 100개의 항목 가져오기
        • Query
          • 특정 파티션 키가 있는 모든 항목 가져오기
        • Scan
          • 지정한 테이블 혹은 인덱스의 모든 항목 가져오기
      • 수정
        • UpdateItem
          • 항목에서 하나 이상의 속성 수정
      • 삭제
        • DeleteItem
          • 단일 항목 삭제
        • BatchWriteItem
          • 최대 25개의 항목 삭제
        • BatchWriteItem
          • 하나 이상의 테이블에서 여러 항목을 삭제
  • Streams
    • ListStreams
      • 모든 스트림 목록 또는 특정 테이블의 스트림 반환
    • DescribeStream
      • 해당 Amazon 리소스 이름(ARN) 및 애플리케이션이 처음 몇 개 스트림 레코드를 읽기 시작할 수 있는 위치와 같은 스트림에 대한 정보를 반환
    • GetShardIterator
      • 샤드 반복자를 반환
      • 샤드 반복자
        • 애플리케이션이 스트림에서 레코드를 가져오는 데 사용하는 데이터 구조
    • GetRecords
      • 지정된 샤드 반복자를 사용하여 하나 이상의 스트림 레코드 가져오기
  • 트랜잭션
    • PartiQL - SQL 호환 쿼리 언어
      • ExecuteTransaction
        • 양자택일 결과가 보장되는 테이블 내와 테이블 간 모두에서 여러 항목에 대한 CRUD 작업을 허용하는 배치 작업
    • 클래식 API
      • TransactWriteItems
        • 양자택일 결과가 보장되는 테이블 내와 테이블 간 모두에서 여러 항목에 대한 CUD 작업을 허용하는 배치 작업
      • TransactGetItems
        • 하나 이상의 테이블에서 여러 항목을 가져오는 Get 작업을 허용하는 배치 작업


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)
      • 스토리지 비용이 많이 드는 테이블에 최적화
      • 로그, 과거 게시물, 주문 내역 등 자주 액세스하지 않는 데이터를 저장하는 테이블에 적합


DynamoDB의 다운로드 가능 버전

  • Amazon DynamoDB 웹 서비스 외에도 컴퓨터에서 실행할 수 있고 코드 개발 및 테스트에 적합한 DynamoDB의 다운로드 가능 버전을 제공
  • 배포


액세스


Auto Scaling

  • 낮에 사용량이 늘어나고 밤에 줄어든다거나, 게임이 출시 초반에는 사용자가 적다가 점점 많아 진다거나 하는 경우 프로비저닝된 처리 능력을 실제 트래픽 패턴에 따라 사용자 대신 동적으로 조정
  • 인덱스에도 동일한 정책을 적용하는 것을 권장


TTL

  • 항목 별 타임스탬프를 정의하여 항목이 더 이상 필요하지 않은 시점을 결정
  • 지정된 타임스탬프의 날짜 및 시간이 지난 직후 테이블에서 항목을 삭제


Pagination


Transactions


Accelerator(DAX)

  • 인 메모리 캐시로서 최종적 일관된 읽기 워크로드의 응답 시간을 한 자릿수 밀리초에서 마이크로초까지 대폭 감소


모니터링 및 로깅