Big Data와 소셜마케팅2012. 10. 11. 02:20

NoSQL 데이터스토어 개괄

- 김태호 (xissysnd@gmail.com), 정종락

(일반)SME_CloudComputing_NoSQLDataStores_10년8월.pdf 

 

최근 페이스북, 트위터 등 SNS 사이트의 폭발적인 성장으로 기존 관계형 데이터베이스(RDBMS)의 확장성(Scale-Out) 문제가 대두되고 있다. 이러한 상황에서 구글의 빅테이블(BigTable)의 클론프로젝트인 하둡(Hadoop) HBase, 페이스북이 만들어 공개한 카산드라(Cassandra) 등 대표적인 NoSQL 기술들을 살펴보고 그 특징 및 한계, 응용방안을 조명한다.

 

1. NoSQL(Not-Only SQL)

1.1. NoSQL 정의

- NoSQL은 Not-Only SQL의 약자로써, 비관계형 데이터저장소로, 보통 기존 전통적인 방식의 관계형 데이터베이스와(RDBMS)는 다르게 설계된 데이터베이스를 칭한다. 이러한 데이터스토어들은 테이블 스키마(Table Schema)가 고정되지 않고, 테이블 간 조인(Join) 연산을 지원하지 않으며, 대체로 수평적 확장(Horizontal Scalability)이 용이하다는 특징을 갖는다.

 

1.2. 관계형 데이터베이스(RDBMS)의 한계

- 대다수 웹서비스의 초기 데이터베이스로 MySQL, Oracle과 같은 관계형 데이터베이스가 이용되고 있으며, 일부 성공한 웹서비스만이 Master-Slave 형태의 리플리케이션(Replication)기능과 Memcached 메모리 캐시를 연동하여 데이터베이스의 부하와 응답시간을 줄이는데 성공해왔다.

- 하지만 여러 대의 서버로 대용량 데이터베이스를 운영하는 수평적 확정에 약한 RDBMS의 특성상, 전 세계에서 수 많은 사용자들이 몰려들어 쉬지않고 쏟아내는 정보를 처리하는데 기술적/비용적 한계를 드러내기 시작했다. 이는 곧 페이스북, 트위터, Digg 등 유명 SNS 업체들이 MySQL + Memcached 조합을 버리고 NoSQL 데이터스토어로 돌아서는 계기가 되었다.

 

1.3. NoSQL 기술의 발전

- 구글(Google)이 자신들의 독자적인 검색 시스템을 구축하기 위해 구현한 구글 파일 시스템(Google File System)과 이를 기반으로 확장성을 크게 향상시킨 분산 데이터스토어 빅테이블(BigTable)은 현재의 NoSQL 기술확산에 매우 큰 영향을 끼쳤다. IT업계는 시험적으로 적용되던 분산 컴퓨팅 개념들을 모아 훌륭한 성능을 보이는 분산 스토리지 시스템으로 재탄생된 모습에 고무되어, 야후(Yahoo) PNUTS, 아마존(Amazon) 다이나모(Dynamo), 페이스북 카산드라(Cassandra), 10gen MongoDB, 아파치 소프트웨어 재단(Apache Software Foundation/ASF) HBase와 CouchDB 등 다양한 NoSQL 기술들을 쏟아내며 점차 그 활용영역을 늘려가고 있다.

 

1.4. NoSQL 기술적 특징과 한계

- 분산 데이터베이스 시스템의 유명 이론인 CAP이론에 따르면, 데이터스토어는 CAP 중 2가지만을 선택할 수 있다. 관계형 데이터베이스에서는 CA에 특화되어 있기 때문에 분산환경에 적용하기가 어렵지만, NoSQL 제품들은 CAP 중에서 C 또는 A를 일부분 포기함으로써 분산확장이 쉽게 가능토록 했다. 더불어 조인(Join) 연산으로 대표되는 관계형 특성을 포기하고 Key-Value나 칼럼(Column) 기반 데이터 모델링을 통해 트랜잭션(Transaction) 구조를 느슨하게 함으로써 수평확장을 가능하도록 하였다.

- NoSQL이 고정된 스키마에 얽매이지 않고, 관계형 데이터베이스 보다 단순한 데이터 모델을 제공하며, Web 2.0 속성의 서비스에 좀 더 적합한 구조를 갖고 있지만, 기술적 성숙도 측면에서는 오랫동안 다양한 환경에서 사용되며 검증된 관계형 데이터베이스 보다 부족하다고 밖에 할 수 없다. 특히 트랜잭션의 부재로 데이터 일관성(Consistency)에 약점을 갖고 있다는 점에서 NoSQL이 모든 데이터스토어를 대체할 수 있는 기술이 절대 될 수 없다는 점을 인식해야 한다.

 

2. 유명 공개 NoSQL 제품별 특장점

2.1. 하둡(Hadoop) HBase

