클라우드 컴퓨팅 & NoSQL/NoSQL 일반

CouchDB 강의 내용 정리

Terry Cho 2014. 2. 21. 18:54

CouchDB Overview


어제 SSAG 에서 정명훈 이사가 강의한 CouchDB에 대한 내용 정리


CouchDB 일반 특징

CouchDB Apache 프로젝트로 MongoDB와 같은 Document DB의 형태를 띄며, NOSQL CAP이론중 AP 에 해당 한다. (장애에 매우 강하다.) 단 Consistency는 Eventual Consistency를 제공한다. (버전으로 하는 방식), Eventual Consistency 모델이기 때문에 Locking을 사용하지 않는다. (Optimistic Lock)


유사 프로젝트

유사 프로젝트로 CouchBase와 BigCouch, Cloudant등이 있다.

CouchBase는 memcached와 CouchDB를 합쳐놓은 제품으로, 앞단에 캐쉬가 있어서 성능이 매우 빠르다. BigCouch는 CouchDB가 single instance만 지원하는데 반해서, 클러스터링 기능을 가지고 있다. Cloudant는 이 BigCouch를 기반한 제품으로 DBaaS 형식의 서비스로, DB 서비스를 제공하고, 운영을 대행해준다. 향후 BigCouch와 CouchDB가 합쳐져서 클러스터링 기능을 제공할 예정이다.

그 외에도 mobile에 탑재 가능한 버전의 CouchDB들이 있다.


Secondary Index

재미있는 특징중의 하나가 Sencondary Index를 지원하는 데 이는 내부적인 Map & Reduce를 통해서 구현되는데, 2nd index search시마다 MR이 도는 것이 아니라, 2nd index를 만들어 놓은 다음에 이를 View와 같은 형태로 저장해놓고, 이 index 내에서 검색을 한다. 또한 새로운 데이타가 추가되거나 변경이 되더라도 전체 index를 rebuild하는 것이 아니라, incremental 방식으로 변경된 부분만 재 생성한다.

물론 이 index를 rebuild하는 과정에서 서버가 부하를 받아서 성능이 다소 떨어질 수 있으나, 초당 수천건 정도의 index 변경은 수용할 수 있는 수준이라고 한다.


Replication

CouchDB의 강력한 기능중의 하나가 복제 기능인데, 단방향, 양방향 복제, 1:N, M:N 그리고 필터나 룰 기반의 복제(서브셋만 복제하는 기능)도 가능하다. 1회성으로 복제하는 시나리오와 지속적으로 복제하는 시나리오도 가능하면, 네트워크에서 끊어졌다가 나중에 붙어도 복제 및 Sync만 하는 것도 가능하다.

무엇보다 CouchDB는 모바일 버전이 있기 때문에, 이를 이용하면 쉽게 단말과 서버간의 Sync 시나리오를 구현할 수 있다. 오픈 소스로 파일이나 이미지를 서버와 디바이스간에 복제하는 프로젝트가 있다.


Interface

인터페이스는 HTTP REST만 지원한다. 아쉬운 부분인데, 성능이 높은 Protocol Buffer등을 향후 지원했으면 한다.


보안

HTTPS와 OAuth 인증을 제공하며, HTTP Basic Auth도 지원한다. User Identity source (LDAP)등의 연동에 대해서는 자세하게 설명되지 않았는데, 앞단에 reverse proxy를 둬서 인증하는 방식으로 구현이 가능하리라 본다.


대략적인 아키텍쳐

기본적인 메카니즘이 append only 구조로, 일정 이상의 데이타가 쌓이면 내부적으로 자동 Compaction을 한다.

Erlang으로 구현되어 있으며, 그 위에 javascript를 제공하여, MR등은 javascript를 사용하여 구현한다.



그리드형