본문 바로가기

공개

DynamoDB개념

Dynamo 특징

 -NoSQL 데이터베이스

 -매우 빠른 쿼리 속도

 -Auto-Scaling 기능 탑재(비용적인 측면에서 이점이 있다)

 -Key-Value데이터 모델 지원

 -테이블 생성시 스키마 생성 필요 없음(본인이 알아서 스키마를 해주는 구조)

 -SSD 스토리지 사용(빠른 편)

 

 

 

DynamoDB 구성

-테이블

-아이템:값

-키:value

근데 key-value 기 때문에 

키:값 이런 구도이다

 

 

DynamDB - Primary keys

-PK를 사용하는 데이터 쿼리

 

 

   -파티션키(partition key)

        고유 특징

        실제 데이터가 들어가는 위치를 정해줌

        파티션키일 경우 동일한 두개의 데이터가 같은 위치에 저정되지 않습니다

이런식으로 DynamoDB 안에 있는 hash funciton이 파티션의 위치를 정해주고 

파티션 key에서 기억해야할 것은 유일한 값이다 라는 것을 기억해주면 좋을 거 같다

 

 

 

 

     -복합키(composite Key)

          파티션키+정렬키

          같은 파티션의 데이터들은 같은 장소에 보관, 그다음 정렬키에 의해 데이터가 정렬됨

          예) 임상운이라는 사원이 출근할 때 마다 시간을 명부에 작성을 하는데 여기서 임상운이라는 이름은 파티션키가                 될 것이고 사원의 출근 시간은 정렬키가 될 것이다

 

 

DynamoDB 데이터 권한

 

    AWS IAM으로 관리할 수 있음

      -특정 테이블만 특정 데이터만 접근 가능케 해주는 특별한 IAM도 존재함 

 

 

Index

Index의 특징
   -특정 컬럼만들 사용

   -테이블 전테가 아닌 기준점을 사용함

   

Local Secondary Index 

   - 테이블 생성시에만 정의해줄 수 있음 

   - 따라서 테이블 생성 후 변경, 삭제 불가능

   - 똑같은 파티션키 사용, 그러나 다른 정렬키 사용

   - 즉 파티션 키 및 정렬키를 합친 복합 인덱스

  local secondary index는 보조키로 동인한 파티션 키 내에서 정보들을 분리하고 싶을 때 사용합니다

 

  예) 임상운이라는 사람의 년도별 업적(?)을 적는다고 했을 때 변하지 않고 유일한 값인 임상운이 parition key일 것이고

       이 안에 있는 2020,2021,2022(sort) 년도의 업적들을 분리하고 싶을 때 사용한다 local secondary index 를 사용한다

 

 

Glocal Secondary Index

    - 테이블 생성후에도 추가,변경,삭제 가능

    - 다른 파티션키, 정렬키 사용

    - 파티션 키나 정렬키와는 별개로 특정 키를 인덱스 키로 사용할 수 있는 개념이다

 

    

 

보조 인덱스의 개념과 역할

LSI,GSI는 생각보다 중요하다

그 이유는 파티션 키 외의 내용으로 쿼리해야하는 경우가 많기 때문이다

 

 

로컬 보조 인덱스(LSI)의 좋은 예

 

Thread 라는 테이블이 존재한다

 

파티션 키: forumName

정렬키(sort):subject

 

forumName(파티션 키)과 subject(정렬키)를 이용하여 새로운 가상의 테이블을 만들 때, 해당 테이블을 구성하는 기준이 되는 것이 로컬 보조 인덱스이다.

 

보통 LSI는 정렬키가 되는 경우가 많다

 

위에 표처럼 paritionkey(s3,ec2,rds)로 나눈 후에 그 안에서 subject가 기준이 되어 나누어 준다.

 

paritionkey 안에서 기준이 되어 나누어준 subject 가 바로 local secondary index(LSI)이다

 

 

글로벌 보조 인덱스(GSI)의 좋은 예

 

 

LSI와 별개로 GSI 는 기존에 있는 필드글로벌 보조 인덱스를 만들면, 해당 인덱스를 기준으로 가상의 새로운 테이블이 형성 되는 것이다(view)

 

 

일단 이걸 더 자세히 알기전에 

 

Query 와 Scan에 대해 알아보자

 

Query 

    -Primary Key를 사용하여 데이터 검색

    -Query 사용시 모든 데이터 칼럼 반환

    -ProjectionExpression 파라미터(필터링 역할을 하는 projection expression 원하는 칼럼만 볼 수 있는 기능)

 

Scan

    - 모든 데이터를 불러옴(primary key 사용x)

    - ProjectionExpression 파라미터

 

 

 

다시 표로 와서 

 

GameScores라는 테이블

UserId 라는 파티션 키

GameTitle이라는 정렬키

 

이 상황에서 각 게임의 최고 점수를 표시하는 순위표를 만들기 위해서는 

GameTitle만들 토대로 GameScores 에서 데이터를 검색해야할 경우에는 Scan작업을 해야해서 표율이 떨어진다

반면 UserId로 쿼리하면 Galaxy Invaders 의 최고 점수 기록 보유자를 찾을 수 없다

 

가장 최적의 상황은  TopScore를 인덱스로 만들어 해당 인덱스를 기준으로 쿼리하는 것이다. 그럴 때 TopScore 가 글로벌 보조 인덱스가 된다

 

 

참고:https://velog.io/@hanseul/AWS-DynamoDB-%EC%82%AC%EC%9A%A9%EA%B8%B0

 

AWS DynamoDB 사용기_보조 인덱스 사용 위주로

AWS DynamoDB의 보조 인덱스 사용법

velog.io

 

'공개' 카테고리의 다른 글

AWS ECS 컨테이너 서비스 구축(1)  (0) 2022.02.23
ECS  (0) 2022.02.23
KMS란  (1) 2022.02.22
lambda 트리거  (0) 2022.02.22
event pattern 에 대해서  (0) 2022.02.21