- 하둡(Hadoop)의 분산 데이터스토어인 HBase는 구글 빅테이블(BigTable)의 오픈소스 클론 프로젝트이며 자바로 구현되었다. 오픈소스 NoSQL 기술 중에서 현재까지 가장 큰 커뮤니티와 높은 성숙도를 갖고 검색 등 다양한 서비스에 활용되고 있다.

- HBase는 HFS(Hadoop File System)을 기반으로 모든 업데이트 정보들은 데이터 파일의 마지막에 위치하게 되어 Update/Write 시 탐색 시간(Seek Time)을 최소화 하도록 설계되었다. 이 데이터 파일들은 주기적으로 재구성(Compaction)되어 자동으로 다른 노드로 분리(Partitioning) 저장된다. SPoF(Single Point of Failure)를 없애기 위해 Master-Master 형태의 리플리케이션(Replication)을 지원한다.

- Row 단위 작업은 원자성(atomic)을 띄고 있어 자동적으로 Row 단위의 잠금(locking) 및 트랜잭션 효과를 낸다. 또한 여타 NoSQL 기술에서는 찾아보기 힘든 Row 단위 이상에서의 트랜잭션도 지원하여 사용편의성을 높였고, B-트리 인덱스를 사용해 범위 검색(Range Query)과 정렬에 강점을 보인다.

 

2.2. 페이스북 카산드라(Cassandra)

- 카산드라(Cassandra)는 페이스북에 의해 개발되어 2008년 오픈소스로 공개되었으며, 현재는 아파치 소프트웨어 재단(Apache Software Foundation/ASF)에 의해 관리되고 있는 NoSQL 제품이다. 페이스북과 트위터, Digg 등 유명 웹서비스에서 성공적으로 사용되고 있어 그 성능과 안정성을 인정받고 있다. 자바로 구현되었으며 아파치 라이선스(Apache license)로 운영되고 있다.

- 컬럼 그룹(Column Group) 형태의 데이터 모델을 갖고 있으며, 업데이트 내역이 일단 메모리에 캐시된 후 디스크에 쓰여지고 주기적으로 데이터 파일이 재구성된다는 점에서는 구글 빅테이블(BigTable), 하둡 HBase와 유사하다고 할 수 있다.

- 하지만, Eventually Consistent 개념을 도입하여 하나의 노드에 업데이트된 내용이 바로 다른 노드로 복사되지 않고 추후 각 노드의 데이터를 종합하는 방법으로 일관성을 갖추도록 하여 Update/Write 응답시간을 줄였다는 점과, 새로운 노드를 추가하거나 기존 노드를 제거할 때 Consistent Hashing 기법을 이용해 노드 간의 데이터 재구성을 최소화 했다는 점에서는 아마존 다이나모(Amazon Dynamo)와 유사하다 볼 수 있다.

- 카산드라의 각 노드들은 Gossip 기반 알고리듬을 이용해 순수P2P(Pure-P2P) 프로토콜로 마스터노드(Master-Node) 없이 자신들의 상태를 교환하여 고장난 노드를 찾아내고 새로운 노드를 그룹에 가입시키는 방법을 사용한다. 이는 마스터노드가 존재하지 않으므로 SPoF(Single Point of Failure)가 줄어드는 모습이 된다.

- 타 NoSQL 제품들이 데이터 일관성(Data Consistency)에 대한 보증을 하지 못하고 있는데 반해, 카산드라는 외부 환경변수를 통해 데이터 일관성 정도를 사용자가 손쉽게 설정할 수 있도록 하고 있다. 이는 용이한 확장성을 유지하면서도 사용목적에 따라 데이터 일관성 정도를 조절할 수 있어 큰 장점으로 꼽힌다.

 

2.3. MongoDB

- MongoDB는 10gen이라는 회사에 의해 운영되고 있는 오픈소스 프로젝트로써 C++로 구현되었고 GPL 라이선스를 따른다. 기본적인 인터페이스로 BSON(Binary JSON)을 이용해 웹에서의 접근성을 높이면서도 커서, 참조키 등 기존 관계형 데이터베이스의 SQL과 유사한 개념을 유지하고 있어 처음 접하더라도 쉽게 적응할 수 있다.

- MongoDB는 컬럼 그룹 기반으로 데이터 모델링에 제한이 있는 HBase나 카산드라와는 달리 문서형(Document-type) 데이터 모델을 사용해 관계형 데이터베이스와 유사한 사용법을 유지하고 있다. 이와 동시에 순서기반 분할(Order-Preserving Partitioning) 자동 샤딩(Automatic Sharding)을 구현하여 노드간 데이터 분리 및 확장이 투명하게 이루어진다.

- 또한, 리플리케이션 모델 구현에 있어서 구글 처비(Google Chubby)에서 사용된 리플리케이션 세트(Replication Set) 개념을 도입함으로써, Master-Slave 리플리케이션 모델의 단점으로 꼽혔던 마스터 노드가 SPoF가 될 수 밖에 없는 한계를 극복하였다.

 

