Skip to content

CouchDB

by Cristian Requena on abril 6th, 2010

CouchDB es una base de datos de documentos, de código abierto, mantenida por Apache igual que Cassandra.

Algo muy curioso es que está desarrollada en Erlang, un lenguaje de programación muy robusto y fiable, que se ejecuta sobre una máquina virtual de alto rendimiento en el área del paralelismo, que además es cross-platform. Para la realización de consultas utiliza un motor orientado a tablas consultable mediante JavaScript.

Un documento de CouchDB, que se distingue mediante un Id único, es un conjunto de campos identificados por etiquetas, siendo estos valores numéricos, alfanuméricos, fechas, listas, mapas asociativos, etc. Permite la creación de vistas, que son el mecanismo que permite la combinación de documentos para retornar valores de varios documentos, es decir, CouchDB permite la realización de las operaciones JOIN típicas de SQL.

Esta base de datos no tiene esquema, por lo que contiene datos semiestructurados y permite la inclusión de nuevos tipos de documentos (es decir, permite realizar la definición de datos) sin implicar la modificación de los anteriores.

CouchDB es distribuida y eventualmente consistente, por lo que de igual modo que Cassandra, implementa sistemas de replicación y de resincronización en caso de splits entre nodos. La comunicación de actualizaciones se realiza incrementalmente. De todos modos ofrece las características ACID de las bases de datos relacionales, pero permitiendo siempre la lectura de documentos, es decir, que estas nunca se bloquean, ya que al iniciarlas se crea una “imagen” del documento que tras ser consultada de destruye. En resumen, CouchDB ofrece un mecanismo de control de múltiples versiones concurrentes, MVCC.

Internamente, los documentos se almacenan en un potente arbol binario mediante su identificador y un número de secuencia, que es incremental en cada actualización y global para toda la base de datos, que permite la localización cronológica de los cambios.

Como se muestra en la anterior esquemática, obtenida de la página oficial de CouchDB, esta base de datos se compone de un núcleo desarrollado en Erlang y de dos enlaces externos: SpiderMonkey, una implementación de JavaScript programada en C, y Lucene Java, una biblioteca de búsqueda en Java.

Algo realmente interesante es que CouchDB persiste índices de las vistas para dar respuestas más rápidas en posteriores accesos a las mismas; esto se hace notorio concretamente con grandes volumenes de documentos.

Seguramente el concepto de bases de datos de documentos sea algo a lo que muchos desarrolladores no estén acostumbrados, pero conociendo el gran rendimiento de Erlang en entornos distribuidos es posible que a gran escala se trate de una base de datos tan rápida y fiable como cualquier otra, ofreciendo, además, un modelo de datos sin esquema y las características ACID.

From → Historia, NoSQL

4 Comments
  1. CouchDB es una base de datos con un concepto muy bueno, sencillo y humano. El concepto de documento, como en MongoDB, es intuitivo, y la información se almacena de forma natural.

    He utilizado durante algún tiempo esta base de datos con un buen sabor de boca, ya que además incluye una interfaz web sencilla con la cual poder interactuar con la base de datos. En su día escribi algunos posts prácticos sobre esta base de datos, incluyendo su instalación y sus usos básicos:

    http://rafinguer.blogspot.com/2009/12/couchdb-introduccion.html
    http://rafinguer.blogspot.com/2009/12/couchdb-primeros-pasos.html

    Es potente, fiable, segura y versátil, donde la escalabilidad es su fuerte.

    El único punto que creo sería mejorable es la instalación, pues tiene una fuerte dependencia de Erlang, y éste a su vez, de otros paquetes.

    • Hola Rafael, gracias por el comentario.

      Ahora mismo estoy empezando a documentarme en profundidad acerca de CouchDB. La gran dependencia de Erlang creo que, aparte de la problemática de la puesta en marcha, es muy positiva para CouchDB: por lo que he leído acerca de este lenguaje es altamente escalable y muy tolerante a fallos, por lo que la robustez de CouchDB seguramente tenga las raíces en estas características de Erlang.

      Gracias por los enlaces, son de otro blog tuyo, ¿verdad?

      Saludos,

      Cristian Requena.

Trackbacks & Pingbacks

  1. Consistencia en CouchDB | NoSQL.es
  2. MVCC en CouchDB. Ejemplo de uso desde Java. | NoSQL.es

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS