A pesar de tener nombres similares, Couchbase Server y Apache CouchDB son sistemas bastante diferentes.

He aquí un breve resumen de sus diferencias y puntos en común. Estamos comparando Couchbase 4.1 y Apache CouchDB 1.6 y volveremos a publicarlo cuando se publique CouchDB 2.0.
Resumen rápido
|
Servidor Couchbase |
Apache CouchDB |
|
|
Modelos de datos |
Documento, Clave-Valor |
Documento |
|
Almacenamiento |
Árbol B sólo apéndice |
Árbol B sólo apéndice |
|
Coherencia |
Fuerte |
Eventual |
|
Topología |
Distribuido |
Replicado |
|
Replicación |
Maestro-Maestro |
Maestro-Maestro |
|
Conmutación automática |
Sí |
No |
|
Caché integrada |
Sí |
No |
|
Compatible con Memcached |
Sí |
No |
|
Bloqueo |
Optimistas y pesimistas |
Optimista con MVCC |
|
MapReduce (Vistas) |
Sí |
Sí |
|
Lenguaje de consulta |
Sí, N1QL (SQL para JSON) |
No |
|
Índices secundarios |
Sí |
Sí |
|
Notificaciones |
Sí, Protocolo de cambio de base de datos |
Sí, Cambios |
Modelo de datos
Servidor Couchbase
Couchbase Server es tanto un almacén de valores clave como un almacén de documentos, lo que significa que puedes almacenar datos binarios o de cualquier otro tipo usando Couchbase Server, así como documentos JSON.
Couchbase Server utiliza el protocolo binario memcached para operaciones clave-valor y APIs REST para consultas N1QL y vistas.
Apache CouchDB
Apache CouchDB almacena JSON como documentos, con la opción de adjuntar archivos no JSON a esos documentos.
CouchDB utiliza una API REST para escribir y consultar datos.
Consulta
Servidor Couchbase
Couchbase Server ofrece tres formas de consultar los datos que almacena:
- N1QL: un lenguaje de consulta tipo SQL para JSON.
- Vistas, incluidas las multidimensionales: muy parecidas a las vistas de CouchDB.
- Consultas clave-valor.
Si conoce la clave del documento que necesita, puede realizar una simple petición GET utilizando esa clave. No es necesario crear ningún índice adicional.

Para consultas más complejas, puede utilizar N1QL. N1QL proporciona una forma similar a SQL para consultar datos JSON. Por ejemplo, para encontrar un perfil de usuario basado en la dirección de correo electrónico de ese usuario, utilizamos la siguiente consulta N1QL:
|
1 |
SELECCIONAR * DESDE `usuarios` DONDE correo electrónico="matthew@couchbase.com" Y DONDE tipo="perfil de usuario"; |
N1QL te permite consultar JSON con la misma flexibilidad que esperarías de una base de datos relacional, incluyendo JOINs entre documentos.
También puedes crear vistas que funcionan de forma similar a las que encontrarás en CouchDB. Estas son especialmente útiles para consultas multidimensionales, como el trabajo con datos geoespaciales.
Apache CouchDB
Como almacén de documentos puro, Apache CouchDB permite recuperar datos basándose en el contenido de los documentos. Lo hace a través de un sistema de vistas. También puedes extraer un documento completo usando su clave.
Puedes pensar en las vistas de CouchDB como índices que generas escribiendo consultas Map/Reduce en JavaScript. Por ejemplo, si quieres recuperar un perfil de usuario basado en la dirección de correo electrónico de ese usuario podrías:
- Crear una vista que proporcione todos los documentos que contengan una dirección de correo electrónico y tengan un tipo 'usuarioProfie'.
- Consulte esa vista para obtener la dirección de correo electrónico del usuario cuyo perfil desea recuperar.
Arquitectura
Servidor Couchbase

