Couchbase Server, originally known as Membase, is a source-available, distributed (shared-nothing architecture) multi-model NoSQL document-oriented database software package optimized for interactive applications. These applications may serve many concurrent users by creating, storing, retrieving, aggregating, manipulating and presenting data. In support of these kinds of application needs, Couchbase Server is designed to provide easy-to-scale key-value, or JSON document access, with low latency and high sustainability throughput. It is designed to be clustered from a single machine to very large-scale deployments spanning many machines.

Couchbase Server provided client protocol compatibility with memcached, but added disk persistence, data replication, live cluster reconfiguration, rebalancing and multitenancy with data partitioning.

Product history
Membase was developed by several leaders of the memcached project, who had founded a company, NorthScale, to develop a key-value store with the simplicity, speed, and scalability of memcached, but also the storage, persistence and querying capabilities of a database. The original membase source code was contributed by NorthScale, and project co-sponsors Zynga and Naver Corporation (then known as NHN) to a new project on membase.org in June 2010.

On February 8, 2011, the Membase project founders and Membase, Inc. announced a merger with CouchOne (a company with many of the principal players behind CouchDB) with an associated project merger. The merged company was called Couchbase, Inc. In January 2012, Couchbase released Couchbase Server 1.8. 
In September of 2012, Orbitz said it had changed some of its systems to use Couchbase.
In December of 2012, Couchbase Server 2.0 (announced in July 2011) was released and included a new JSON document store, indexing and querying, incremental MapReduce and replication across data centers.

Architecture
Every Couchbase node consists of a data service, index service, query service, and cluster manager component. Starting with the 4.0 release, the three services can be distributed to run on separate nodes of the cluster if needed.
In the parlance of Eric Brewer's CAP theorem, Couchbase is normally a CP type system meaning it provides consistency and partition tolerance, or it can be set up as an AP system with multiple clusters.

Cluster manager
The cluster manager supervises the configuration and behavior of all the servers in a Couchbase cluster. It configures and supervises inter-node behavior like managing replication streams and re-balancing operations. It also provides metric aggregation and consensus functions for the cluster, and a RESTful cluster management interface. The cluster manager uses the Erlang programming language and the Open Telecom Platform.

Replication and fail-over
Data replication within the nodes of a cluster can be controlled with several parameters.
In December of 2012, support was added for replication between different data centers.

Data manager
The data manager stores and retrieves documents in response to data operations from applications.
It asynchronously writes data to disk after acknowledging to the client.  In version 1.7 and later, applications can optionally ensure data is written to more than one server or to disk before acknowledging a write to the client.
Parameters define item ages that affect when data is persisted, and how max memory and migration from main-memory to disk is handled.
It supports working sets greater than a memory quota per "node" or "bucket".
External systems can subscribe to filtered data streams, supporting, for example, full text search indexing, data analytics or archiving.

Data format
A document is the most basic unit of data manipulation in Couchbase Server. Documents are stored in JSON document format with no predefined schemas. Non-JSON documents can also be stored in Couchbase Server (binary, serialized values, XML, etc.)

Object-managed cache
Couchbase Server includes a built-in multi-threaded object-managed cache that implements memcached compatible APIs such as get, set, delete, append, prepend etc.

Storage engine 
Couchbase Server has a tail-append storage design that is immune to data corruption, OOM killers or sudden loss of power.  Data is written to the data file in an append-only manner, which enables Couchbase to do mostly sequential writes for update, and provide an optimized access patterns for disk I/O.

Performance 
A performance benchmark done by Altoros in 2012, compared Couchbase Server with other technologies.
Cisco Systems published a benchmark that measured the latency and throughput of Couchbase Server with a mixed workload in 2012.

Licensing and support 
Couchbase Server is a packaged version of Couchbase's open source software technology and is available in a community edition without recent bug fixes with an Apache 2.0 license and an edition for commercial use. 
Couchbase Server builds are available for Ubuntu, Debian, Red Hat, SUSE, Oracle Linux, Microsoft Windows and macOS operating systems.

Couchbase has supported software developers' kits for the programming languages .NET, PHP, Ruby, Python, C, Node.js, Java, Go, and Scala.

SQL++
A query language called SQL++ (formerly called N1QL), is used for manipulating the JSON data in Couchbase, just like SQL manipulates data in RDBMS. It has SELECT, INSERT, UPDATE, DELETE, MERGE statements to operate on JSON data.
It was initially announced in March 2015 as "SQL for documents".

The SQL++ data model is non-first normal form (N1NF) with support for nested attributes and domain-oriented normalization.  The SQL++ data model is also a proper superset and generalization of the relational model.

