DynamoDB Core Components


Date :

Category : ,


DynamoDB 의 핵심 컴포넌트

  • 3 가지 핵심 구성 요소
    1. Tables
    2. Items
    3. Attributes
  • 핵심 구성 요소 Example
    • A table 은 items 의 컬렉션
    • 각 item 은 Attributes 의 컬렉션
  • DynamoDB 는 테이블에서 각 item 을 식별하기 위해 primary keys 를 사용한다. 그리고 더 유연한 query 를 위해 secondary indexes 도 있다.

Topics

  • Tables, Items, Attributes
  • Primary Key
  • Secondary Indexes
  • DynamoDB Streams

Tables, Items, Attributes

  • Table
    • rdbms 의 table
  • Item
    • rdbms 의 row
  • Attributes
    • rdbms 의 column
    • 다른 점은 Attribute 는 Value 로 nested attribute 를 가질 수 있다.
      • DynamoDB 는 최대 32 level deep 까지 지원

Primary Key

  • 테이블 생성 시 Primary Key 를 정하고, Primary Key 는 테이블 내에서 각 item 의 유니크한 식별자가 된다. 그래서 같은 key 를 가지는 두 item 은 생길 수 없다.
  • 두 가지 유형의 primary keys 를 지원한다.
    1. Partition key
      • Simple primary key - one attribute
      • partition key 의 값은 내부 hash 함수의 파라미터로 넣어 값을 구한다. 그 값으로 물리 저장소 어디에 저장할지 결정하는 partition key 로 사용한다. 테이블에서 partition key 는 유니크하고, 동일한 partition key value 는 없다.
    2. Partition key & sort key
      • Composite primary key - two attributes
        • 첫 번째 속성 → partition key
          • simple primary key 와 동일하게 내부 해시 함수를 이용하여 물리 저장소의 파티션을 결정한다. 하지만 다른 점은 테이블에서 동일한 partition key 가 존재할 수 있고 sort key value 에 의해 정렬된다.
          • hash attribute 라고도 한다.
        • 두 번째 속성 → sort key
          • 같은 partition 에 있는 item 을 sort key 를 통해 정렬한다.
          • secondary attribute, range attribute 라고도 한다.
  • primary key
    • 허용되는 데이터 타입
      • only single value - collection 사용 X
      • string, number, binary

Secondary Indexes (보조 인덱스)

  • 테이블에서 primary key 를 추가하지 않고 대안으로 secondary key 를 추가하여 query 를 유연하게 사용할 수 있다.
  • 두 가지 종류의 인덱스
    1. Gsi(Global Secondary index)
      • partition key 와 sort key 로 구성하는 인덱스
      • 테이블과 각각 다르게 구성할 수 있다.
      • 테이블 당 20개 생성 가능
    2. Lsi(Local Secondary index)
      • 테이블과 동일한 partition key 를 사용하지만,
      • sort key 는 다르게 구성한다.
      • 테이블 당 5개 생성 가능

DynamoDB Streams

  • Optional feature
  • TTL 이 만료된 메시지를 DynamoDB Streams 에 넣어주는 기능.
    • MQ 처럼 Consume 하는 형태가 아니라 Polling 하는 방식이다. 썩 좋아보이지 않는다…

참고