Apesar dos nomes semelhantes, o Couchbase Server e o Apache CouchDB são sistemas bastante diferentes.

Aqui está uma visão geral rápida de como eles se diferenciam e o que têm em comum. Estamos comparando o Couchbase 4.1 e o Apache CouchDB 1.6 e publicaremos novamente quando o CouchDB 2.0 for lançado.
Visão geral rápida
|
Servidor Couchbase |
Apache CouchDB |
|
|
Modelos de dados |
Documento, chave-valor |
Documento |
|
Armazenamento |
Árvore B somente com anexo |
Árvore B somente com anexo |
|
Consistência |
Forte |
Eventual |
|
Topologia |
Distribuído |
Replicado |
|
Replicação |
Mestre-Mestre |
Mestre-Mestre |
|
Failover automático |
Sim |
Não |
|
Cache integrado |
Sim |
Não |
|
Compatível com o Memcached |
Sim |
Não |
|
Travamento |
Otimista e pessimista |
Otimista com a MVCC |
|
MapReduce (visualizações) |
Sim |
Sim |
|
Linguagem de consulta |
Sim, N1QL (SQL para JSON) |
Não |
|
Índices secundários |
Sim |
Sim |
|
Notificações |
Sim, Protocolo de alteração de banco de dados |
Sim, Alterações Feeds |
Modelo de dados
Servidor Couchbase
O Couchbase Server é um armazenamento de valor-chave e um armazenamento de documentos, o que significa que você pode armazenar dados binários ou qualquer outro tipo de dados usando o Couchbase Server, bem como documentos JSON.
O Couchbase Server usa o protocolo binário do memcached para operações de valor-chave e APIs REST para N1QL e consultas de visualização.
Apache CouchDB
O Apache CouchDB armazena JSON como documentos, com a opção de anexar arquivos não JSON a esses documentos.
O CouchDB usa uma API REST para gravar e consultar dados.
Consulta
Servidor Couchbase
O Couchbase Server oferece três maneiras de consultar os dados que armazena:
- N1QL: uma linguagem de consulta semelhante a SQL para JSON.
- Visualizações, inclusive multidimensionais: muito parecidas com as visualizações do CouchDB.
- Pesquisas de valores-chave.
Se você souber a chave do documento de que precisa, poderá fazer uma solicitação GET simples usando essa chave. Não há necessidade de criar nenhum índice adicional.

Para consultas mais complexas, você pode usar o N1QL. O N1QL fornece uma maneira familiar semelhante ao SQL para consultar dados JSON. Por exemplo, para encontrar um perfil de usuário com base no endereço de e-mail do usuário, usamos a seguinte consulta N1QL:
|
1 |
SELECT * FROM `users` WHERE email=”matthew@couchbase.com” AND WHERE type=”userProfile”; |
O N1QL permite que você consulte o JSON com a mesma flexibilidade que esperaria de um banco de dados relacional, incluindo JOINs entre documentos.
Você também pode criar exibições que funcionam de forma semelhante às encontradas no CouchDB. Elas são especialmente úteis para consultas multidimensionais, como o trabalho com dados geoespaciais.
Apache CouchDB
Como um armazenamento de documentos puro, o Apache CouchDB permite que você recupere dados com base no conteúdo dos documentos. Ele faz isso por meio de um sistema de exibições. Você também pode extrair um documento completo usando sua chave.
Você pode pensar nas exibições do CouchDB como índices que você gera ao escrever consultas Map/Reduce em JavaScript. Por exemplo, se você quiser recuperar um perfil de usuário com base no endereço de e-mail desse usuário, poderá:
- Crie uma exibição que forneça todos os documentos que contenham um endereço de e-mail e tenham um tipo de "userProfie".
- Consulte essa visualização para obter o endereço de e-mail do usuário cujo perfil você deseja recuperar.
Arquitetura
Servidor Couchbase

