AWS-DynamoDB

강채희·2021년 5월 18일
0
post-thumbnail

[9-1] DynamoDB란?

DynamoDB란?

  • NoSQL(Not Only SQL) 데이터베이스 : SQL(관계형DB)뿐만 아니라 다른 형태의 DB가 존재
  • 매우 빠른 쿼리 속도
  • Auto-Scaling 기능 탑재 : 데이터의 크기 초과시 테이블의 크기가 늘어남 -> 비용적인 이점
  • Key-Value 데이터 모델 지원 : key에 해당하는 value가져옴
  • 테이블 생성시 스키마 생성 필요 없음
  • 모바일, 웹, IoT데이터 사용시 추천됨 : 실시간으로 들어오는 데이터 사용할때 좋다
  • SSD 스토리지 사용 : 읽고 쓰는데 속도가 매우 빠름
  • 테이블 (Table)
    아이템 (Items) - 행(row)과 개념이 비슷함
    특징 (Attributes) - 열(column)과 개념이 비슷함
    Key-Value (Key : 데이터의 이름, Value : 데이터 자신)
    예시) JSON, XML

DynamoDB - Primary Keys (PK)

  • PK를 사용하여 데이터 쿼리
  • DynamoDB에는 두가지의 PK 유형이 있음
    1) 파티션키 (Partition Key) : 데이터를 분리하는 키
    : 고유 특징 (Unique Attribute)
    : 실제 데이터가 들어가는 위치를 결정해줌
    : 파티션키 사용시 동일한 두개의 데이터가 같은 위치에 저장될 수 없음!
    = 파티션키는 중복될 수 없음
    2) 복합키 (Composite Key)
    : 파티션키(Partition Key) + 정렬키(Sort Key)
    : 예시 ) 똑같은 고객이 다른 날짜에 다른 물건을 구매
    :: 파티션키 : 고객아이디, 정렬키 : 날짜(Timestamp)
    :: 같은 파티션키의 데이터들은 같은 장소에 보관, 그 다음 정렬키에 의해 데이터가 정렬됨

파티션키 : 고객아이디, 정렬키 : 날짜(Timestamp)

{
“Customer_id” : “28942”,
“Transaction_id” : “g9s4dd2”,
“Item_purchased” : “sofa”,
“Store_location” : “seoul”,
“Transaction_date” : “2020-10-16 14:20:00”,
}

DynamoDB 데이터 접근 관리

  • AWS IAM으로 관리할 수 있음
  • 테이블 생성과 접근 권한을 부여할 수 있음
  • 특정 테이블만, 특정 데이터만 접근 가능케 해주는 특별한 IAM 역할 존재

[9-2] Index

Index : Query의 성능을 향상

  • 특정 컬럼만을 사용하여 쿼리
  • 테이블 전체가 아닌 기준점(pivot)을 사용해 쿼리가 이루어짐
  • 매우 큰 쿼리 성능 효과
  • 두가지의 Index 유형 존재
    1) Local Secondary Index(LSI)
    : 테이블 생성시에만 정의해줄 수 있음
    : 따라서 테이블 생성 후 변경, 삭제가 불가능 -> 삭제하고 싶으면 테이블 삭제 후 해야함
    : 똑같은 파티션키 사용, 그러나 다른 정렬키 사용
    2) Global Secondary Index(GSI)
    : 테이블 생성후에도 추가, 변경, 삭제 가능
    : 다른 파티션키, 정렬키 사용 -> 새로운 뷰를 만드는것이 가능

[9-3] Query vs Scan

Query

  • Primary Key를 사용하여 데이터 검색
  • Query사용시 모든 데이터(컬럼) 반환
  • ProjectionExpression 파라미터 -> 원하는 column만 볼 수 있다.

Scan

  • 모든 데이터를 불러옴 (primary key 사용 X)
  • ProjectionExpression 파라미터

Query VS Scan

  • Query가 Scan보다 훨씬 효율적임-> Query를 사용하자~
    -> 데이터의 크기는 일정치 않기에 scan의 퍼포먼스는 점차 약해질 것임
    -> look-up(데이터 딕셔너리를 정의하고 보관함, 데이터의 중복이 일어나지 않음) 용도의 테이블을 보고 싶을땐 Scan을 사용해도 괜찮다.

[9-4] DynamoDB 실습 - 1

[9-5] DynamoDB 실습 - 2

dynamoDB만드는 방법
1. 항목 만들기
2. lamdba함수를 통해서 만들기

<필터기능> 스캔과 쿼리

스캔
쿼리

[9-6] DAX(DynamoDB Accelerator)

DAX란?

  • 클러스터 In-memory 캐시 : 나중에 필요한 데이터를 찾을때 아주 빨리 찾아줌
  • 10배 이상의 속도 향상
  • 읽기 요청만 해당사항 (쓰기요청X) -> 읽기 요청이 아주 많거나 크기가 클 때 유용하게 사용
  • Ex) Black Friday날 쇼핑 웹사이트 운영 (수많은 읽기 요청 예상)

DAX 원리

  • DAX 캐싱 시스템
    ➔ 테이블에 데이터 삽입 & 업데이트시 DAX에도 반영 : 한번에 두가지 일이 생김
  • 읽기 요청에 맞는 데이터가 DAX에 들어있을시 DAX에서 데이터 즉시 반환 (Cache Hit) <-> (Cache Miss)

DAX의 단점

  • 쓰기 요청이 많은 어플리케이션에서는 부적절함
    -> 쓰기 요청은 예외이기에
  • 읽기 요청이 많지 않은 어플리케이션에서 부적절함
    -> 읽기 요청이 적을땐 효과가 없음 / 비용적인 측멱에서도 안좋다
  • 아직 모든 지역에서 제공하지 않음 (서울도 아직 제공되지 않고 있음)


클러스터를 만들고 이에 대한 설정도 해줘야함

[9-7] DynamoDB Streams

DynamoDB Stream?

  • DynamoDB 테이블에서 일어나는 일들(삽입, 수정, 삭제 등)이 일어날 시 시간적 순서에 맞게 Streams에 기록
  • Log는 즉각 암호화가 일어나며 24시간동안 보관됨 -> 24시간이 지나면 삭제됨
  • 주로 이벤트를 기록하고 이벤트 발생을 외부로 알리는 용도 (예시 : Lambda Function)
  • 이벤트 전&후에 대한 상황 보관

두개의 SDK와 연결된 어플리케이션
(하나의 API는 하나의 Endpoint와 연결됨)

dynamoDB stream을 통해 dynamoDB table에 어떤 event가 발생시 효율적인 아키텍쳐의 생성이 가능

느낀점 : DB에 대해 따로 공부하고 있었는데 aws 측면에서의 DB를 배울 수 있어서 유익했다

0개의 댓글