Example
{
  "email": "testme@example.org",
  "friends": [
    {"name": "Pavan"},
    {"name": "Ravi"}
  ]
}

Like query 

Array query

Couchbase Mobile
Couchbase Mobile / Couchbase Lite is a mobile database providing data replication.

Couchbase Lite (originally TouchDB) provides native libraries for offline-first NoSQL databases with built-in peer-to-peer or client-server replication mechanisms.
Sync Gateway manages secure access and synchronization of data between Couchbase Lite and Couchbase Server.

Uses
Couchbase began as an evolution of Memcached, a high-speed data cache, and can be used as a drop-in replacement for Memcached, providing high availability for memcached application without code changes.

Couchbase is used to support applications where a flexible data model, easy scalability, and consistent high performance are required, such as tracking real-time user activity or providing a store of user preferences or online applications.

Couchbase Mobile, which stores data locally on devices (usually mobile devices) is used to create “offline-first” applications that can operate when a device is not connected to a network and synchronize with Couchbase Server once a network connection is re-established.

The Catalyst Lab at Northwestern University uses Couchbase Mobile to support the Evo application, a healthy lifestyle research program where data is used to help participants improve dietary quality, physical activity, stress, or sleep.

Amadeus uses Couchbase with Apache Kafka to support their “open, simple, and agile” strategy to consume and integrate data on loyalty programs for airline and other travel partners. High scalability is needed when disruptive travel events create a need to recognize and compensate high value customers.

Starting in 2012, it played a role in LinkedIn's caching systems, including backend caching for recruiter and jobs products, counters for security defense mechanisms, for internal applications.

Alternatives
For caching, Couchbase competes with Memcached and Redis.
For document databases, Couchbase competes with other document-oriented database systems. It is commonly compared with MongoDB, Amazon DynamoDB, Oracle RDBMS, DataStax, Google Bigtable, MariaDB, IBM Cloudant, Redis Enterprise, SingleStore, and MarkLogic.

Bibliography
 
 
 
 
 
Vemulapalli, Sitaram; et al. (May 10, 2018), A Guide to N1QL features in Couchbase 5.5: Special Edition, Self-published, p. 112
Chamberlin, Don;  (Oct 19, 2018) SQL++ For SQL Users: A Tutorial, Couchbase

References

External links

Free database management systems
Distributed computing architecture
NoSQL
Cross-platform software
Structured storage
Client-server database management systems
Database-related software for Linux
Applications of distributed computing
Databases
Data management
Distributed data stores
Document-oriented databases
카우치베이스 서버(Couchbase Server, 원래 명칭: 멤베이스/Membase)는 상호작용 애플리케이션에 최적화된 오픈 소스 분산(셰어드 낫싱 아키텍처) 멀티 모델 NoSQL 문서 지향 데이터베이스 소프트웨어 패키지이다. 유연한 JSON 모델로 고정 데이터베이스 스키마의 제약 없이 쉽게 애플리케이션을 수정할 수 있으며, submilisecond (1/1000 ms 이하)의 초고속 데이터 입출력 처리의 높은 성능을 보장한다. 또한, 간편한 스케일 아웃(scale-out)으로 다운타임 없이 시스템 구성 변경 및 확장을 지원한다.

주요 특징

유연한 데이터 모델

JSON 지원 
카우치베이스 서버 2.0 은 기본적으로 JSON 문서를 지원한다. 각각의 JSON 문서는 다양한 구조를 가질 수 있고, 서로 다른 구조를 가진 여러 문서를 동일한 카우치베이스 데이터베이스 버킷에 저장할 수 있다. 또한 데이터베이스 내 다른 문서의 구조를 바꾸지 않고 언제든지 특정 문서 구조를 변경할 수 있어서 애플리케이션 기능 추가를 좀더 빨리 할 수 있다.

인덱스와 쿼리 
카우치베이스 2.0은 JSON 문서에 기본 인덱스(Primary Index)와 보조 인덱스(Secondary Index)를 생성할 수 있다. 인덱스는 뷰(View)를 통해 생성하고 쿼리 할 수 있다. 인덱스 생성은 각 노드에서 저장된 데이터를 대상으로 인덱스를 생성하며 클러스터 내 모든 노드에 걸쳐 고르게 분산되어 있다. 쿼리는 카우치베이스 서버에서 문서를 검색하기에 적절한 클라이언트 라이브러리를 사용해서 실행한다. 쿼리는 특정 키 조회, 범위 검색, 합계 조회 기능 등을 포함한다. 심지어 재분배(rebalancing) 또는 장애조치(failover) 등과 같이 클러스터 서버의 구성 변경이 이루어지는 동안에도 쿼리 결과를 제공 한다. 이와 관련하여 아키텍처 또는 뷰(View) 개발 방법 등 보다 상세한 내용은 documentation를 찾아 보십시오.

