ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DynamoDB (2)] DynamoDB 사용하기전 핵심 개념
    AWS 2023. 2. 16. 21:19

    DynamoDB 사용에 앞서 주요 용어와 개념을 기록한다.

    1. 주요 개념과 용어 설명

    1) Table

    • 데이터를 저장하는 공간이다. 모든 테이블은 0 또는 다수의 Items를 collection으로 가진다.
    • People 테이블 예제
      • Table은 Item를 가지고, Item은 Attribute를 가진다.
    • Table은 schemaless가 특징이며 Attributes나 Data type이 미리 정의될 필요 없다.
    • 예시)
    People // table
    
    // an item
    {
        "PersonID": 101, // primary key
        "LastName": "Smith", // attributes
        "FirstName": "Fred", // attributes
        "Phone": "555-4321" // attributes
    }

    2) Item

    • Attributes의 collection이다.
    • 모든 item은 유니크한 Primary Key를 가진다.

    3) Attribute

    • 가장 하위의 key-value 값
    • 대부분의 attribute는 1개의 값만 가질 수 있다.
    • address와 같이 32 levels deep까지 중첩의 attribute 값을 지원하기도 한다.

    4) Primary Key

    • DynamoDB는 Primary key로만 데이터를 검색할 수 있다.
    • Primary Key의 종류
      • Partition Key
        • Hash Index 역할, 빠른 속도로 검색 영역을 제한하여 조회 가능하고 삽입 / 삭제가 빠르다.  
        • string, number, or binary 세 가지의 데이터 타입만 올 수 있다.
        • 항상 == 연산자만 사용 가능
        • Partition Key로 테이블 설계에 사용되는 용도 예시
          • 서비스 이용자 프로파일 
          • 세션 스토어
          • 이커머스 상품 정보 (장바구니)
      • 복합키 (Partition Key + Sort Key)
        • Sort Key
          • B-tree Index 역할, 항상 정렬되어 있다. 삽입 / 삭제 시 정렬 발생하고, 정렬된 상태로 범위 제한하기 좋다. 
          • 내림차순, 오름차순 검색, range 기능 지원
            • begins with
            • between
            • counts…
          • 1:N 관계 설정 시 중요 역할
          • 많이 사용 되는 값
            • 알바벳, 숫자, 타임스템프, ULID, KSUID
          • Partition Key + Sort Key로 테이블 설계시에 많이 사용 되는 용도
            • IoT 로그
            • 소셜 네트워크의 포스트 리스트
            • 주문 상세 정보 혹은 이력
      • 스케일링이 발생할때 기억해야될 것 
        • 데이터 양이 올라가면 → 파티션이 늘어난다.
        • AWS에서 파티션을 고르게 Hash 값으로 입력해서 분배한다.
        • 작은 규모로 확장을 잘하도록 키를 설계해야한다.
        • 각 파티션은 1 WCU, 3 RCU, 10 GB 제약 조건 항상 기억하기 (WCU? RCU? 아래 서술할 제약조건 참조)

    5) secondary indexes (보조 인덱스)

    • Index를 추가하면 index를 기준으로 테이블을 복제하여 읽기에 사용한다.
      • 사용하는 순간 과금 발생이 일어나기 때문에 사용 안하는 것이 Best! 사용하더라도 최소로 한다.
    • 대안키로 table을 quary할 수 있게 하여, 애플리케이션에 more flexibility를 제공
    • 하나의 테이블에 1개 이상의 secondary indexes를 생성할 수 있다.
    • 2가지 종류의 보조 인덱스 제공
      1. Global secondary index
        • 파티션키, 정렬키가 테이블과 다를 수 있는 인덱스
        • RDBMS에서의 인덱스와 같은 역할을 한다.
        • 테이블 생성 후에도 삭제, 추가 가능
      2. Local secondary index
        • 파티션키는 테이블과 같지만, 정렬키는 테이블과 다른 인덱스
        • 테이블 생성시에만 적용할 수 있고 까다롭다.

    2.  제약 조건

    2.1. 처리량 (DynamoDB는 비용 산정을 초당 발생하는 요청 수로 한다. RCU, WCU)

    • RCU (Read Capacity Unit) : 4KB (읽기 요청)
    • WCU (Write Capacity Unit) : 1KB (쓰기 요청)
    • 쓰기 읽기는 독립적으로 수행된다.

    2.2. 사이즈

    • 아이템의 최대 크기는 400 KB (그러나 모두 사용하는건 권장하지 않음)
      • 아이템 사이즈는 작게, 개수는 여러개로 관리하는 것을 권장
    • 스케일링은 파티션을 통해 일어난다.
      • 각 파티션은 1,000 WCU/초 혹은 3,000 RCU/초를 제공하여 둘중 하나가 초과하면 파티션이 늘어나는 구조
      • 데이터 용량이 10GB 초과 시 파티션 늘어남

    3.  DynamoDB API

    ORM 처럼 DB가 store 역할을 하고 API로 CRUD 기능 지원

    AWS 세미나 자료

    3.1 Control plane

    • DynamoDB 테이블 생성, 관리
      • CreateTable
      • DescribeTable → 테이블에 대한 정보 조회 (schema, throughput(초당 처리 작업 수) 설정, 인덱스 정보)
      • ListTable → 나의 모든 테이블 이름 목록 조회
      • UpdateTables → 테이블 수정 / 인덱스 생성, 삭제 / DynamoDB 스트림 수정
      • DeleteTable → 테이블 삭제

    3.2 Data plane

    • 테이블에 대한 CRUD API
    • PartiQL 사용 (https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.html)
      • ExecuteStatement
        • PutItem (쓰기)
        • GetItem, Query, Scan
          • 데이터 읽기 (API)
            • GetItem
              • 정확히 1개의 아이템을 반환
              • 조건에 맞는 아이템이 없으면 0개 반환
              • 아티템 크기에 따라 RCU 소비
            • Query
              • Partition Key의 정확한 값 지정
              • 선택적으로 non-key 어트리뷰트에 필터링 가능
              • 일치하는 아이템 여러개 반환 가능
              • 아이템 크기에 따라 RCU 소비
            • Scan
              • RDB에서 풀스캔 같은 것
                • 단 1MB 단위로 단일 호출도 가능하고, 페이지네이션 제공
        • UpdateItem
        • DeleteItem
      • BatchExecuteStatement → 다수 테이블의 읽기, 쓰기, 삭제
        • BatchGetItem
          • 단일 호출로 최대 100개 아이템 혹은 최대 16MB 반환
        • BatchWriteItem
          • 단일 호출로 최대 25 PutItem 혹은 DeleteItem 수행하며 최대 16MB 쓰기
          • 여러시점 나눠서 작업하는 것이 좋다.

    5.4 Transaction

    • ExecuteTransaction
    • TransactWriteItems
    • TransactGetItems

     

    반응형
Designed by Tistory.