카우치(Couch)DB Cluster Of Unreliable Commodity Hardware의 약어로 2005년에 개발이 시작되고, 2008년초에 아파치 인큐베이팅 프로젝트에 등록된 문서 기반 데이터베이스입니다이 프로젝트를 이끌고 있는 사람은 Damien Katz씨로 로터스에서 근무했고 현재는 IBM에서 일하고 있습니다카우치DB는 아파치 프로젝트 중에서 유일하게 얼랭을 언어로 사용하고 있습니다얼랭으로 구현되어 있지만 사용자들은 얼랭을 알 필요가 없습니다.

 

 

 얼랑 또는 얼랭(Erlang)


얼랑 또는 얼랭(Erlang)은 범용 병렬 프로그래밍 언어입니다함수형 언어가 효율적이고 산업 현장등에서 사용되는 유명한 사례입니다원래는 에릭슨(Ericsson)사에서 스위칭 소프트웨어에서 사용하기 위해 개발했지만, 1998년에 오픈 소스로 공개 되었습니다.

 

 

카우치DB와 관계형 데이터베이스의 차이점

몽고DB와 카우치DB와 같은 문서형 저장소는 데이터를 테이블에 저장하지 않고 문서 형식으로 저장하여 모든 연관된 정보들을 세분화하여 분리시키지 않고 JSON 형식으로 한 문서안에 저장을 시킵니다대표적인 예를 들자면 HTML 형식으로 이루어진 웹 문서를 생각하시면 됩니다이에 반해서 관계형 데이터베이스의 경우에는 정보들을 분류 가능한 최소 단위까지 세분화하여 세분화 된 정보들간의 관계를 설정함으로써 데이터를 구조화 시킵니다.

 

문서형 저장소는 데이터들간의 요소들의 관계가 비교적 느슨하며새로운 데이터를 추가하기 위해서 모든 문서들에 불 필요한 공간을 생성할 필요가 없습니다이렇게 스카마 변경에 따른 어려움이 없다는 것이 카우치DB와 같은 NoSQL의 큰 장점입니다.

 

 

카우치DB와 몽고DB의 차이점

같은 NoSQL이면서 문서지향 데이터베이스인 몽고DB와의 차이점에 대해서 말하자면 우선 몽고DB의 경우에는 커스텀 바이너리 프로토콜(Custom Binary Protocol)을 사용하기 때문에 몽고DB를 사용하기 위해서는 별도의 드라이버(Driver)가 필요한 반면에 카우치DB의 경우에는 HTTP/REST 프로토콜을 사용함으로 별도의 드라이버가 필요없고 인터넷에 연결이 되어 있으면 HTTP를 이용하여 카이치DB를 사용할 수 있습니다.

 

카우치DB의 사상은 간단합니다모든 정보를 문서형태로 저장합니다이러한 문서들을 저장하는데 초점을 맞춥니다이에 반해서 몽고DB의 경우에는 문서 형태로 저장하는 목적이외에 문서 저장소를 관리하는 계층을 두어서 저장소에 대한 세부적인 관리를 실시합니다.

 

몽고DB에서 쿼리(Query)를 사용하여 문서를 빠르게 검색할 수 있습니다이러한 쿼리는 관계형 데이터베이스와 유사하여 관계형 데이터베이스 사용자들이 몽고DB를 손쉽게 사용할 수 있도록 유도하는 장점중에 하나입니다하지만 카우치DB는 쿼리를 뷰(View)에 대해서만 할 수 있으며이 뷰는 기본적으로 맵-리듀스 함수를 기반으로 작동을 합니다-리듀스는 분산 환경을 위해서 탄생하였지만 쿼리 속도가 느리다는 태생적 한계점을 가지고 있습니다.

 

 

카우치DB를 적용하기 쉬운 분야로는 CRM, CMS와 같은 데이터를 누적하는 시스템 및 데이터의 변화가 별로 없는 시스템이며몽고DB는 동적인 질의가 필요한 시스템이나 빠른 조회를 위해서 인덱스 사용이 필요한 시스템에 사용하는 것이 적절합니다.

 

카우치DB와 몽고DB의 차이점 ]


문서 저장소(Document Store)

