AWS #6

MIMO·2023년 7월 10일
0

AWS

목록 보기
6/12
post-thumbnail

DynamoDB

DynamoDBsms Not Only SQL인 데이터베이스이다. 매우 빠른 쿼리 속도를 가지고 있으며 Auto-Scaling 기능을 탑재하여 데이터의 크기에 따라 테이블이 확대, 축소 될수 있으며 이를 통해 비용을 절감할 수 있다. NoSQL이므로 테이블 생성 시 스키마 생성이 필요 없으며 key-value데이터 모델을 지원한다.

DynamoDB 구성요소

  • Table - Entitiy와 비슷한 개념
  • Items - 행과 개념이 비슷합
  • Attributes - 열과 개념이 비슷함

Primary Keys(PK)

DynamoDB는 PK를 사용하여 데이터 쿼리를 날린다. DynamoDB에는 두가지의 PK 유형이 존재한다.

  1. 파티션키(Partition Key)
  • 고유 특징
  • 실제 데이터가 들어가는 위치를 결정해줌
  • 파티션키 사용시 동일한 두개의 데이터가 같은 위치에 저장될 수 없음
  1. 복합키 (Composite Key)
  • 파티션키와 정렬키를 합친 개념이다
  • 예시 : 똑같은 고객이 다른 날짜에 다른 물건을 구매
  • 파티션키 : 고객 아이디, 정렬키 : 날짜
  • 같은 파티션키의 데이터들은 같은 장소에 보관, 그다음 정렬키에 의해 데이터가 정렬됨

DynamoDB 데이터 접근 관리

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

Index

index란 특정 컬럼만을 사용하여 쿼리를 날린다. 이를 통해 테이블 전체가 아닌 기준점을 사용하여 쿼리가 이루어지고 매우 빠르게 쿼리를 날릴 수 있다는 이점때문에 Index가 중요한 개념이다. DynamoDB에서는 두 가지 종류의 Index가 존재한다.

  1. Local Secondary Index(LSI)
  • 테이블 생성시에만 정의해줄 수 있음
  • 따라서 테이블 생성 후 변경, 삭제가 불가능
  • 똑같은 파티션키 사용, 그러나 다른 정렬키 사용
  1. Global Secondary Index(GSI)
  • 테이블 생성후에도 추가, 변경, 삭제 가능
  • 다른 파티션키, 정렬키 사용

Query VS Scan

Query

  • primary Key를 사용하여 데이터 검색
  • Query 사용시 모든 데이터 반환
  • ProjectionExpression 파라미터
  • 모든 데이터를 불러오지 않기 때문에 Scan보다 효율적이다.

SCAN

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

DAX (DynamoDB Accelerator)

DAX는 dynamodb에서 제공하는 클러스터 In-memory 캐시이다. 이 캐시를 통해 10배 이상의 속도 향상이 되며 읽기 요청만 해당사항이 존재한다. 예를 들어 Black Friday라는 날이 있는데, 이 날의 쇼핑몰에는 수많은 사람이 방문을 하게 된다. 수많은 읽기 요청이 일어난다는 것이다. 이 상황에서 Dax를 사용하면 사용자에게 더 빠른 정보를 제공할 수 있다.

DAX 원리

  • Dax캐싱 시스템
    테이블에 데이터를 삽입하고 업데이트 할 때에도 DAX에 반영한다.

  • 읽기 요청에 맞는 데이터가 DAX에 들어있을시 DAX에서도 데이터를 즉시 반환한다. (Cache Hit)

DAX 단점

  • 읽기 전용이기 때문에 쓰기 요청이 많은 어플리케이션에는 부적합하다.

  • 읽기 요청이 많지 않은 어플리케이션에서는 부적절하다. 캐시 미스가 발생하면 비용이 많이 든다.

  • 아직 모든 지역에서 제공하지 않는다.

DynamoDB - Streams

dynamoDB Streams는 event가 발생할 때 시간에 따라 event를 기록하는 역할을 한다. Log는 즉각 암호화가 일어나며 24시간 동안 보관된다. 주로 이벤트를 기록하고 이벤트 발생을외부로 알리는 용도로 사용되며(Lambda Function) 이벤트 전&후에 대한 상황 보관을 한다.

이벤트를 기록하고 발생을 외부로 알리는 역할을 하기 때문에 Lambda Function과 함께 쓰이는 경우가 많다.

profile
행복한 사람

0개의 댓글