After a long period of incubation starting with a developer preview in July 2011, Couchbase has just announced the general availability of Couchbase Server 2.0, a NoSQL solution combining the capabilities of a memory-cached key-value store and a document-oriented database.

Couchbase Server (CS) uses a JSON-based data model with an optional database schema, providing eventually consistent views which are key-value tables enabling users to iterate, select and query the information stored in its documents. Views are generated through incremental map-reduce operations enabling developers to provide simple real-time analytics for their applications. View queries are distributed to individual nodes in a cluster and results from each node are merged and collated before a response is returned.

CS performs data changes in memory and later commits each document to disk using SQLite for persistence. An improvement represents the append-only persistence engine adding all updates to the end of the file, protecting data from corruption and speeding up writes.

Couchbase provides 32 and 64-bit community and enterprise packages for Linux (Ubuntu, Red Hat), Windows and Max OS X. The community version is free and is targeted at enthusiasts, being not recommended for production environments because they “have not been subjected to the iterative test, fix and verify QA cycle that is a part of the Enterprise Edition release process and as a result do not include the latest EE specific bug fixes,” according to the editions specification.

Couchbase also provides SDKs for Java, .NET, PHP, Ruby, C and Python, and experimental client libraries for Node.js and Go. The community has created a number of other client libraries for Clojure, Erlang, Node.js, Perl, Python, and TCL development.

Couchbase Server was built by merging two technologies, Apache CouchDB and Membase. While CS inherited much of the CouchDB functionality, the project took a different path being an open source project of its own on GitHub. In an interview for InfoQ, Couchbase explained:

When the team set off to integrate Apache CouchDB and Membase to form Couchbase, they started with Membase as the base technology. Certain aspects of Apache CouchDB code were leveraged to replace the Membase storage backend and to provide the basis for indexing and querying in Couchbase Server. Substantial portions were rewritten, however, to provide the performance and resource utilization required for distributed database use cases. For example, the entire file storage path was optimized and re-implemented in C and reduced to the functionality required for the Couchbase front end. The result is that while Couchbase is heavily influenced by Apache CouchDB technology, it is meaningfully different. While many things on the indexing and querying side are upward compatible with Apache CouchDB, the document access and administration APIs for example are upward compatible with Membase. Of course, Couchbase is 100% open source (Apache 2.0 license) so all of this code is freely available to anyone who wishes to use it.

The main differences between CS and CouchDB on document-related features are:

Couchbase Server uses a document manipulation API (mentioned above) that is based on the memcached API, and so offers a different set of operations (for example, atomic increments and decrements; does not expose document revisions; etc.)

Indexing semantics have changed. Unlike Apache CouchDB, by default Couchbase Server has an eventually indexed model where items get indexed asynchronously when they reach the storage layer, with the ability to choose different semantics per operation on the client side.

Although a “handful of our employees are quite active” on Apache CouchDB, the focus of its founder, Damien Katz, is Couchbase which will probably diverge more and more from the original project.