Apache CouchDB, comumente referido como CouchDB, é um banco de dados de código-aberto que foca na facilidade de uso e na filosofia de ser "um banco de dados que abrange a Web". É um banco de dados não-relacional (NoSQL) que usa JSON para armazenar os dados, JavaScript como sua linguagem de consulta usando o MapReduce, e HTTP como API. Uma de suas características marcantes é a facilidade na replicação. CouchDB foi lançado em 2005, e em 2008 tornou-se um projeto da Apache Software Foundation.

Ao contrário de um banco de dados relacional, o CouchDB não armazena os dados e relacionamentos em tabelas. Cada banco de dados é uma coleção de documentos independentes, e cada documento mantém seus próprios dados e esquemas. Uma aplicação pode acessar vários bancos de dados, por exemplo, no smartphone do usuário e outro em um servidor. Os metadados do documento contém informações de revisão, possibilitando mesclar quaisquer diferenças que possam ter ocorrido enquanto os bancos de dados estavam desconectados.

CouchDB implementa uma forma de Controle de concorrência multiversão (MVCC), a fim de evitar a necessidade de travar o arquivo de banco de dados durante as gravações. Os conflitos são deixados para a aplicação de resolver. Resolver um conflito geralmente envolve primeira mesclagem de dados em um dos documentos, apagando o antigo.

Outras características são a semântica ACID com consistência posterior, MapReduce, replicação incremental e tolerância a falhas. A administração é suportada com uma aplicação web embutida chamado Futon.

Histórico CouchDB (Couch é um acrônimo para Cluster of Unreliable Commodity Hardware)Exploring CouchDB, article from IBM Developer Works é um projeto criado em abril de 2005 por Damien Katz, ex-desenvolvedor da IBM. Damien Katz o definiu como "sistema de armazenamento de bancos de dados para objetos de larga escala". Seu objetivo é tornar o CouchDB um banco de dados para a Internet, voltado à aplicações web. Ele manteve o projeto por quase dois anos, então liberou como código-aberto sob a GNU General Public License.

Em fevereiro de 2008, se tornou um projeto da Incubadora de projetos Apache e sua licença mudou para a Licença Apache.Apache mailing list announcement on mail-archives.apache.org Alguns meses depois, se tornou um projeto de alto nível.Re: Proposed Resolution: Establish CouchDB TLP on mail-archives.apache.org Isso levou à primeira versão estável, liberada em julho de 2010."CouchDB NoSQL Database Ready for Production Use", article from PC World of Jully 2010

Em meados de 2012, Damien Katz deixou o projeto para se focar no Couchbase. O projeto foi continuado, e a versão 1.2 foi lançada em abril de 2012.

Principais características Armazenamento em documentos CouchDB armazena os dados como "documentos", com um ou mais pares de campo/valor, expressos em JSON. Os valores do campo podem ser string, números ou datas, além de arrays e vetores associativos. Todo documento no banco de dados do CouchDB tem uma id única e não há necessidade de um esquema.

Semântica ACID CouchDB provê semântica ACID. Isso é possível graças ao Controle de concorrência multiversão, que permite que o CouchDB manipular um grande volume de leituras e escritas simultâneas sem conflitos.

Views e índices com Map/Reduce Os dados armazenados são estruturados usando-se views. No CouchDB, cada view é construída por uma função em JavaScript que atua como a operação Map do MapReduce. Essa função transforma um documento em um único valor, que é retornado na forma de índice. O CouchDB indexa as views e os mantém atualizados enquanto os documentos são adicionados, removidos ou atualizados.

Arquitetura distribuída com replicação O CouchDB foi desenvolvido com replicação bidirecional (ou sincronização) e operação off-line. Isso significa que múltiplas réplicas podem ter suas cópias do mesmo dado, modificá-los e sincronizá-los mais tarde.

API REST Todos os itens têm uma URI exclusiva, que são acessadas através do HTTP. O REST utiliza os métodos POST, GET, PUT, DELETE para as operações CRUD (Create, Read, Update, Delete) em todos os recursos.

Consistência posterior O CouchDB garante a consistência posterior para prover disponibilidade e tolerância à falhas.

Bibliografia

Ligações externas CouchDB: The Definitive Guide CouchDB artigo no NoSQLDatabases.com CouchDB green paper CouchDB news and articles on myNoSQL Scaling CouchDB Complete HTTP API Reference Simple PHP5 library to communicate with CouchDB Grupo Brasileiro de usuarios

Categoria:Apache Software Foundation Categoria:Bancos de dados orientados a documentos Categoria:Sistemas livres de gerenciamento de banco de dados Categoria:Bancos de dados Categoria:Sistemas de gerenciamento de banco de dados