2.4. 기타

- 이외에도 구글 빅테이블의 C++ 구현 오픈소프 프로젝트인 HyperTable, MongoDB와 유사한 문서형 모델을 갖고 MVCC를 통해 데이터를 동기화하나 얼랭(Erlang)으로 작성되어 성능이 좋지 않는다는 단점을 갖는 CouchDB 등의 NoSQL 제품이 있다.

- 구글 빅테이블, 아마존 다이나모, 야후 PNUTS의 경우 그 소스코드는 공개되어있지 않으나 구글 앱엔진(AppEngine), 아마존 SimpleDB 같이 유료로 제공되는 서비스를 통해 이용할 수 있다.

- 관계형 데이터베이스 진영에서도 확장성 부족이라는 자신들의 단점을 해결하기 위해 NoSQL 개념을 일부 도입한 VoltDB, Drizzle, NimbusDB 같은 실험작들이 지속적으로 소개되고 있다.

 

3. 성능 비교

- 2010년 6월 야후 리서치 팀(Yahoo! Research)은 MySQL과 대표적인 NoSQL 제품들의 성능을 비교한 클라우드 서비스 시스템 벤치마킹 결과를 정리한 논문을 발표했다.


YCSB_1.png

[그림 1] 처리량 증가에 따른 읽기 성능(좌)과 업데이트 성능(우) 비교


- 그림 1은 처리량 증가에 따른 각 제품별 읽기 성능과 업데이터 성능을 비교한 그래프다. 읽기 성능의 경우, 처리량이 증가할수록 MySQL 클러스터는 관계형 데이터베이스의 장점인 빠른 읽기 속도를 보이지 못하고 성능이 급격히 떨어지지만, HBase와 카산드라는 비교적 높은 처리속도를 보여준다.

- 업데이트 성능의 경우, Update/Write에 최적화되도록 설계된 HBase와 카산드라의 특성상 매우 높은 처리량을 가능케 하는 모습을 보여주었다. 이는 SNS나 대용량 로그처리처럼 끊임없이 새로운 데이터를 처리해야 하는 시스템에서 NoSQL의 장점이 십분 발휘될 수 있음을 말해준다.

 

4. 시사점

- 현재의 IT서비스는, 규모측면의 데이터 확장성, 사회친화적 관계형 웹서비스 구조로의 진화, 처리대상인 데이터의 개인레벨로의 이동, 비용 및 구현상의 용이성 및 접근성 등을 특징으로 한다.

- 기업은 점차 개인적인 이슈, 다시 말해 SNS적인 요소를 수단으로 서비스를 변형해가며 고객과의 친밀한 접점을 찾는 다양한 시도를 하고 있다. 이와 동시에 데이터의 양은 갈수록 커지고 이에 접합한 다양한 기술들이 존재하고 있음에도 불구하고, 데이터 특성과 무관하게 여전히 관계형 데이터베이스에 기반한 어플리케이션을 작성하고 있다.

- 우리는 그동안 트랙잰션으로 대표되는 ACID 특성에 길들여져 왔다. 데이터 동시 일관성(Simultaneously Consistency)이 그리 큰 문제가 되지 않는 부분이 있다면, 사업 전개상 비용이라는 최대 변수에서 벗어날 수 있는 대안을 제시하는 NoSQL 제품의 사용을 고려해 볼 만하다.

- 단순히 적용하기가 어려워서, 적용하는 곳이 없어서, 적용하는데 유지보수 문제가 걸려서, 적용하는 것을 고객이 원하지 않아서 등 다양한 불가함을 이야기 하지만, 해외의 굵직한 리딩업체들이 NoSQL 제품 활용을 통해 얻는 기술적/비용적 이득은 결코 작지 않다.

 

※ 자료원문:

- NoSQL
  http://en.wikipedia.org/wiki/NoSQL

- Bigtable : A Distrubuted Storage System for Structured Data
  http://labs.google.com/papers/bigtable-osdi06.pdf

- Cassandra - A Decentralized Structured Storage System
  http://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf

- Benchmarking Cloud Serving Systems with YCSB
  http://research.yahoo.com/files/ycsb.pdf

- Why MongoDB is awesome
  http://www.slideshare.net/jnunemaker/why-mongodb-is-awesome

- NoSQL in the Enterprise 
  http://www.infoq.com/articles/nosql-in-the-enterprise

- OSCON2010 - Building a NoSQL Big Data Cloud
  http://doubleclix.files.wordpress.com/2010/07/oscon_10-151.pdf

- HBase vs Cassandra: why we moved
  http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved/

- "SQL 반대?" 부상하는 반 데이터베이스 운동
  http://www.idg.co.kr/newscenter/common/newCommonView.do?newsId=57298


출처 : http://xissy.thoth.kr/?mid=blog&document_srl=4972364

Posted by 아로나