이번에는 NoSQL 데이터베이스인 DynamoDB를 한번 알아보겠다.

AWS DynamoDB는 고성능을 요구하는 서버리스 완전관리형 NoSQL 데이터베이스이다. 대규모의 운영 환경에서도 10ms 미만의 응답속도를 제공한다. 또한 AWS 완전관리형 서비스답게 사용자는 인프라를 관리할 필요가 없다. 또한 키-값(Key-Value) 및 Document 형식 모델을 지원한다. 그외에 고가용성(HA), 확장, 등 많은 기능들을 지원한다.
DynamoDB의 테이블은 관계형 DB와 살짝 유사하지만 NoSQL의 특징중 하나인 스키마가 고정되어 있지 않다.
프라이머리 키(기본키)를 사용하여 태이블의 각 항목들을 고유하게 식별하게된다.

테이블 생성시 필요한 엔터티는 2개의 항목이 존재한다.
People
{
"PersonID": 101,
"LastName": "Smith",
"FirstName": "Fred",
"Phone": "555-4321"
}
{
"PersonID": 102,
"LastName": "Jones",
"FirstName": "Mary",
"Address": {
"Street": "123 Main",
"City": "Anytown",
"State": "OH",
"ZIPCode": 12345
}
}
{
"PersonID": 103,
"LastName": "Stephens",
"FirstName": "Howard",
"Address": {
"Street": "123 Main",
"City": "London",
"PostalCode": "ER3 5K8"
},
"FavoriteColor": "Blue"
}
JSON? 형식으로된 테이블을 확인해보면 이 테이블은 People 이라는 테이블이다.
PersonID는 프라이머리 키로 고유식별자이다. 여기에는 프라이머리 키를 제외하고 스키마가 존재하지 않아 형식이 미리 정의되어있지 않다. 또한 특이한점은 데이터가 중복되는 부분이 있다는 점이다. (정규화 x)

DynamoDB에서는 2가지의 용량 관리 옵션을 제공한다.
RCU/WCD??
RCU(Read Capacity Unit)는 초당 처리할 수 있는 읽기 요청의 용량을 나타내는 단위이다.
WCU(Write Capacity Unit)는 초당 처리할 수 있는 쓰기 요청의 용량을 나타내는 단위이다


글로벌 테이블은 단일 AWS 계정이 소유한다. 각 본제본은 동일한 데이터가 저장되고 글로벌 테이블은 리전당 한 개의 복제 테이블을 가질 수 있다.DynamoDB 글로벌 테이블은 복제 솔루션을 직접 구축하여 관리하지 않고도 다중 리전, 다중 활성 마스터 데이터베이스를 배포할 수 있는 완전관리형 솔루션을 제공한다.
DynamoDB Streams는 테이블의 데이터 수정 이벤트를 캡처하는 기능이다. 데이터 수정을 하게 된다면 이벤트가 발생한 순서대로 실시간으로 스트림에 표시된다.

각 이벤트는 스트림 레코드에 의해 나타난다. 주로 데이터베이스의 변경상황을 보거나 삭제되거나 하는 보안 적인 부분에서도 효율적일거같다.