DynamoDB

DynamoDB의 특징

  • NoSQL 데이터베이스
    • NoSQL 데이터베이스이기 때문에 JOIN, 정규화가 없다.
    • 데이터베이스의 성능 향상을 위해 중복을 허용하고 JOIN을 줄이는 반정규화
    • RDBMS는 종류나 특성에 따라 테이블을 나누지만 DynamoDB에는 모든것이 하나의 테이블에 표현 가능
  • http 통신
  • serverless
    • AWS lambda와 같은 서버리스 기반 서비스와 같이 사용하기에 좋다.
  • key-value 데이터베이스
    • key를 제외한 테이블 속성을 미리 정의할 필요가 없다.
  • auto-scailing
  • AWS IAM으로 관리 가능

 

 

key

partition key (PK, hash key) 파티션키

  • 물리적인 공간인 파티션을 구분하기 위한 키
  • 스케일이 커져도 파티션키를 통해 데이터를 빠르게 조회할 수 있다.
  • 파티션 키로는 일치하는 값만 가져올 수 있다.
  • 파티션키는 DynamoDB 내에 존재하는 해쉬 함수를 거쳐 데이터를 저장할 파티션을 결정한다. 동일한 파티션을 지닌 데이터는 물리적으로 가까운 위치에 저장되고 이때 데이터를 구분하기 위해 정렬키를 사용한다.
  • 정렬 키를 사용하면 동일한 파티션에 저장된 데이터는 정렬키를 기준으로 저장한다.

sort key (SK, range key) 정렬키

  • 파티션 안에서 데이터를 정렬하기 위한 키
  • dynamoDB에서는 Number, Binary, String 타입 지원
  • 범위 지정 방식 검색 가능
  • 정렬키만 가지고는 검색할 수 없다. 파티션키 + 정렬키 이용

 

 

 

index

  • 특정 컬럼만을 사용해서 쿼리
  • 테이블 전체가 아니고 기준점(pivot)을 사용해서 쿼리 이루어지고 성능이 좋다.

LSI 로컬 보조 인덱스

  • 파티션키 + 정렬키를 합친 복합 인덱스
  • 동일 파티션 키 내에서 정보들을 분리하고 싶을 때 사용한다.
  • 로컬 인덱스는 테이블을 만들 때 미리 설정해둬야한다.

GSI 글로벌 보조 인덱스

  • 기본키(파티션키)나 정렬키와 별개로 특정키를 인덱스키로 활용한다.
  • 콘솔에서 인덱스를 만들 수 있고, 기존 attribute 중 하나를 선택해서 자유롭게 추가 수정 삭제 가능

 

 

DynamoDB에서 데이터를 읽어오는 방식 - Query, Scan

Query

  • primary key를 활용해서 데이터 검색
  • query 사용시 모든 데이터 반환

Scan

  • primary key를 사용하지 않고 순차적으로 모든데이터를 불러온다.
  • 테이블 크기가 작을 때 사용한다.

=> Query가 더 좋음!

 

 

 

DynamoDB 용량모드

*On-demand 온디맨드 *

  • 사용한 만큼 비용을 지불한다.
  • 이전 도달 최대 트래픽을 넘는다면 이전 2배에 해당하는 크기로 자동 조정된다.

Provisioned 프로비저닝

  • 초당 읽기, 쓰기 횟수 지정
  • auto-scailing을 사용해서 트래픽 변경에 따라 프로비저닝된 용량을 자동으로 조정
  • 프로비저닝 모드를 사용하면 비용을 예측하는데 도움이 된다.

 

 

 

DynamoDB Stream

  • DynamoDB 테이블에 일어나는 삽입, 수정, 삭제 등의 이벤트가 일어날 때 Steams에 기록된다.
  • Log는 즉시 암호화가 일어나며 24시간동안 보관한다.
  • 이벤트를 기록하고 이벤트 발생을 알리는 용도로 사용한다.