TL;DR
NoSQL이란? 관계형 데이터 베이스 이외의 형식으로 데이터를 저장하는 데이터 베이스를 총칭
NoSQL의 종류
NoSQL
Not Only SQL
- 비관계형 데이터 베이스
- 관계형 데이터 베이스 이외의 형식으로 데이터를 저장하는 데이터 베이스를 총칭
- RDBMS의 한계를 극복하기 위해 Join이 없고, 고정된 스키마를 갖지 않는 새로운 형태의 데이터 저장소
- Document, Graph, Key-Value, Column Store 등의 방식이 있다.
✅ NoSQL 특징
- RDBMS와 달리 데이터 간의 관계를 정의하지 않는다.
- 관계형 데이터 베이스가 데이터의 관계를 Foreign Key 등으로 정의하고 이를 이용해 Join 등의 관계형 연산을 한다고 한다면, NoSQL은 데이터 간의 관계를 정의하지 않는다.
- 고정되지 않은 테이블 스키마 (테이블의 스키마가 유동적)
유연성
- 데이터 베이스 설계를 변경하지 않고도 필요한 속성을 동적으로 추가할 수 있다.
- RDBMS에 비해 훨씬 대용량의 데이터를 저장 가능
- 분산형 구조를 통해 여러 대의 서버에 분산해 저장하고 상호 복제해 데이터 유실이나 서비스 중지에 대비 가능
확장성
가용성
- RDBMS는 보통 하나의 고성능 머신에 데이터를 저장함
- 읽기 작업보다 쓰기 작업이 더 빠르고, 일반적으로 RDBMS에 비해 쓰기와 읽기 성능이 빠르다.
고성능
- 대량의 데이터를 빠르게 처리하기 위해 메모리에 임시 저장하고 응답하는 등의 방법을 사용
✅ NoSQL을 사용해야하는 이유
- 유연성과 확장성을 비롯해 고성능의 데이터 베이스를 필요로 하는 다양한 현대 어플리케이션에 적합하다.
- 유연성 : 유연한 스키마를 제공해 보다 빠르고 반복적인 개발을 가능하게 한다. DB를 반정형 및 비정형 데이터에 이상적으로 만들어준다.
- 확장성 : 고가의 강력한 서버를 추가하는 대신 분산형 하드웨어 클러스터를 이용해 확장하도록 설계된다.
- 고성능 : 특정 데이터 모델 및 액세스 패턴에 대해 최적화되어 뛰어난 성능을 얻게 한다.
✅ NoSQL 종류
1️⃣ Key-Value DB
Redis, Oracle NoSQL, Voldemorte, ...
- Amazon의 Dynamo Paper 에서 유래
- Key와 Value의 쌍으로 데이터가 저장되는 유형
- Key는 값에 접근하기 위한 용도이고 (Unique 값)
- Value에는 어떤 형태의 데이터(이미지, 비디오 포함)도 담을 수 있다.
- 간단한 API를 제공해 질의 속도가 굉장히 빠름
- 파티셔닝이 가능하고 다른 유형의 DB로는 불가능한 범위까지 수평 확장을 가능하게 한다.
👆 언제 사용하는게 좋을까?
- 성능 향상을 위해 관계형 데이터 베이스에서 데이터 캐싱
- 모바일 어플리케이션용 사용자 데이터 정보와 구성 정보 저장
- 이미지나 오디오 파일 같은 대용량 객체 저장
2️⃣ Doument DB
MongoDB, Azure Cosmos DB, CouchDB, ...
- Lotus Notes에서 유래
- Key-Value 와 차이는 값을 문서로 저장한다는 점
- 여기서 문서란 JSON, XML과 같은 형식을 말한다.
- Document 내 객체는 서로 다른 필드를 가질 수 있음
- 어플리케이션 코드에서 사용하는 것과 동일한 문서 모델 형식을 사용해 DB에서 보다 쉽게 데이터를 저장하고 쿼리할 수 있다.
- 단점이라면 쿼리가 SQL과 다르고, 질의 결과가 JSON이나 XML 형태로 출력된다는 점
👆 언제 사용하는게 좋을까?
- 대용량 데이터를 읽고 쓰는 웹 사이트용 백엔드 지원
- 각 문서가 고유하고 시간에 따라 진화하는 콘텐츠 관리 시스템, 사용자 프로파일 및 카탈로그 등
- 다양한 유형의 메타 데이터 추적
- JSON 데이터 구조를 사용하는 어플리케이션
3️⃣ Wide Column DB
HBase, Cassandra, Hypertable, ...
- Big Table DB라고도 하며, Google의 BigTable Paper에서 유래
- Column Family 데이터 모델을 사용
- 행마다 각각 다른 값과 다른 수의 스키마를 가질 수 있음
- 사용자 이름(Key)에 해당하는 값에 스키마들이 각각 다름
- 대량의 데이터의 압축, 분산 처리, 집계 처리 및 쿼리 동작 속도 그리고 확장성이 뛰어남
👆 언제 사용하는게 좋을까?
- 열이 모든 행에 대해 항상 동일하지 않고, 여러 데이터 베이스 노드에 분산될 수 있는 대규모 데이터 셋이 필요할 때 사용하는 것이 이상적
- Log data 저장
- 주식 거래 데이터나 기온 모니터링 데이터 등 시계열 데이터 저장
4️⃣ Graph DB
Neo4J, Blasegraph, OrientDB
- Euler & Graph Theory에서 유래
- 노드, 엣지, 프로퍼티와 함께 그래프 구조를 사용해 데이터를 표현하고 저장
- RDBMS보다 성능이 좋고 유연하며 유지보수에 용이하다.
- 클러스터링에 적합하지 않고 질의 언어도 특화되어 있어 배우기 어렵다.
👆 언제 사용하는게 좋을까?
- 데이터 간의 관계가 탐색의 키일 경우
- 페이스북이나 트위터 같은 SNS 에서 내 친구의 친구를 찾는 질의 등에 적합하고, (소셜 네트워킹)
- 연관된 데이터를 추천해주는 추천 엔진이나 패턴 인식 등의 데이터 베이스로도 적합
References