이름이 비슷하지만 Couchbase Server와 Apache CouchDB는 상당히 다른 시스템입니다.
다음은 두 서비스의 차이점과 공통점에 대한 간략한 개요입니다. Couchbase 4.1과 Apache CouchDB 1.6을 비교하고 있으며, CouchDB 2.0이 출시되면 다시 포스팅할 예정입니다.
빠른 개요
카우치베이스 서버 |
Apache CouchDB |
|
데이터 모델 |
문서, 키-값 |
문서 |
스토리지 |
추가 전용 B-Tree |
추가 전용 B-Tree |
일관성 |
Strong |
최종 |
토폴로지 |
분산 |
복제 |
복제 |
마스터-마스터 |
마스터-마스터 |
자동 페일오버 |
예 |
아니요 |
통합 캐시 |
예 |
아니요 |
멤캐시드 호환 |
예 |
아니요 |
잠금 |
낙관적 및 비관적 |
MVCC를 통한 낙관적 전망 |
맵리듀스(뷰) |
예 |
예 |
쿼리 언어 |
예, N1QL(JSON용 SQL) |
아니요 |
보조 인덱스 |
예 |
예 |
알림 |
예, 데이터베이스 변경 프로토콜 |
예, 피드 변경 |
데이터 모델
카우치베이스 서버
CouchBase Server는 키-값 저장소이자 문서 저장소로, JSON 문서뿐만 아니라 바이너리 또는 기타 모든 종류의 데이터를 CouchBase Server를 사용하여 저장할 수 있습니다.
카우치베이스 서버는 키-값 연산에 멤캐시드 바이너리 프로토콜을 사용하고 N1QL 및 보기 쿼리에는 REST API를 사용합니다.
Apache CouchDB
Apache CouchDB는 JSON을 문서로 저장하며, 해당 문서에 JSON이 아닌 파일을 첨부할 수 있는 옵션을 제공합니다.
CouchDB는 REST API를 사용하여 데이터를 작성하고 쿼리합니다.
쿼리
카우치베이스 서버
카우치베이스 서버는 저장된 데이터를 쿼리하는 세 가지 방법을 제공합니다:
- N1QL: JSON을 위한 SQL과 유사한 쿼리 언어입니다.
- 다차원을 포함한 보기: CouchDB 보기와 매우 유사합니다.
- 키 값 조회.
필요한 문서의 키를 알고 있는 경우 해당 키를 사용하여 간단한 GET 요청을 수행할 수 있습니다. 추가 인덱스를 만들 필요가 없습니다.
좀 더 복잡한 쿼리의 경우 N1QL을 사용할 수 있습니다. N1QL은 익숙한 SQL과 유사한 방식으로 JSON 데이터를 쿼리할 수 있는 방법을 제공합니다. 예를 들어, 사용자의 이메일 주소를 기반으로 사용자 프로필을 찾으려면 다음 N1QL 쿼리를 사용합니다:
1 |
선택 * FROM `사용자` 어디 이메일="matthew@카우치베이스.com" AND 어디 유형="사용자 프로필"; |
N1QL을 사용하면 문서 간 조인을 포함하여 관계형 데이터베이스에서 기대할 수 있는 것과 동일한 유연성으로 JSON을 쿼리할 수 있습니다.
CouchDB에서 볼 수 있는 것과 비슷한 방식으로 작동하는 뷰를 만들 수도 있습니다. 이러한 뷰는 특히 지리공간 데이터 작업과 같은 다차원 쿼리에 유용합니다.
Apache CouchDB
순수한 문서 저장소인 Apache CouchDB를 사용하면 문서 내용을 기반으로 데이터를 검색할 수 있습니다. 이는 뷰 시스템을 통해 이루어집니다. 키를 사용하여 전체 문서를 가져올 수도 있습니다.
CouchDB의 뷰는 JavaScript 맵/리듀스 쿼리를 작성하여 생성하는 인덱스라고 생각하면 됩니다. 예를 들어, 사용자의 이메일 주소를 기반으로 사용자 프로필을 검색하고 싶다면 이렇게 할 수 있습니다:
- 이메일 주소가 포함되어 있고 유형이 'userProfie'인 모든 문서를 제공하는 보기를 만듭니다.
- 해당 보기에서 프로필을 검색하려는 사용자의 이메일 주소를 쿼리합니다.
아키텍처
카우치베이스 서버
카우치베이스 서버는 처음부터 노드 클러스터로 작동하도록 구축되었습니다.
클러스터의 각 서버는 해당 해시 공간의 일부를 책임집니다. 애플리케이션 서버에서 Couchbase 클라이언트 라이브러리는 어떤 IP 주소가 해시 공간의 어느 부분을 담당하는지 보여주는 맵을 보유합니다. 각 문서의 위치는 문서의 버킷과 키 이름에 대한 해시를 실행한 다음 해시 공간의 관련 부분을 보유한 서버에 따라 배치하여 결정됩니다.
각 문서에는 하나의 활성 사본이 있습니다. 모든 쓰기는 이 활성 복사본으로 이루어지며, 정상 작동 시에는 모든 읽기 역시 이 복사본에서 이루어집니다. 즉, 다른 곳에서 복제할 쓰기가 없으므로 클러스터 내에서 최종적인 일관성에 대해 걱정할 필요가 없습니다.
각 문서의 복제본은 자동으로 만들어지며 활성 사본과 별도의 서버에 저장됩니다. Couchbase Server에서는 전체 서버 수준이 아닌 문서 수준에서 복제가 이루어집니다. 즉, 각 노드마다 다른 데이터 세트가 있고 복제본이 클러스터 전체에 바로 분산됩니다.
단일 장애 지점이 없으며 클러스터에 서버를 추가하여 대규모 데이터 세트까지 쉽게 확장할 수 있습니다. 전체 데이터 세트가 모든 서버에 들어갈 필요는 없습니다.
캐싱
카우치베이스 서버에는 관리형 캐시가 내장되어 있습니다. 사용자가 요청할 때마다 Couchbase Server는 필요한 문서가 있는지 캐시를 투명하게 확인합니다. 문서가 캐시에 없는 경우 디스크에서 문서를 로드한 다음 사용자에게 제공합니다.
모든 쓰기는 캐시로 이동하며 요청의 어느 시점에 디스크에 쓰거나 다른 서버에 복제되는지 조정할 수 있습니다.
작업 세트의 경우 대부분의 키-값 요청은 밀리초 미만입니다.
데이터센터 간 복제
카우치베이스 서버는 가용성 영역과 데이터 센터 전반에서 작동할 수 있습니다. 각 클러스터는 독립적으로 운영되며, 변경 사항은 클러스터 간에 서버에서 서버로 직접 복제됩니다.
이는 재해 복구 및 지리적 로드 밸런싱에 이상적입니다.
Apache CouchDB
CouchDB 서버는 각각 저장할 데이터의 전체 복사본을 포함하는 개별 노드로 작동합니다. 그런 다음 애플리케이션 서버는 모든 CouchDB 서버에서 읽고 쓸 수 있습니다. 그런 다음 변경 사항은 각 서버 간에 서버 대 서버로 비동기적으로 복제됩니다.
CouchDB 클러스터를 실행하는 한 가지 방법은 쓰기를 수락하는 단일 마스터를 두는 것입니다. 그런 다음 업데이트가 슬레이브와 nginx와 같은 HTTP 로드 밸런서에 복제되어 슬레이브 간에 읽기를 균등하게 분산합니다.
이는 크게 두 가지 결과를 초래합니다:
- 마스터는 읽기 수락을 위한 단일 실패 지점입니다.
- 슬레이브에서 읽은 데이터는 결국 일관성을 유지합니다. 마스터에서 쓰기가 발생하는 시점과 모든 슬레이브로 복제되는 시점 사이에 지연이 있기 때문입니다.
또는 CouchDB 클러스터가 모든 노드에 대한 쓰기를 허용한 다음 각 노드 간에 복제할 수 있습니다. 이렇게 하면 쓰기 가용성은 향상되지만 쓰기 충돌이 발생할 수 있는 범위가 늘어나고, CouchDB가 이를 감지하며, 모든 데이터 복사본이 동기화되는 데 걸리는 시간이 길어집니다.
개발
카우치베이스 서버
Couchbase Server는 오픈 소스 프로젝트로서 Couchbase Inc에서 활발히 개발 중입니다. Couchbase Server의 클러스터링 및 배포 부분은 Erlang으로 작성되고, 데이터 처리는 C와 C++로 작성됩니다. N1QL과 같은 Couchbase Server의 일부 부분은 Go로 작성되었습니다.
에서 개발 및 지원하는 여러 SDK가 있습니다. 이를 통해 N1QL, 보기 및 키 값 액세스를 포함한 모든 범위의 Couchbase Server 기능에 대한 관용적 액세스를 제공합니다. 공식 SDK를 사용할 수 있습니다:
- Java(Spring에 대한 추가 지원 포함)
- .NET
- 노드 JS
- 이동
- C/C++
- Python
- Ruby
- PHP.
커뮤니티 지원 SDK는 다른 언어에서도 사용할 수 있습니다.
에서 개발하고 지원하는 커넥터 덕분에 Couchbase Server는 다른 시스템과 잘 작동합니다. 커넥터를 사용할 수 있습니다:
- Spark
- 카프카
- Hadoop
- Elasticsearch
- Solr
- N1QL용 JDBC 및 ODBC.
카우치베이스 서버의 내부 변경 피드에서 직접 커넥터를 롤링할 수 있는 기회를 제공합니다.
Apache CouchDB
CouchDB는 개발자 커뮤니티에 의해 OTP 프레임워크 위에 Erlang으로 작성되었습니다. Erlang은 내결함성 시스템을 구축하는 데 매우 적합합니다.
CouchDB의 변경 사항 피드는 다른 시스템과 통합하는 데 도움이 됩니다.
CouchDB의 REST API를 래핑하는 라이브러리는 CouchDB 커뮤니티에서 사용할 수 있습니다.
라이선스
Couchbase Server와 Apache CouchDB는 모두 Apache 2.0 라이선스에 따라 출시된 완전 오픈 소스 프로젝트입니다.