[DB] NoSQL 데이터베이스 정리
NoSQL
해당 게시글은 NoSQL에 대한 내용을 간략하게 정리하고, 여러가지 NoSQL Database를 특징별로 정리합니다.
RDB와의 차이
대부분 RDB와 NoSQL의 차이를 인지하고 있는데 이를 표로 간략하게 정리하면 다음과 같습니다.
- | RDB | NoSQL |
---|---|---|
데이터모델 | 고정 행과 열이 있는 테이블 | document-Json, key value, ... |
예시 | Oracle, MySQL, MSSQL, PostgreSQL | MongoDB, Redis, Hbase, Neo4j |
목적 | 범용 | 범용, 대량의 데이터 추출, 관계 분석, 탐색 등 |
스키마 | 엄격 | 유연 |
확장성 | 수직 | 수형성 |
ACID 트랜잭션 | 지원 | 대부분 지원하지 않음 |
ORM | ORM 필요 | 대부분 ORM이 필요없음 |
NoSQL의 장단점
NoSQL의 장점
NoSQL은 다음의 장점을 가집니다.
-
유연한 데이터 모델
- 유연한 스키마를 가지므로, 요구 사항이 변경되었을 때 데이터베이스를 쉽게 변경할 수 있습니다.
-
수평적 확장
- 일반적으로 RDB의 경우에는 용량 초과시 수직적 확장(크고 비싼 서버)가 필요하지만, NoSQL의 경우는 수평적 확장이 가능합니다. (제한은 존재함)
-
빠른 쿼리
- 일반적으로 RDB의 경우, 여러 테이블을 Join해서 쿼리를 사용하지만, NoSQL의 경우는 쿼리에 최적화되어 저장합니다.
-
개발자에 친화적
- NoSQL은 데이터 구조를 일반적인 프로그래밍 언어의 데이터 구조에 매핑합니다.
- 적은 코드를 작성하면서, 개발 시간을 단축하고 버그를 줄일 수 있습니다.
NoSQL의 단점
NoSQL에서 이야기되는 가장 큰 단점으로는 ACID 트랜잭션을 지원하지 않는 것입니다. 물론 적절한 스키마 디자인을 제공하면 단일 레코드의 원자화는 가능합니다.
ACID
- A : atomicity, 원자성
- C : consistency, 일관성
- I : isolation, 고립성
- D : durability, 지속성
NoSQL 데이터베이스 별 특징
NoSQL 데이터베이스의 특성을 크게 다음과 같이 4가지로 나눌 수 있습니다.
- Key-Value Database
- Document Database
- Column Family Database
- Graph Database
Key-Value Database
Key와 Value로 이루어졌으며, 저장과 조회이란 원칙에 가장 충실합니다.
Key-Value Database는 다음의 특징을 가집니다.
- Key 값은 unique한 고유값으로 유지되어야합니다.
- 테이블간 join을 고려하지 않으므로 RDB의 외부키 등이 필요없습니다.
- Value에 모든 데이터 타입을 허용하며 이에 따라 검증 로직을 잘 구성하는 것이 중요합니다.
Key-Value Database는 다음과 같은 종류들이 있습니다.
- Redis
- AWS DynamoDB
- Oracle Berkely
- Riak
Key-Value Database는 일반적으로 아래의 경우에서 많이 사용합니다.
- 성능 향상을 위해 데이터베이스 데이터 캐싱
- 웰 어플리케이션에서 일시적인 속성 추적
-
모바일 애플리케이션용 사용자 데이터 정보와 구성 정보 저장
- 다만 개인정보 등은 NoSQL에 저장하는 것은 지양해야함.
-
이미지나 오디오 파일 같은 대용량 객체 저장
- 일반적으로 NAS를 사용하기는 함.
Document Database
Key-Value Database와 마찬가지로 데이터 저장시에는 Key-Value Type을 사용하지만, 가장 큰 차이는 Document 타입으로 저장됩니다. (Ex. JSON, XML)
Document Database는 다음의 특징을 가집니다.
- 값을 문서(semi-structured entity)로 저장합니다. (일반적으로 JSON, XML)
- 값을 저장하기 전에 schema를 별도로 정의하지 않으며, document가 schema가 됩니다.
-
각 문서별로 다른 필드를 가질 수 있기 때문에 개발자는 입력시 컬럼과 필드에 대한 관리를 제대로 해야합니다.
- 필도 속성에 대한 관리가 필요합니다.
Document Database는 다음과 같은 종류가 있습니다.
- MongoDB
- CouchDB
- Couchbase
Document Database는 일반적으로 아래의 경우에서 많이 사용합니다.
- 대용량 데이터를 읽고 쓰는 웹사이트 백엔드 지원
- 제품처럼 다양한 속성이 있는 데이터 관리
- 다양한 유형의 메타데이터 추적
- Json 데이터 구조를 사용하는 어플리케이션
- 비정규화된 중첩 구조의 데이터를 사용하는 애플리케이션
CouchDB와 Couchbase의 차이.
- Couchbase는 JSON용 SQL과 같은 쿼리 언어 N1QL이 있으나, CouchDB는 없습니다.
- Couchbase는 기업용이 있으나, CouchDB는 오픈소스만 있습니다.
- Couchbase는 pessimistic lock이 있으나, CouchDB는 MVCC 개념을 사용하므로 없습니다.
- Couchbase의 topology는 분산되어 있으나, CouchDB는 master-master 복제 개념입니다.
Column Family Database
Column Family Database는 대용량 데이터, 읽기와 쓰기 성능, 고가용성을 위해 설계되었습니다. (Ex. 구글의 Big Table, 페이스북의 Cassandra)
Column Family Database는 다음의 특징을 가집니다.
-
RDB와 같이 Column과 Row를 사용해서 스키마를 정의합니다.
- 컬럼 수가 많으면 관련된 컬럼들을 컬렉션으로 묶을 수 있습니다. (이를 Column Family라고 합니다.)
- Document Database와 같이 미리 정의된 스키마를 사용하지 않으므로 원하는 시점에 컬럼을 추가가능합니다.
- 테이블간 조인을 지원하지 않습니다.
즉, 다음과 같은 모습으로 구성되어 있습니다.
Column Family Database는 다음과 같은 종류가 있습니다.
- Hbase
- Cassandra
- GCP(Google Cloud Platform) BigTable
- MS Azure Cosmos DB
Column Family Database는 일반적으로 아래의 경우에서 많이 사용합니다.
- 데이터베이스에 쓰기 작업이 많은 애플리케이션
- 지리적으로 여러 데이터 센터에 분산되어 있는 애플리케이션
- 복제본 데이터가 단기적으로 불일치해도 큰 문제가 없는 애플리케이션
- 동적 필드를 처리하는 애플리케이션
- 수백만 테라바이트 정도의 대용량 데이터를 처리할 수 있는 애플리케이션
다음은 Column Family Database의 성능 표입니다.
일반적으로 Hbase와 Cassandra가 많이 쓰입니다. 다만, Hbase는 성능이 높으나 시스켐 복잡도와 Learning Curve의 문제로 인해 Cassandra가 더 보편적으로 선호됩니다.
Graph Database
Graph Database는 Graph 이론을 활용한 것이며, Node(노드)들과 Relationship(관계)로 구성된 개념입니다. 노드는 Key-Value 값을 가지고 있고 노드는 하나 이상의 레이블을 구성할 수 있습니다.
Graph Database는 다음의 특징을 가집니다.
- 간단하고 직관적인 데이터 모델을 가집니다.
Graph Database는 다음과 같은 종류가 있습니다.
- Neo4j
- Titan
- AllegroGraph
Graph Database는 일반적으로 아래의 경우에서 많이 사용합니다.
- 지식 그래프나 소셜 그래프
- 자격 증명 그래프
- 사기 탐지 및 추천 엔진
- 생명 과학 분야
출처