증분 맵 리듀스 
증분 맵 리듀스는 대용량 데이터 셋의 실시간 분석을 위한 강력한 기능들을 제공한다. 인덱스는 데이터 변경 부분에 대해서만 갱신되기 때문에 전체 데이터 셋의 배치 작업이 완료될 때까지 기다릴 필요가 없다. 뷰(View)에서 맵 리듀스(Map Reduce) 함수에 대해 자세히 알기를 원하면 map and reduce functions 문서를 참고하십시오.

간단한 확장성 자동

자동 샤딩(Auto-sharding)을 통한 클러스터 확장 
카우치베이스 서버는 애플리케이션 요구사항이 변경되더라도 쉽게 자원을 유지하면서 버튼 클릭 한번으로 클러스터에 서버 추가(또는 삭제)를 할 수 있다. 애플리케이션은 서버를 추가하여 RAM과 I/O 용량을 늘려나가면서 수평적으로 확장하게 된다. 자동 샤딩(Auto-sharding)은 모든 서버에 균등하게 데이터를 분배하여 애플리케이션 변경 없이 해당 요청을 대상 서버로 직접 전달한다. 서버 추가 또는 삭제는 클러스터의 지속적인 데이터 가용성을 위해 데이터 재분배(rebalancing) 작업을 시작하게 한다. 이러한 관리 작업에 대해 좀더 배우길 원하시면 administrative tasks(관리 작업) 문서를 참조하십시오. 또한 카우치베이스 서버 관리자 웹 인터페이스 또는 카우치베이스 서버 관리 REST API를 통해 클러스터를 관리할 수 있다.

클러스터 간 복제 
비즈니스 연속성을 보장하기 위한 재난복구 시스템 구축 시 서로 다른 데이터센터에 있는 여러 클러스터의 데이터를 복제 할 수 있다. 또는 최종 사용자에게 가까운 거리에서 데이터를 제공하여 더 나은 사용자 경험(UX, User Experience)을 제공하고자 할 때에도 XDCR을 활용할 수 있다. 클러스터 간 데이터 복제는 단방향 또는 양방향 읽기/쓰기를 모두 지원한다. XDCR 구성 및 자세한 설명은 cross data center replication (XDCR)문서를 읽어 보십시오.

고성능 연속성 보장

24x365 무중단

구조 
최상위 레벨에서 보면, 카우치베이스 클러스터의 각 노드는 동일하고 각각 ‘데이터 관리자’와 ‘클러스터 관리자’ 두 개의 주요 컴포넌트를 가지고 있다. 다른 중요한 아키텍처 요소는 점진적 인덱스와 문서 쿼리를 지원하는 강력한 맵 리듀스(Map Reduce) 엔진과 지리적으로 서로 다른 지역에 있는 데이터 센터 간 복제 기술이다.

애플리케이션은 Java, .NET, PHP, Ruby, Python, C , C++ 등 주요 프로그래밍 언어를 대부분 지원하는 카우치베이스 스마트 클라이언트 SDK를 사용해서 카우치베이스 서버 클러스터와 상호 작용을 한다. 이때 SDK는 클러스터 토폴로지를 인지하고 있어 각 요청을 적합한 서버로 직접 전달한다.

데이터는 지속적으로 클라이언트에 의해 해시되어 모든 서버 노드에 균일하게 분산 저장된다. 클러스터 맵은 각각의 노드에 어떤 데이터가 저장되어 있는지를 기록하고 언제 노드가 추가되고 다운되었는지 알고 있다.

만약 특정 서버가 고장났을 경우, 카우치베이스 서버는 해당 서버 장애를 감지하고 다른 서버에 있는 복제 문서(replica documents)를 활성화시킨 다음 새로운 클러스터 토폴로지를 반영하도록 클러스터 맵을 갱신한다. 이때 스마트 클라이언트는 서버로부터 자동으로 새로운 클러스터 맵을 가져와서 별도의 애플리케이션 변경이나 다운타임 없이 다른 활성화된 서버로 요청을 전달한다.

각주

외부 링크 
 
 Couchbase Twitter page
 Couchbase Blog page
 Couchbase Events page
 Couchbase Developer SDK's
 Couchbase Documentation

NoSQL
크로스 플랫폼 소프트웨어
자유 데이터베이스 관리 시스템
문서 지향 데이터베이스