NoSQL? 비관계형 데이터베이스 유형들
특징
- 유연성 : 유연한 스키마를 제공
- 확장성 : 강력한 서버를 추가하는 대신 분산형 하드웨어 클러스터를 이용
- 고성능 : 특정 데이터 모델 및 액세스 패턴에 최적화
- 고도의 기능성 : 각 데이터 모델에 맞춰 특별히 구축된 뛰어난 기능의 API와 데이터 유형을 제공
일관성과 확장성 사이의 Trade-off
- Consistency가 데이터베이스의 절대적인 요소가 아님을 주장하는 움직임 생성
- 다수가 동시에 읽고 쓰는 상황에서의 성능 향상.
- 분산 환경에서 노드들이 잘 작동하고 있는데, 시스템의 일부가 고장나면 전체 데이터베이스를 사용할 수 없게 되는 문제를 해결하기 위해 등장.
데이터 일치
- RDBMS에 복잡한 메모리 내 데이터 구조를 저장하려면 ORM 프레임워크를 이용하여 관계형 표현으로 반환해야 하는 번거로움이 있으며, 동시에 여전히 데이터 불이치가 존재할 수 있다.
- NoSQL은 메모리 내의 데이터가 어떤 구조이든지 하나의 집합으로 취급하여 저장한다.
- 중복 데이터 허용.
스키마 LESS
- 스키마와 같이 데이터 구조를 미리 정의하는 행위가 자유로움.
- 스키마가 없으니 클러스터링에 용이함.
집합 지향 모델
- 집합 자료구조로 이루어져 있다.
- RDBMS처럼 하나의 엔티티에 대한 ACID 트랜잭션을 지원하진 않지만 집합에 대한 트랜잭션을 지원함.
- 연관된 데이터들이 함꼐 움직이기 때문에 수평적 확장에 용이하다.
CAP 이론

출처:https://blog.nahurst.com/visual-guide-to-nosql-systems
- 일관성(Consistency) : 분산되 노드 중 어느 노드로 접근하더라도 데이터 값이 같아야 한다.
- 가용성(Availability) : 클러스터링 된 노드 중 하나 이상의 노드가 실패 되더라도 정상적으로 요청을 처리할 수 있는 기능을 제공한다.
- 분산 허용(Partitioning Tolerance) : 클러스터링 노드 간에 통신하는 네트워크가 장애가 발생하더라도 정상적으로 서비스를 수행한다.
유형
- 키 값 (해쉬)
- 가장 유연한 NoSQL DB 유형, 수평 확장에 뛰어남, 가장 단순한 구조
- 애플리케이션이 값 필드에 저장된 모든 데이터를 제약 없이 완벽하게 제어 가능
- 어떠한 형태의 데이터라도 담을 수 있다. 이미지나 비디오도 가능
- Redis, Oracle NoSQL DB, VoldeMorte

-
문서(트리)
-
반구조적 데이터의 저장, 검색, 관리에 이용
-
키-도큐먼트 형태로 저장
-
테이블의 스키마가 유동적, 즉 레코드마다 각각 다른 스키마를 가질 수 있다.
-
XML, JSON 같은 Document를 이용해 레코드를 저장
-
트리형 구조로 레코드를 저장하거나 검색하는데 효과
-
MongoDB, CouchDB, Azure Cosmos DB

-
그래프(그래프)
- 노드 및 노드 간 연결을 보여주는 관계로 구성
- 노드와 엣지로 이루어짐
- 소셜 네트워크, 예약 시스템, 사기 감지에 이용
- Neo4j, BlazeGraph, OrientDB
- ACID 트랜잭션 제공

-
넓은 열
- 테이블, 행, 열 형식으로 데이터를 저장 및 관리
- NoSQL 중 RDBMS에 가장 가까운 형태
- 열 형식을 사용하는 애플리케이션에 광범위하게 배포되어 스키마 없는 데이터를 수집
- Hbase, GoogleBigTable, Vertica

참고문헌
https://aws.amazon.com/ko/nosql/
https://www.oracle.com/kr/database/nosql/what-is-nosql/
https://code-lab1.tistory.com/53
https://namu.wiki/w/NoSQL