1.7. 2.0.x Branch
- Native clustering is now supported. Rather than use CouchDB replication between multiple, distinct CouchDB servers, configure a cluster of CouchDB nodes. These nodes will use an optimized Erlang-driven ‘internal replication’ to ensure data durability and accessibility. Combine a clustered CouchDB with a load balancer (such as ) to scale CouchDB out horizontally. More details of the clustering feature are available in the Cluster Management.
- Futon replaced by brand-new, completely re-engineered Fauxton interface. URL remains the same.
- The new Mango Query Server provides a simple JSON-based way to perform CouchDB queries without JavaScript or MapReduce. Mango Queries have a similar indexing speed advantage over JavaScript Queries than the Erlang Queries have (2x-10x faster indexing depending on doc size and system configuration). We recommend all new apps start using Mango as a default. Further details are available in the .
- Mango selectors can be used in _changes feeds instead of JavaScript MapReduce filters. Mango has been tested to be up to an order of magnitude (10x) faster than JavaScript in this application.
- for URLs can be performed using JavaScript functions.
- Multiple queries can be made of a view with a single HTTP request.
- The global changes feed has been enhanced. It is now resumable and persistent.
- New endpoints added (documentation forthcoming):
- shows all nodes in a cluster
/_bulk_get
speeds up the replication protocol over low-latency connections/_node/
api to access individual nodes’ configuration and compaction features/_cluster_setup
api to set up a cluster from scratch./_up
api to signal health of a node to a load-balancer/db/_local_docs
and/db/_design_docs
(similar to/db/_all_docs
)
- The
/_log
endpoint was removed. - “Backend” interface on port 5986 used for specific cluster admin tasks. Of interest are the and
_dbs
databases visible only through this interface. - Support added for Erlang/OTP 17.x, 18.x and 19
- New streamlined build system written for Unix-like systems and Microsoft Windows
- Configuration has moved from
/_config
to/_node/{node-name}/_config
instance_start_time
now always reports"0"
.
- Temporary views are no longer supported.
- It is possible to have multiple replicator databases.
replicator/db
config option has been removed. Instead_replicator
and any database names ending with the/_replicator
suffix will be recognized as replicator databases by the system. - Note that the semantics of some API calls have changed due to the introduction of the clustering feature. Specifically, make note of the difference between receiving a
201
and a when storing a document. all_or_nothing
is no longer supported by the API- After updating a design document containing a
show
, an immediate GET to that sameshow
function may still return results from the previous definition. This is due to design document caching, which may take a few seconds to fully evict, or longer (up to ~30s) for a clustered installation.
The following are some highlights of known issues for which fixes did not land in time for the 2.0.0 release:
COUCHDB-2980: The replicator (whether invoked via
_replicate
or a document stored in the_replicator
database) understands two kinds of source and target:- A URL (e.g.,
https://foo:bar@foo.com/db1
), called a “remote” source or target - A database name (e.g.,
db1
), called a “local” source or target.
Whenever the latter type is used, this refers to a local unclustered database, not a clustered one.
- A URL (e.g.,
: CouchDB will occasionally return 500 errors when multiple clients attempt to PUT or DELETE the same database concurrently.
COUCHDB-3119: Adding nodes to a cluster fails if the Erlang node name is not
couchdb
(of the formcouchdb@hostname
.): Occasionally the script used for development purposes to start a local 3-node cluster will fail to start one or more nodes.
COUCHDB-2804: The fast_view optimization is not enabled on the clustered interface.
: The OAuth 1.0 support is broken and deprecated. It will be removed in a future version of CouchDB.
The following changes in 2.0 represent a significant deviation from CouchDB 1.x and may alter behaviour of systems designed to work with older versions of CouchDB: