Apache CouchDB is an exciting database management system that is growing in popularity each day.CouchDB is a relatively new database management system, designed from the ground up to suit modern software applications that tend to be web-based, document-oriented, and distributed in nature. For several decades now, relational database management systems have reigned supreme in application and
database development, with the likes of Oracle, SQL Server, and MySQL being used in every type of software application imaginable.
CouchDB is a document-oriented database management system, released under the open source Apache License. In contrast to most database systems, it stores data in a schema-free manner. This means that, unlike traditional SQL-based databases, there are no tables and columns, primary and foreign keys, joins, and relationships. Instead, CouchDB stores data in a series of documents and offers a
If you are wondering where the name CouchDB came from, you may be surprised to hear that it is in fact an acronym. According to the CouchDB wiki, Couch stands for “Cluster Of Unreliable Commodity Hardware,” indicating that CouchDB is intended to run distributed across a cluster of cheap servers. Anyone who has dealt with replication in databases before will know that it is rarely a simple task, but the exact opposite applies when it comes to CouchDB. Add to this the fact that CouchDB is developed in Erlang OTP, a fault-tolerant programming language that offers excellent concurrency features, and you know that your CouchDB database will scale well without a loss of reliability and availability.
Currently, CouchDB is available for most UNIX-based systems, including Linux and Mac OS X. Binary installers are available for Ubuntu, Fedora, CentOS, FreeBSD, and Mac OS X systems through each system’s individual package manager. Windows support is pretty sketchy currently, although an unofficial binary installer is in the works. Alternatively, CouchDB can be built from source on virtually
any POSIX system.
A key feature of CouchDB is that it is a document-oriented database management system. Basically, this means that the data stored in a CouchDB database comprises a series of documents, each of which can contain a series of fields and values. Each document is independent of one another, and there is no strict
schema that they must adhere to. Traditional databases that adhered to the relational model stored data in a series of tables; they were made up of rows and columns of data. In a relational database, you must predefine the schema that all data in each table will adhere to, and all the data contained in the table must strictly conform to that schema.
Naturally, a schema-free architecture has some disadvantages, such as a lack of defined structure and unnecessary replication of data across documents. Ofcourse, in cases where these criteria are of the utmost importance, CouchDB is probably not the database for you. In fact, the developers openly state that they do not intend for CouchDB to be a direct replacement for a relational SQL-based database. Instead, they see it as an alternative in scenarios where a document-oriented architecture is a viable solution. In applications such as wikis, document management systems, discussion forums, blogs, support management systems, and so forth, documents are the way forward.
CouchDB provides a RESTful JSON API than can be accessed from any environment that allows HTTP requests. There are myriad third-party client libraries that make this even easier from your programming language of choice. CouchDB’s built in Web administration console speaks directly to the database using HTTP requests issued from your browser.
CouchDB is written in Erlang, a robust functional programming language ideal for building concurrent distributed systems. Erlang allows for a flexible design that is easily scalable and readily extensible.
What CouchDB is
* A document database server, accessible via a RESTful JSON API.
* Ad-hoc and schema-free with a flat address space.
* Distributed, featuring robust, incremental replication with bi-directional conflict detection and management.
What it is Not
* A relational database.
* A replacement for relational databases.
* An object-oriented database. Or more specifically, meant to function as a seamless persistence layer for an OO programming language.