NoSql 이란?
-Not Only SQL.
비관계형 데이터베이스를 지칭한다
대량의 분산된 데이터를 저장하고 조회하는 데 특화되었으며
스키마 없이 사용 가능하거나 느슨한 스키마를 제공하는 저장소를 말한다.
특징
- 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음
- RDBMS에 비해 대용량의 데이터를 저장할 수 있다
- 직접 프로그래밍을 하는 등의 비SQL 인터페이스를 통한 데이터 액세스
- 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성
- 관계형 데이터베이스에서는 지원하는 Data처리 완결성(Transaction ACID 지원) 미보장
- 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의 (Schema-less)
- 고정되지 않은 테이블 스키마를 갖는다
- 데이터베이스의 중단 없는 서비스와 자동 복구 기능지원
- 다수가 Open Source로 제공
- 확장성, 가용성, 높은 성능
** 장단점으로 구분하기 **
장점
- RDBMS에 비해 저렴한 비용으로 분산처리와 병렬 처리 가능
- 비정형 데이터 구조 설계로 설계 비용 감소
- Big Data 처리에 효과적
- 가변적인 구조로 데이터 저장이 가능
- 데이터 모델의 유연한 변화가 가능
단점
- 데이터 업데이트 중 장애가 발생하면 데이터 손실 발생 가능
- 많은 인덱스를 사용하려면 충분한 메모리가 필요. 인덱스 구조가 메모리에 저장
- 데이터 일관성이 항상 보장되지 않음
종류
1. Key-Value Database

기본적인 패턴으로 KEY-VALUE 하나의 묶음(Unique)으로 저장되는 구조로 단순한 구조이기에 속도가 빠르며 분산 저장 시 용이하다.
Key 안에 (COLUMN, VALUE) 형태로 된 여러 개의 필드, 즉 COLUMN FAMILIES 갖는다.
주로 SERVER CONFIG, SESSION CLUSTERING등에 사용되고 엑세스 속도는 빠르지만, SCAN에는 용이하지 않다.
Ex) Redis, Oracle NoSQL Database, VoldeMorte
2. Wide-Column Database

출처: https://database.guide/what-is-a-column-store-database/
행마다 키와 해당 값을 저장할 때마다 각각 다른값의 다른 수의 스키마를 가질 수 있다.
위 그림을 참고하면 사용자의 이름(key)에 해당하는 값에 스키마들이 각각 다름을 볼 수 있다.
이러한 구조를 갖는 WIDE COLUMN DATABASE 는 대량의 데이터의 압축, 분산처리, 집계 쿼리 (SUM, COUNT, AVG 등)및 쿼리 동작 속도 그리고 확장성이 뛰어난 것이 그 대표적 특징이라 할 수 있다.
EX) Hbase, GoogleBigTable, Vertica
3. Document Database

출처: https://inyl.github.io/programming/2017/05/09/database.html
테이블의 스키마가 유동적, 즉 레코드마다 각각 다른 스키마를 가질 수 있다.
보통 XML, JSON과 같은 DOCUMENT를 이용해 레코드를 저장한다.
트리형 구조로 레코드를 저장하거나 검색하는 데 효과적이다.
Ex) MongoDB, CouchDB, Azure Cosmos DB
4. Graph Database

출처: https://database.guide/what-is-a-graph-database/#more-896
데이터를 노드로(그림에서 파란, 녹색 원) 표현하며 노드 사이의 관계를 엣지(그림에서 화살표)로 표현
일반적으로 RDBMS 보다 성능이 좋고 유연하며 유지보수에 용이한 것이 특징.
Social networks, Network diagrams 등에 사용할 수 있다.
Ex) Neo4j, BlazeGraph, OrientDB
참조 : https://www.samsungsds.com/kr/insights/1232564_4627.html
https://code-lab1.tistory.com/53