DynamoDB

특징

  • 자동 이중화 : 서버 장애 또는 가용 영역 중단시 내결함성을 제공하기 위해 AWS 리전의 3개 시설에 자동으로 데이터 복제
  • SSD기반 NoSQL 서비스
  • 테이블 데이터는 json 형식으로 저장됨
  • 완전 관리형 NoSQL 데이터베이스 서비스
    • 클러스터링, 백업정책, 성능 상향, 다중리전 지원
  • 트랜잭션, JOIN과 같은 작업이 필요하다면 DBMS 사용이 더 적합 (DDB의 단점)
  • 규모가 커지더라도 PUT/GET이 항상 10ms 이내, 무제한으로 Scaling 가능.
  • Table + Item + Attribute
    • Table : item들의 집합. 리전당 생성할 수 있는 최대 개수 256개
      • 기본키 지정 필수
        • 단순 기본키 : Partition Key (Hash Key) (=, != 연산만 가능)
        • 복합 기본키 : Sort Key (Range Key) (범위연산 및 ~ 연산 가능)
  • 테이블 내 항목의 데이터 크기는 400KB를 초과할 수 없다.

인덱스

  • 단순 보조 인덱스 기본키 : Hash Key (기본키 이용하여 자동 생성)
  • 복합 보조 인덱스 기본키 : Hash Key + Range Key
  • Global 보조 인덱스(GSI) : 파티션키와 정렬키가 모두 다름 (모든 파티션에 접근 가능)
    • 생성, 삭제가 자유롭고 쿼리 용량에 제한 없음
  • Local 보조 인덱스 (LSI) : 파티션키는 같지만 정렬키가 다름 (특정 파티션에만 접근 가능)
    • 테이블 생성 시에만 생성 가능. 삭제 불가.
    • Hot Key 이슈를 막기 위하여 사용됨
    • 10GB 제한

Scaling

  • 전체 데이터를 골고루 분산시키기 위해 Partition Key 사용 (Scaling의 핵심이 Partition Key)
    • DynamoDB는 DB 트래픽이 늘어나면 자동으로 instance를 늘리는데, 그 기준은 파티션키를 hash 값.
    • 한 파티션 키에 해당하는 데이터는 10GB가 넘을 수 없다.
  • 로드가 적은 DDB의 테이블 사용시 한 서버로 처리
  • 로드가 많아지면 파티션 키의 hash 값으로 두 개의 서버로 쪼개지고, 그래도 부하가 크다면, 계속 쪼개지는 과정 반복.

Partition Key

  • Key-Value 저장소 용도일 때는 파티션키를 고려하지 않아도 크게 문제 없음.
  • Query 를 사용할 때 Partition Key + Sort Key 조합으로 Key를 설정해야 함
    • DDB의 Query 기능은 Partition Key에 속한 Sort Key에 조건을 걸어 데이터 조회하기 때문
    • Query를 사용하고 싶어도, 특정 Partition Key에만 데이터가 몰려서는 안되기 때문에, 파티션키 정하는 것이 어려운 것임 (Hot Key 이슈)

추가 기능

  1. DAX (DynamoDB Accelerator)
    • DDB와 동일한 인터페이스의 in-memory cache 서버.
    • 읽기 볼륨이 많거나 1ms 미만의 읽기 지연시간이 필요할 때 필요
  2. Stream + Lambda
    • DDB에 POST/PUT/DELETE 되는 데이터가 생길 때마다 Lambda를 실행할 수 있음
  3. Global Table
    • AWS가 지원하는 리전에 자동으로 동기화되는 데이터를 구성할 수 있음
    • 전세게에 DB 분산

백업

  1. 온디맨드 백업
    • 온디맨드 백업 생성 시 전체 테이블 데이터가 백업됨
  2. 특점 시점으로 복구(PITR)
    • 활성화 시 테이블 삭제하면 백업이 자동으로 생성되며 35일 동안 유지 (무료)

요금 계산

  • 모든 아이템을 KB 단위로 환산한 뒤에 소수점 이하를 올림하고 용량단위의 배수로 맞춰서 다시 올림 (1Byte만 사용해도 용량단위로 올림해서 계산)
  • 용량 단위
    • WCUs : 1KB
    • RCUs : 4KB, Strictly Consistent Read (Real Time)
    • RCus : 8KB, Eventually Consistent Read (Near Time)
  • 온디맨드 프로비저닝에 비해, 읽기 및 쓰기용량을 미리 예약하면 비용을 절감할 수 있다.

Reference

'AWS' 카테고리의 다른 글

Amazon MemoryDB for Redis  (0) 2022.06.13
AWS EFS  (0) 2021.09.08
Amazon Aurora 알아보자  (0) 2021.08.23
AWS Pinpoint  (0) 2021.06.17
AWS SAM (Serverless Application Model)  (0) 2021.04.29

+ Recent posts