본문 바로가기

nosql

nosql 범주

키밸류(KeyValue)

가장 기초적이면서도 다른 데이터 모델의 기본이 되는 모델이다. 키밸류 모델은 특정 값을 조회용 고유 키와 매핑해 정해진 스키마 없이 저장되는 방식이다. HashMap처럼 키 값은 모두 고유한 값이어서 특정 키를 대상으로 랜덤액세스 할 때 유용하며, 정해진 데이터 모델이 없어 분산 시스템 또는 데이터베이스에 자주 등장한다. 다만 키밸류 간 연속성이 없어 영역 스캔이나 조회 시 성능이 불안정할 수 있다.


SimpleDB, Dynamo, Memcached, Coherence, Riak, Redis


순차적 키밸류(Ordered KeyValue)

KeyValue 모델에 데이터 간 연속성을 추가해 영역 스캔에 힘을 더하였다. 디스크에 키밸류 쌍을 순차적으로 저장한다.


Tokyo Cabinet, MemcacheDB, BerkeleyDB


빅테이블(Bigtable)

구글에서 발표한 「빅테이블」논문에서 지어진 이름이며, 테이블 형식(Tabular)이라고도 불린다. 순차적 키밸류 모델에 데이터 모델링이 가능하도록 변경된 모델이다. 키밸류 또는 순차적 키밸류 모델에서는 데이터를 바이너리나 텍스트 형태로만 보관이 가능해 애플리케이션 단에서 데이터 구조를 재형성해야 했다. 빅테이블 모델에서는 재귀적 데이터 구조를 형성할 수 있지만 성능 저하를 방지하기 위해 데이터 구조를 2~3단계까지만 허용한다.

관련제품

도큐먼트(Document)

오브젝트형 데이터베이스(Object Database)가 NoSQL 형태로 파생된 모델이라 볼 수 있다. 다만 오브젝트 대신 XML, JSON, YAML, 바이너리와 같은 형태의 문서를 저장한다. 빅테이블 모델보다 기능 중심적인 도큐먼트 모델은 데이터 구조 깊이에 제한을 두지 않는다.


MongoDB, CouchDB, Couchbase, Cloudant, ElasticSearch


그래프(Graph)

빅데이터를 수집ㆍ저장하기 위해 모든 데이터베이스 기능을 제외하고 원초적인 키밸류 모델로 시작하더니 이젠 다시 데이터 간 관계를 형성시키려 한다. 하지만 그래프와 관계형 데이터베이스는 분명한 차이가 있다. 일단 데이터 모델이 관계형은 고정적이지만 그래프는 가변적이다. 노드 데이터를 복잡하게 구조화할 수 있고, 노드 간 관계를 수의 제약 없이 형성할 수 있다. 관계형은 엔티티간의 관계를, 그래프는 노드 사이의 연결을 지향한다. 예를 들어 ‘노드 A는 노드 B에 종속한다’ 또는 ‘A -> B’ 형식이다. 이러한 이유로 사용자 간 또는 제품 구매 간 관계 도출 같은 분석 시스템에 자주 쓰인다.


Neo4j, FlockDB


데이터 모델별 특성은 다음과 같다.

[표 Ⅱ-2-1] 데이터 모델별 특성 (*na = 제품마다 다름)

데이터 모델성능확장성유연성복잡도기능
키밸류
빅테이블
도큐먼트
그래프nana
관계형nana


시스템 구성별 분류

지금까지는 데이터 모델, 즉 논리적인 관점의 NoSQL이었다. 이번에는 시스템 측면에서 대규모 데이터베이스를 구축하기 위해 NoSQL이 어떻게 관리되는지 알아보자.

마스터-슬레이브

마스터-슬레이브는 하나의 마스터 노드가 다수의 슬레이브 노드를 관리하기 위해 슬레이브 및 데이터의 메타 정보를 보관하는 방식이다. 이러한 마스터-슬레이브 방식은 클러스터에 서버를 추가하거나 삭제하는 작업은 비교적 쉽게 할 수 있다. 하지만 메타데이터를 관리하는 마스터 서버에 부하가 발생할 수 있으며, 마스터가 고장나면 전체 클러스터가 중단될 수 있다. 서비스의 지속성이 중요하다면, 마스터 HA6) 또는 이중화를 제공하는지 확인하고 선택해야 할 것이다.

라운드테이블 방식



[그림 Ⅱ-2-4] Dynamo의 DHT

라운드테이블은 DHT7)를 각 노드에 저장하는 방식이다. DHT는 일종의 해시테이블(HashTable)인데 DHT의 키는 미리 정의된 해시키이고 DHT의 밸류는 노드의 위치다. 그림처럼 각 노드는 자신이 할당받은 키값보다 높은 키영역의 데이터를 포함한다. 즉 노드 B는 Key K를 포함한 노드A와 B사이의 모든 키데이터를 보관하며, 복제 계수 N-1만큼의 노드로 복제한다. 그러면 노드 C와 D도 A-B영역의 데이터를 보관하게 된다. 별도의 마스터서버가 없기 때문에 고가용성 측면에서 좋다. 하지만 클러스터에 멤버 노드를 추가/삭제할 때 노드들간 데이터 이동이 발생하는데, 이때 대량의 네트워크 트래픽이 발생할 수 있다. 
지금까지 다양한 NoSQL 제품군과 동작방식에 따른 분류를 알아보았다. 현재 주어진 업무나 비즈니스에 필요한 NoSQL이 눈에 보이는 사람도 있고, 아직 확답이 오지 않는 독자도 있을 것이다. 이러한 분은 NoSQL이 정말 필요한지 고민해 보거나 정확한 요구사항이 도출되었는지부터 다시 확인해 볼 필요가 있다.

'nosql' 카테고리의 다른 글

MongoDB  (0) 2016.04.07
apache Hbase  (0) 2016.04.07
nosql 등장배경  (0) 2016.04.07
cassandra 3편 -퍼옴  (1) 2016.04.06
cassandra 2편 -퍼옴  (0) 2016.04.05