NO SQL
- non SQL 또는 non relational 을 의미함
- NoSQL 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 강조한다는 면에서 "NOT ONLY SQL"로 불리기도 함
- NOSQL 데이터베이스는 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간, 레이턴스와 THROUGHPUT과 관련하여 상당한 성능을 내는 것이 목적
- DB는 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰임
기본 분류
- 와이드 컬럼 스토어: h베이스, 아큐물로, 카산드라
- 도큐먼트: mongoDB, 카우치베이스
- 키 값: DynamoDB, 리악, 레디스, 캐시, 프로젝트 볼드모트
- 그래프: Neo4J, AgensGraph, 알레그로그래프, 버투오소


Redis

Value의 기본 타입은 strings, container 타입
특징
- 휘발성: main memory에 저장
- 연속성: snapshot, 특정 시점의 메모리에 있는 데이터를 바이너리 파일로 저장
장점: 성능 향상, 다양한 데이터 타입 지원
단점: 다른 NoSQL에 비해 도입 사이트가 적음
NO SQL랭킹

Amazon DynamoDB
Amazon DynamoDB는 모든 규모에서 10ms 미만의 성능을 제공하는 서버리스 NOSQL 완전 관리형 데이터 서비스
즉, 문서 및 키-값 저장 모델을 모두 지원하는 완전 관리형 NO SQL 데이터베이스
- 데이터 저장 및 검색 기능
- 어느 수준의 요청 트래픽도 처리할 수 있는 테이블을 생성
- downtime 또는 성능 저하 없이 테이블 단위로 확장/축소 가능
- 유연한 데이터 모델, 안정적인 성능, 처리량 자동 확장 기능을 통해 모바일, 웹, 게임, 광고 기술, IoT 등 다양한 애플리케이션에 적합
ex1. AMAZON PRIME DAY
- ALEXA, Amazon.com 등 모든 Amazon 주문 처리 센터를 포함 트래픽이 많은 여러 아마존 자산 및 시스템을 지원
- 초당 50만 개 이상, 200TB가 요청되는 테이블을 통해 시간당 10억 개 이상의 요청을 처리
DynamoDB의 특징
1. Serverless
- 서버를 프로비저닝하거나 소프트웨어를 패치, 관리, 설치, 유지 보수/운영 필요 없음
- 가동 중지가 발생하지 않는 유지 관리를 제공
- 버전 없고 유지 관리 기간 없음
2. No SQL
- 키-값 및 문서 데이터 모델을 모두 지원
- join 연산자를 지원하지 않음
3. 완전 관리형
- 업그레이드가 필요하지 않고 가동 중지가 발생하지 않음
4. 규모를 따지지 않는 한 자릿수 밀리초의 성능
DynamoDB의 사용사례
- 금융 서비스 애플리케이션
: 가용성 요구 사항이 엄격한 금융 서비스 애플리케이션에 적합
: 버전 관리 및 라이선싱을 위해 인스턴스 규모를 수동으로 조정해야 하는 운영 부담을 없애줌
- 게임 애플리케이션
: 가용성 요구 사항이 가장 엄격한 애플리케이션에 적함
- 스트리밍 애플리케이션
: 콘텐츠/관리 서비스에 대한 메타데이터 인덱스로 사용, 실시간에 가까운 스포츠 통계를 제공하는 데 사용
DynamoDB 과금 단위
활성화하기로 선택한 모든 선택적 기능과 함께 테이블의 데이터 읽기, 쓰기 및 저장에 대한 요금을 청구
과금 단위
- RCU(Read Capacity Unit) = 1초당 최대 4KB 읽기 가능
- WCU(Write Capacity Unit) = 1초당 최대 1KB 쓰기 가능
DynamoDB 프리티어
- 25GB의 스토리지, 25개의 프로비저닝 된 쓰기 및 25개의 프로비저닝 된 읽기 용량 유닛(WCU, RCU)을 제공
- 매월 2억 건의 요청을 처리 가능
DynamoDB 사용 주의점
AUTO SCALING 전략
: 너무 크게 잡으면 비용이 많이 나오고, 작게 잡으면 성능이 떨어짐
: SCALE UP되고 2배 이상 초과할 경우 THROTTLING 발생
: 한번 SCALE UP되면 DOWN되기 쉽지 않음(평균의 함정)

키 설계
- 테이블과 보조 인덱스의 모든 논리적 파티션 키에서 균일하게 활동을 하도록 애플리케이션을 설계

DynamoDB를 사용하여 NOSQL 테이블 생성 및 쿼리

DynamoDB 연결할 수 있는 client 툴 소개
DynamoDB용 NoSQL Workbench
- Amazon AWS에서 제공하는 GUI 클라이언트 툴
- DynamoDB 테이블 설계, 생성, 쿼리 등을 시각적으로 관리
- 데이터 모델링, 시각화, 쿼리 개발 기능을 제공(WINDOW, MAC OS, LINUX에서 사용, 데이터를 CSV, JSON, SQL 등으로 내보낼 수 있음)
Dynobase
- Professional GUI Client for DynamoDB
- AWS 계정/프로파일 기반으로 DynamoDB 테이블을 자동으로 스캔하여 불러움
- 로컬 AWS Credential/Profile을 사용하여 테이블을 스캔
- CSV/JSON 엑스포트 기능을 제공
- 데이터 필터링 및 특정 결과 포맷팅을 지원
DynamoDB Local
- 로컬 환경에서 DynamoDB를 테스트하기 위한 도구
- 프로덕션 환경에 대한 의존성 없이 DynamoDB를 테스트할 수 있음
- DynamoDB 테이블 설계, 생성, 쿼리 등을 시각적으로 관리
- 로컬에서 DynamoDB를 실행하고 테스트 가능
- DynamoDB와 동일한 API 사용
- 로컬에서 데이터 베이스를 관리하고 테스트 가능
AWS Lambda 와 DynamoDB 연동
- AWS Lambda 함수를 DynamoDB 테이블과 연동하여 서버리스 환경에서 DynamoDB를 사용
- Lambda 함수를 DynamoDB 테이블에 연결, 데이터 저장/읽을 수 있음
- VPC 내에서 Lambda 함수와 DynamoDB를 연결할 수 있음
- AWS Toolkit for IntelliJ IDEA와 같은 IDE에서 AWS Lambda 함수를 개발/배포
Dynamon
- DynamoDB GUI 클라이언트 툴
- 로컬 DynamoDB를 사용하고 테스트
DynamoDB Management Console
- DynamoDB를 사용하면서 필요한 기능과 환경에 따라 적절한 클라이언트 툴을 선택하여 DynamoDB를 효과적으로 관리하고 활용할 수 있음