Couchbase Server está construido desde cero para funcionar como un clúster de nodos.
Cada servidor del cluster se responsabiliza de una parte de ese espacio hash. En el servidor de aplicaciones, la biblioteca cliente de Couchbase contiene un mapa que muestra qué direcciones IP son responsables de qué partes del espacio hash. La ubicación de cada documento se decide ejecutando un hash en el bucket del documento y el nombre de la clave y, a continuación, colocándolo de acuerdo con el servidor que tiene la parte relevante del espacio hash.
Hay una copia activa de cada documento. Todas las escrituras se realizan en esa copia activa y, en condiciones normales de funcionamiento, todas las lecturas proceden también de ella. Esto significa que no hay que preocuparse por la coherencia final dentro de un clúster, ya que no hay escrituras que replicar desde otros lugares.
Las réplicas de cada documento se hacen automáticamente y se almacenan en un servidor separado de la copia activa. Con Couchbase Server, la replicación ocurre a nivel de documento en lugar de a nivel de servidor completo. Esto significa que cada nodo tiene un conjunto diferente de datos y las réplicas se distribuyen por todo el clúster.
No hay puntos únicos de fallo y es fácil escalar a conjuntos de datos masivos añadiendo más servidores al clúster: no es necesario que todo el conjunto de datos quepa en cada servidor.
Almacenamiento en caché
Couchbase Server tiene una caché gestionada integrada. Para cada petición que hagas, Couchbase Server comprobará de forma transparente la caché en busca del documento que necesitas. Si el documento no está en la caché, lo cargará desde el disco y te lo servirá.
Todas las escrituras van a la caché y se puede ajustar en qué punto de la solicitud se escribe en el disco o se replica a otros servidores.
Para su conjunto de trabajo, la mayoría de las peticiones clave-valor están por debajo del milisegundo.
Replicación entre centros de datos
Couchbase Server puede operar a través de zonas de disponibilidad y centros de datos. Cada clúster funciona de forma independiente, y los cambios se replican directamente de servidor a servidor entre los clústeres.
Esto es ideal para la recuperación de desastres y el equilibrio de carga geográfica.
Apache CouchDB
Los servidores CouchDB funcionan como nodos individuales que contienen cada uno una copia completa de los datos a almacenar. Los servidores de aplicaciones pueden leer y escribir en cualquiera de los servidores CouchDB. Los cambios se replican de forma asíncrona entre cada servidor, de servidor a servidor.
Una forma de ejecutar un clúster de CouchDB es tener un único maestro que acepte escrituras. Las actualizaciones se replican a los esclavos y un equilibrador de carga HTTP, como nginx, para distribuir las lecturas uniformemente entre los esclavos.
Esto tiene dos consecuencias principales:
- el maestro es un único punto de fallo para aceptar lecturas
- los datos leídos de los esclavos son finalmente coherentes: hay un desfase entre una escritura que se produce en el maestro y la que se replica en todos los esclavos.
Alternativamente, un cluster de CouchDB podría aceptar escrituras en cualquier nodo y luego replicarse entre cada uno. Esto mejoraría la disponibilidad de escritura pero aumentaría el alcance de los conflictos de escritura, que CouchDB te ayuda a detectar, y el tiempo que tardarían todas las copias de los datos en estar sincronizadas.
Desarrollo
Servidor Couchbase
Couchbase Server es desarrollado activamente por Couchbase Inc, como proyecto de código abierto. Las partes de clustering y distribución de Couchbase Server están escritas en Erlang, mientras que el manejo de datos está escrito en C y C++. Algunas partes de Couchbase Server, como N1QL, están escritas en Go.
Couchbase Server tiene varios SDKs que son desarrollados y soportados por Couchbase Inc. Estos proporcionan acceso idiomático a toda la gama de características de Couchbase Server, incluyendo N1QL, vistas y acceso clave-valor. Los SDK oficiales están disponibles para:
- Java (con soporte adicional para Spring)
- .NET
- Node JS
- Vaya a
- C/C++
- Python
- Ruby
- PHP.
Existen SDKs comunitarios para otros idiomas.
Couchbase Server funciona bien con otros sistemas, gracias a los conectores desarrollados y soportados por Couchbase Inc. Hay conectores disponibles para:
- Chispa
- Kafka
- Hadoop
- Elasticsearch
- Solr
- JDBC y ODBC, para N1QL.
El feed de cambios internos de Couchbase Server te ofrece la oportunidad de crear tus propios conectores.
Apache CouchDB
CouchDB está escrito en Erlang, sobre el framework OTP, por una comunidad de desarrolladores. Erlang es muy adecuado para construir sistemas tolerantes a fallos.
El feed de cambios de CouchDB ayuda a integrarlo con otros sistemas.
Las bibliotecas que envuelven la API REST de CouchDB están disponibles en la comunidad CouchDB.
Licencia
Tanto Couchbase Server como Apache CouchDB son proyectos de código abierto liberados bajo la licencia Apache 2.0.