카우치DB가 다른 데이터베이스와 다른점은 자바 스크립트와 JSON을 사용한다는 것입니다쿼리를 하기 위해서는 자바 스크립트를 이용하며데이터를 표현하기 위해서는 JSON형식이 사용됩니다또한 수정이라는 개념이 없어서 문서를 수정하면 수정한 문서의 내용이 변경되는 것이 아니라 문서의 버전이 올라간 새로운 문서가 생성이 됩니다.

 

만약 여러명이 동시에 같은 문서를 편집을 한다면 나중에 저장하는 사용자는 편집하고 있는 문서가 누군가에 의해서 수정된 사실을 알게 됩니다이러한 경우에는 나중에 수정한 사용자가 최신 버전의 문서를 기반으로 다시 수정된 사항을 반영해야 합니다문서가 변경될 때마다 별도의 문서가 생성되기 때문에 엄격한 ‘ACID’를 필요로 하지 않으며 여러명이 읽거나 쓰더라도 잠금을 걸 필요가 없습니다.

 

다른 데이터베이스의 메타데이터나 데이터들의 쿼리를 위해서는 연관된 여러 개의 테이블을 참조해야 하지만카우치DB의 경우에는 문서안에 필요한 모든 데이터가 기록되어 있기 때문에 쓰기와 검색이 다른 데이터베이스에 비해서 단순한편입니다.

 

 

-리듀스 뷰(Map-Reduce View)

카우치DB의 경우에는 비정형 데이터를 처리하기 위해서 자바 스크립트 함수를 이용합니다이러한 자바 스크립트 함수를 카우치DB에서는 뷰라고 하는데 맵-리듀스 모델을 사용합니다.

 

-리듀스 뷰는 카우치DB 문서들을 입력변수로 받아서 먼저 맵(Map) 함수를 통해서 JSON 형식으로 이루어진 문서들의 항목들을 키(Key)-(Value)으로 정리를 합니다리듀스(Reduce) 함수에서는 맵함수에서 나온 키-값들을 기준으로 데이터를 가공하여 키값으로 데이터를 정렬합니다.

 

 

보안 모델(Security Model)

카우치DB는 문서에 접근할 수 있는 접근 권한을 지정할 수 있으며 크게 3가지 접근 권한으로 구분 할 수 있습니다먼저 관리자 접근 권한의 경우에는 다른 관리자 계정을 만들거나 설계 문서를 수정할 수 있습니다리더 접근 권한의 경우에는 카우치DB 문서에 리더(Reader) 목록을 저장합니다리더 목록이 없는 경우에는 모든 사람들이 문서를 읽을 수 있지만리더 목록이 존재하는 경우에는 지정된 리더들만 읽기가 가능합니다마지막으로 업데이터 접근 권한의 경우에는 디스크에 문서를 저장하는 시점에 자바 스크립트 함수를 사용하여 유효성 검증이 이루어지게 됩니다유효성 검증을 통과하면 업데이트가 실행되는 반면에 실패한 경우에는 작업이 중단되고 클라이언트는 오류 응답을 받게 됩니다.

 

 

복제(Replication)

카우치DB P2P 기반의 분산 데이터베이스 시스템으로 인터넷 접속이 안되는 상황에서도 공유가 가능한 데이터에 대한 접근과 수정이 가능합니다카우치dB는 정상적으로 복제가 일어났던 시점 이후에 변경된 문서들만 복제를 합니다만약 도중에 복제가 실패하더라도 복제를 실패한 문서부터 다시 시작합니다.

 

또한 조건을 지정하여 조건에 만족하는 문서들만 선별적으로 복제하도록 자바 스크립트 함수로 필터링하는 기능도 가능합니다이러한 기능들은 복제가 필요없는 문서들의 복제를 생략함으로써 실제 사용해야 하는 문서들을 빠르게 복제할 목적으로 사용하기도 합니다. 

'빅데이터 > No SQL' 카테고리의 다른 글

H베이스(HBase)  (0) 2017.08.04
카산드라(Cassandra)  (0) 2017.08.04
몽고DB(Mongo DB)  (0) 2017.08.04
멤캐시(Memcach)  (0) 2017.08.04
2014년 NoSQL 순위  (0) 2017.08.03

+ Recent posts