01. NO-SQL 이란?
SQL(Structured Query language)?
- 구조화 된 질의 언어.
- 관계형 데이터 베이스(RDBMS)에서 데이터 조회, 저장, 수정, 삭제 한다.
- DB에 정해진 구조(Schema)에 따라 테이블에 저장 한다.
- 테이블간 관계가 있으며 이관계를 이용하여 중복 없이 데이터를 다룰 수 있다.
- 대다수의 회사, 은행, 보험, 증권사, 공공기관에서 사용 한다.
- Oracle, MySQL, PostgreSQL



NO-SQL(Non-RelationalSQL)
- SQL과 반대라 생각하면 된다.
- 비관계형 데이터 베이스 시스템에서 데이터 조회, 저장, 수정, 삭제 한다.
- 정형화 되지 않은 구조를 사용 한다.
- 대규모 대용량 동시 서비스가 필요한 Instargram, faceBook 등에서 사용 한다.
- MongoDB, DynamoDB



가족을 관리하는 업무 요건이 추가로 발생한 경우 어떻게 처리 해야할까?
SQL
- 가족 관리 Table 추가 생성 필요 하다.
- SQL 새로 작성 필요 하다.




NO-SQL
- 입력시 필드만 추가 하면 된다.
- 조회 방법에는 변화가 없다.



02. DynamoDB 소개
Amazon DynaomDB홈페이지 공식 자료
작동 방식
- 모든 규모에서 고성능 애플리케이션을 실행하도록 설계된 완전관리형의 서버리스 키-값 NoSQL 데이터베이스입니다.
- 보안, 지속적인 백업, 자동화된 다중 리전 복제, 인 메모리 캐시 및 내보내기 도구를 제공합니다.
기능
- 키 값과 문서 데이터 모델을 지원하는 NoSQL 데이터베이스의 일종입니다.
- 우선 작은 규모에서 시작했다가 전역으로 확장하여 초당 페타바이트 단위의 데이터와 수천만 건의 읽기 및 쓰기 요청을 지원합니다.
- 기존 관계형 데이터베이스에서는 역부족인 인터넷 규모의 고성능 애플리케이션을 실행할 수 있도록 설계되었습니다.
규모에 따른 성능
- 키-값 및 문서 데이터 모델 : 키-값과 문서 데이터 모델을 모두 지원.
- Accelerator를 사용하여 지연 시간을 마이크로 초 수준으로 최소화 : DynamoDB Accelerator(DAX) 메모리 캐시 지원하여 빠른 읽기.
서버리스
- 온디맨드와 프로비저닝의 용량 모드를 제공하여 비용 절약 가능 합니다.
엔터프라이즈에 사용 가능
- ACID(Atomicity, Consistency, Isolation, Durablility) 트랜잭션 지원 합니다.
- 저장 중 암호화 지원 합니다.
- 특정 시점으로 복구 가능 합니다. (Point-In-Time Recovery)
- 온디맨드 백업 및 복원 가능 합니다.
03. 구축하기
Amazon 홈페이지 DynamoDB 검색 및 테이블 생성





04. 사용방법
DyaDB_TechDay_DBA Table에 Insert 하기



DyaDB_TechDay_DBA Table에 Insert 하기





DyaDB_TechDay_DBA Table 조회 방법


05. 검색성능
저장 구조
Table

LSI(Local Secondary Index)

LSI 특징
- Partition Key는 고정이며 Sort Key만 수정 가능하다.
- 최초 Table 생성시 같이 생성 하여야 한다.
- Table과 같은 영역에 저장 된다.
- 1개만 생성 가능하다.
GSI (Global Secondary Index)


GSI 특징
- Partition Key가 Table Partition Key에 종속적이지 않음.
- Table과 다른 영역에 저장 된다.
- Table 생성 후에도 생성 가능하다.
- 1개 이상 생성 가능하다.
검색 종류별 SCAN 방식
스캔(FULL SCAN) 방식

쿼리(HASH KEY SCAN) 방식

저장 구조

INDEX 생성에 따른 검색방법 및 효율
기본 Primary Key만생성시(사원번호(Partition Key)+ 사원명(Sort Key))

검색방법 스캔(FULL SCAN)

FULL SCAN 방식이 선택된 이유
- 조건절에 Primary Key(Partition Key)가 없다.
- 다른 GSI 확인시 사원명 또는 입사일이 선두로 나오는 Attribute(Column) 가 없다.
- 사용할 수 있는 INDEX가 없어 스캔 방식으로 검색.
효율성
- 사원명 Attribute는 분포도가 아주 좋을 것으로 판단됨.
- 분포도 좋은 Attribute에 INDEX가 없어 해당 Item 을 바로 찾을 길이 없어 Table 전체를 다 읽어야 하는 비효율이 존재함
GSI 생성시 (사원명(Partition Key)+ 입사일(Sort Key)ADD 부서명)

검색방법 스캔(INDEX SCAN)

INDEX SCAN 방식이 선택된 이유
- 조건절에 사원명 + 입사일 Attribute가 동등조건에 있다.
- 사원명은 Partition Key로 동등조건 조회 시 Partition 위치를 알 수 있다.
- 입사일은 Sort Key로 사원명이 1개 Item 이상일 경우 입사일까지 사용함으로 더 검색범위를 줄일 수 있다.
효율성
- 사원명 + 입사일 조건으로 아주 소량만 검색하고 조회를 마칠 수 있어 효율적이다.
06. PartQL
Amazon DynamoDB용 SQL 호환 쿼리 언어
- Amazon DynamoDB에서는 SQL 호환 쿼리 언어 입니다.
- Amazon DynamoDB에서 데이터를 선택, 삽입, 업데이트, 삭제할 수 있습니다.
- PartiQL 사용하면 DynamoDB 테이블과 쉽게 상호 작용하고 AWS Management Console, NoSQL Workbench, AWS Command Line Interface 및 PartiQL용 DynamoDB API를 사용하여 임시 쿼리를 실행할 수 있습니다.
PartiQL 이란?
- PartiQL은 구조화 데이터, 반구조화 데이터 및 중첩 데이터를 포함하는 여러 데이터 스토어에서 SQL 호환 쿼리 액세스를 제공합니다.
- Amazon 내에서 널리 사용되며 현재 DynamoDB를 비롯한 여러 AWS 서비스의 일부로 제공됩니다.
DML Syntax
SELECT
SELECT expression [, ...]
FROM table[.index]
[ WHERE condition ] [ [ORDER BY key [DESC|ASC] , ...]
UPDATE
UPDATE table
[SET | REMOVE] path [= data] […]
WHERE condition [RETURNING returnvalues]
::= [ALL OLD | MODIFIED OLD | ALL NEW | MODIFIED NEW] *
DELETE
DELETE FROM table WHERE condition [RETURNING returnvalues] ::= ALL OLD *
INSERT
INSERT INTO table VALUE item
DML 활용

