[AWS] Amazon DynamoDB
01. DyanmoDB란?
AWS(Amazon Web Services)에서 제공하는 대표적인 No-SQL 서비스이다. 모든 규모에서 고성능 애플리케이션을 실행하도록 설계된 완전관리형의 서버리스 키-값 NoSQL 데이터베이스라고 한다...(먼소리여)
** No-SQL?
기존에 자주 보이던 Oracle, MySQL...과같은 관계형DB(RDBMS)와는 다른 개념이다. 기존 SQL이 여러 테이블이 서로 연결되어 생성되어 있다면, No-SQL은 정형화되지 않은 DB구조를 가지며 "키(Key) - 값(Value)" 형태 혹은 다른 여러 형태로 존재하게 된다.
참고 : https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/SQLtoNoSQL.WhyDynamoDB.html
- 주로 소비되는 사례는 아래와 같다.
> 수백만건의 동시성 및 연결이 요구되며 메타데이터를 지원하는 애플리케이션
> 실시간 동영상 스트리밍 및 대화형 콘텐츠 같은 미디어
> 장바구니, 재고 추적등등..
> 게임 플랫폼에서 플레이어의 게임 데이터, 기록, 순위표
(한 마디로 대규모의 요청을 받는, 키-값의 구조를 가지는 형태의 DB에 적합하다는 말인 듯하다.)
02. DynomoDB의 몇 가지 개념들
항목(Item)
테이블에 Insert, Delete, Update 하게 될 속성들의 집합. 기존 RDBMS의 레코드와 동일한 개념
속성(Attribute)
항목을 구성하는 각각의 열. 기존 RDBMS의 속성과 동일한 개념
파티션 키(Partition Key)
테이블을 생성할 때 필수적으로 설정 해야하는 기본키라고 한다.(RDMBS의 기본키와 비슷한 개념인듯) 파티션 키는 각 파티션을 특정할 수 있는 키로, 이 파티션 키에 따라서 저장하는 항목들의 분배가 결정된다. 특정 항목을 조회할 때 테이블 전체 조회가 아닌 특정 파티션에 대한 키에 대한 항목만 가지고 조회하여 성능을 향상 시킨다.
정렬 키(Sort Key)
테이블을 생성할 때 선택적으로 설정할 수 있는 기본 키, 정렬 키는 동일한 파티션 키를 가진 데이터를 정렬할 때 사용된다. 예를 들어 어떤 게임의 특정 플레이어(파티션 키)의 게임별 점수를 정렬하여 볼 때 사용된다고 생각하면 될 듯 하다.
위의 파티션키와 정렬 키는 기본 키임으로 생략 불가하며, 변경도 불가하다. (주의!!)
GSI(글로벌 보조 인덱스)
기존 테이블과 다른 파티션 키, 정렬 키를 사용하여 쿼리할 수 있도록 해주는 보조 인덱스이다. 기존 테이블과 다른 키값들을 사용하며, DB쿼리에 엄청난 유연성을 가져다 줄 수 있다. 기존 테이블과는 별도의 공간에 생성이 되기 때문에 인덱스의 크기에는 제한이 없다.
LSI(로컬 보조 인덱스)
기존 테이블과 동일한 파티션 키를 가지지만, 정렬 키만 달리하여 쿼리를 할 수 있도록 하는 보조 인덱스이다. 기존 테이블과는 별도의 공간에 생성이 되기 때문에 인덱스의 크기에는 제한이 없다. 한 가지 생각해야 할 것은 LSI는 테이블을 생성할 때만 생성할 수 있다.
03. DynamoDB 실습
- DynamoDB 테이블 생성
DynomoDB - GSI 생성
04. DynamoDB API
애플리케이션에서 DynamoDB를 작업하기 위해서는 각 행위에 맞는 API를 호출해야 한다.
아래의 AWS 홈페이지에서 종류별 DynamoDB API가 정리되어 있다.
Ex.) 데이터 읽기
- GetItem - 테이블에서 단일 항목을 가져옵니다. 원하는 항목의 기본 키를 지정해야 합니다. 전체 항목 또는 속성 일부만 가져올 수 있습니다.
- BatchGetItem - 하나 이상의 테이블에서 최대 100개의 항목을 가져옵니다. 항목을 읽을 때 애플리케이션이 네트워크를 한 번만 왕복하면 되므로 GetItem을 여러 번 호출하는 것보다 이 작업이 효율적입니다.
참고 :
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/HowItWorks.API.html
DynamoDB API - Amazon DynamoDB
DynamoDB API Amazon DynamoDB를 사용하려면 애플리케이션에서 몇 가지 간단한 API 작업을 사용해야 합니다. 다음은 이러한 작업을 카테고리별로 정리한 요약본입니다. 컨트롤 플레인 제어 영역 작업을
docs.aws.amazon.com
05. DynamoDB Streams
DynamoDB Streams란 DynamoDB 테이블의 변경사항에 대한 정보들을 추적할 수 있는 기능입니다.
DynamoDB 테이블에 DynamoDB Streams 기능을 활성화하면 테이블에서 일어나는 모든 Insert, Modify, Remove 이벤트를 stream record로서 받을 수 있고, 해당 정보는 Queue에 쌓여 24시간 동안 유지된 뒤 삭제 됩니다. DynamoDB Streams는 거의 실시간으로 스트림 레코드를 작성하므로 이러한 스트림을 소비하고 내용을 바탕으로 조치를 취할 수 있는 애플리케이션을 빌드할 수 있습니다.
DynamoDB Streams는 굉장히 간단히 Lambda의 trigger와 연결하여 DynamoDB 수정작에 대한 사후 처리를 실행할 수 있습니다.
참고:
https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Streams.html
DynamoDB Streams에 대한 변경 데이터 캡처 - Amazon DynamoDB
스트림을 설정한 후에는 StreamViewType을 편집할 수 없습니다. 스트림을 설정한 후 변경해야 하는 경우 현재 스트림을 비활성화하고 새 스트림을 생성해야 합니다.
docs.aws.amazon.com
- END -