나무위키의 내용을 요약/정리 했습니다.
NoSQL은 Not only SQL의 약자로 데이터를 저장하는 데에 SQL 외에 다른 방법도 있다! 라고 보면 될 듯 하다.
MongoDB와 CouchDB에서 사용하는 쿼리 언어는 전혀 다름에도 SQL이 아니기에 NoSQL 카테고리에 범주한다.
헷갈릴 수 있는데 NoSQL != No RDBMS 임을 알자. BerkleyDB와 같은 NoSQL 이면서 RDMS인 녀석도 있다.
(반대로 No RDBMS != NoSQL 이기도 하다. KV-store라는 녀석이 있다.)
NoSQL의 정의가 명확하지는 않지만 현재 NoSQL이라 불리는 DB들은 대체적으로 공통적인 부분이 있다.
- 대부분 클러스터에서 실행할 목적으로 만들어 졌다.
- 대부분 오픈소스이다.
- 스키마 없이 동작(Schema-less)하며, 구조에 대한 정의 변경 없이 레코드에 자유롭게 필드를 추가할 수 있다.
RDMS은 트랜잭션을 통한 안정적인 데이터 관리가 가능하여 현재까지도 많은 인기를 누리고 있다.
하지만 빅데이터가 등장하면서 RDBMS에 한계가 발생했다: Scale-up(수직적 확장) 비용의 증가
NoSQL은 데이터의 일관성을 다소 포기하고 분산 저장하는 Scale-out(수평적 확장)을 목표로 등장했다.
특징
- 일관성 ↓ 확장성 ↑
- 분산 저장(scale-out)
- Schema-less
- 데이터 일치
실제 메모리 내 데이터 구조와 RDBMS와는 데이터 불일치가 존재한다. (ORM이 있다 하더라도)
NoSQL은 데이터 불일치가 없다.
종류
- Aggregate-oriented(집합 지향) 모델
-- Key-value
-- Document
-- Column-family
- Graph
Key-value
가장 단순한 형태의 NoSQL, 수평적 확장이 용이
값을 사용한 쿼리가 불가능
대표적으로 Memcached, Riak, Redis, Amazon Dynao DB, LevelDB
Document
key-value 모델보다 한층 진화된 모델, key-document로 볼 수 있다.
Document로 저장되므로 내부의 item을 이용한 쿼리가 가능하다.
SQL과는 다른 형태의 쿼리이며 JSON이나 xml형태로 출력된다.
대표적으로 MongoDB, Couchbase, MarkLogin 등이 있다.
Column-Family
이 모델은 특이하게도 key에서 필드를 결정한다.
key가 Row, Column-family, Column-name을 가진다.
클러스터링이 쉽게 이뤄지며, Time stamp가 존재해 히스토리를 알 수 있다.
Blob 단위의 쿼리는 불가능하다.
대표적으로 HBase, Cassandra, Hypertable등이 있다.
Graph
상당히 독특한 디자인을 가진 모델로써 관계형 모델에 가깝다.
데이터는 연속적인 노드, 관계, 특성의 형태로 저장된다. (=그래프 형태)
페이스북이나 트위터 같은 소셜 네트워크에 적합하다.
클러스터링에는 적합하지 않다.
RDBMS가 가진 장점이 너무나 명확하기 때문에 NoSQL이 RDBMS를 대체하지는 않을 것 같다.
하지만 NoSQL이 각광받는 이유는 그만의 장점이 뚜렷하기 때문이다.
구매 내역이나 게임 로그 등의 데이터는 엄청난 양이 생성되지만 수정될 일이 거의 없다.
이런 경우는 ACID 트랜잭션이 필요 없으며 scale-out 등이 중요하므로 NoSQL이 효능을 발휘한다.
페이스북이나 트위터 등의 게시글들을 저장하는데 NoSQL이 사용된다. RDBMS보다 빠른 성능 때문이다.
각종 검색엔진에도 NoSQL이 사용된다. 웹 페이지 내의 텍스트들을 형태소 단위의 토큰으로 분리하고 URL을 매핑하는 구조를 NoSQL을 통해 이룬다.
데이터의 일관성이 보장되어야 하고 여러번의 조인 연산이 필요하다면 단연 RDBMS를 고려해야 할 것이다.
즉, 상호 보완할 수 있는 데이터베이스로 봐야하고 목적에 맞게 사용해야 한다.
그렇다면 NoSQL은 어떻게 선정해야 할까?
Key-value 제품을 포함해 가장 인기 있는 제품은 MongoDB, Couchbase, HBase, Cassandra 정도이다.
MongoDB와 Couchbase는 Document 모델이며 HBase, Cassandra는 Column-Family 모델이다
어느 모델이 적합한지는 프로젝트의 요구사항에 맞게 선택해야 할 것이다.
아래는 Document 모델인 Couchbase와 MongoDB를 비교한 표이다.
기능 | Couchbase | MongoDB |
복제 방식 | 멀티 마스터(마스터-마스터) | 마스터-슬레이브 |
확장성 | 매우 뛰어남 | 뛰어남 |
동적 쿼리 | 지원 안 함 | 지원함 |
데이터 안정성 | 매우 뛰어남 | 뛰어남. 높은 부하의 쓰기에는 부적합 |
앱 지원 | 존재. 서버와 자동 동기화 | 없음 |
Binary 데이터 읽기 | 상대적으로 느림 | 매우 빠름 |
복제 필터 기능 | 뛰어남 | 미약 |
'프로그래밍 > Database' 카테고리의 다른 글
mongo + ec2 + springboot (0) | 2020.09.10 |
---|---|
MySQL Locking Reads (0) | 2020.05.26 |
Couchbase cluster with 2 vm (0) | 2019.07.17 |
DBCP & Timeout (0) | 2019.04.05 |
Normalization & Denormalization 요약 (0) | 2019.03.19 |