O Couchbase Server foi desenvolvido desde o início para operar como um cluster de nós.
Cada servidor no cluster assume a responsabilidade por uma parte desse espaço de hash. No servidor de aplicativos, a biblioteca do cliente Couchbase mantém um mapa que mostra quais endereços IP são responsáveis por quais partes do espaço de hash. O local de cada documento é decidido executando-se um hash no nome do bucket e da chave do documento e, em seguida, colocando-o de acordo com o servidor que detém a parte relevante do espaço de hash.
Há uma cópia ativa de cada documento. Todas as gravações são feitas nessa cópia ativa e, em operação normal, todas as leituras são feitas a partir dela também. Isso significa que não há necessidade de se preocupar com a consistência eventual dentro de um cluster, pois não há gravações a serem replicadas de outro lugar.
As réplicas de cada documento são feitas automaticamente e armazenadas em um servidor separado da cópia ativa. Com o Couchbase Server, a replicação ocorre no nível do documento e não no nível do servidor completo. Isso significa que cada nó tem um conjunto diferente de dados e as réplicas são distribuídas por todo o cluster.
Não há pontos únicos de falha e é fácil escalar para conjuntos de dados enormes adicionando mais servidores ao cluster: o conjunto de dados inteiro não precisa caber em cada servidor.
Armazenamento em cache
O Couchbase Server tem um cache gerenciado integrado. Para cada solicitação que você fizer, o Couchbase Server verificará o cache de forma transparente em busca do documento de que você precisa. Se o documento não estiver no cache, ele o carregará do disco e o servirá para você.
Todas as gravações vão para o cache e você pode ajustar em que ponto da solicitação elas são gravadas no disco ou replicadas para outros servidores.
Para seu conjunto de trabalho, a maioria das solicitações de valor-chave é inferior a um milissegundo.
Replicação entre datacenters
O Couchbase Server pode operar em zonas de disponibilidade e data centers. Cada cluster opera de forma independente, com alterações replicadas diretamente de servidor para servidor entre os clusters.
Isso é ideal para recuperação de desastres e balanceamento de carga geográfica.
Apache CouchDB
Os servidores CouchDB operam como nós individuais, cada um contendo uma cópia completa dos dados a serem armazenados. Os servidores de aplicativos podem então ler e gravar em qualquer um dos servidores CouchDB. As alterações são replicadas de forma assíncrona entre cada servidor, em uma base de servidor para servidor.
Uma maneira de executar um cluster do CouchDB é ter um único mestre que aceite gravações. As atualizações são então replicadas para os escravos e para um balanceador de carga HTTP, como o nginx, para distribuir as leituras uniformemente entre esses escravos.
Isso tem duas consequências principais:
- o mestre é um ponto único de falha para aceitar leituras
- os dados lidos dos escravos são eventualmente consistentes: há um atraso entre uma gravação que ocorre no mestre e a replicação para todos os escravos.
Como alternativa, um cluster do CouchDB poderia aceitar gravações em qualquer nó e, em seguida, replicar entre cada um deles. Isso melhoraria a disponibilidade de gravação, mas aumentaria o escopo dos conflitos de gravação, que o CouchDB ajuda a detectar, e o tempo necessário para que todas as cópias dos dados estejam sincronizadas.
Desenvolvimento
Servidor Couchbase
O Couchbase Server é desenvolvido ativamente pela Couchbase Inc., como um projeto de código aberto. As partes de clustering e distribuição do Couchbase Server são escritas em Erlang, enquanto o manuseio de dados é escrito em C e C++. Algumas partes do Couchbase Server, como o N1QL, são escritas em Go.
O Couchbase Server tem vários SDKs que são desenvolvidos e suportados pela Couchbase Inc. Eles fornecem acesso idiomático a toda a gama de recursos do Couchbase Server, incluindo N1QL, visualizações e acesso a valores-chave. Os SDKs oficiais estão disponíveis para:
- Java (com suporte adicional para o Spring)
- .NET
- Node JS
- Ir
- C/C++
- Python
- Rubi
- PHP.
SDKs com suporte da comunidade estão disponíveis para outros idiomas.
O Couchbase Server funciona bem com outros sistemas, graças aos conectores desenvolvidos e suportados pela Couchbase Inc. Os conectores estão disponíveis para:
- Faísca
- Kafka
- Hadoop
- Elasticsearch
- Solr
- JDBC e ODBC, para N1QL.
O feed de alterações internas do Couchbase Server oferece a você a oportunidade de implementar seus próprios conectores.
Apache CouchDB
O CouchDB foi escrito em Erlang, com base na estrutura OTP, por uma comunidade de desenvolvedores. O Erlang é adequado para a criação de sistemas tolerantes a falhas.
O feed de alterações do CouchDB ajuda a integrá-lo a outros sistemas.
As bibliotecas que envolvem a API REST do CouchDB estão disponíveis na comunidade do CouchDB.
Licença
Tanto o Couchbase Server quanto o Apache CouchDB são projetos de código aberto totalmente liberados sob a licença Apache 2.0.