CouchDB: Una Introducción Sencilla

  • Tiempo de lectura:15 minutos de lectura
  • Autor de la entrada:
  • Última modificación de la entrada:14/07/2024

En esta entrada aprenderás qué es CouchDB y cómo puede ayudarte esta base de datos a implementar aplicaciones de una manera sencilla, escalable y resistente a fallos en muy poco tiempo. ¡No te lo pierdas!

Introducción a CouchDB

¿Qué es CouchDB?

Apache CouchDB es una base de datos NoSQL open source orientada a documentos que nos permite gestionar de forma distribuida una gran cantidad de datos no estructurados. La primera versión de CouchDB se publicó en el año 2005 y el software está implementado en el lenguaje de programación Erlang.

Si hay una palabra para describir CouchDB, es relax. Es el título del logo oficial de CouchDB y también se muestra en la consola al ejecutar el software. Aprender esta tecnología y sus conceptos básicos debería resultar natural para la mayoría de las personas que han hecho algún desarrollo web y además es fácil de explicar a personas no técnicas.

CouchDB usa varios formatos y protocolos para almacenar, transmitir y procesar datos. El formato principal para el almacenamiento de datos es JSON. También, usa JavaScript como lenguaje de consulta y MapReduce para el procesamiento. Además, utiliza el protocolo HTTP para las comunicaciones.

A diferencia de las bases de datos relacionales, CouchDB no admite el almacenamiento en tablas sino que trata cada base de datos como una colección de documentos independientes.

CouchDB también está diseñado para manejar el tráfico variable. Por ejemplo, si un sitio web experimenta un pico repentino de tráfico, CouchDB generalmente absorberá una gran cantidad de peticiones concurrentes sin caerse. Puede tardar un poco más de tiempo para cada petición, pero todas se responden. Cuando el pico haya pasado, CouchDB volverá a funcionar con la velocidad habitual.

Arquitectura de CouchDB

CouchDB garantiza la escalabilidad con su arquitectura y replicación multimaster para distribuir los datos globalmente. Un clúster de varios nodos guarda todos los datos de forma redundante, para que siempre estén disponibles cuando sean necesarios.

CouchDB puede desplegarse con un único nodo o bien en modo clúster. La mayoría de proyectos pueden comenzar con una sola instancia de CouchDB. Los proyectos más exigentes pueden actualizarse cuando sea necesario a un despliegue en modo clúster. Este modo clúster permite ejecutar un único servicio de base de datos en cualquier número de servidores o de máquinas virtuales. El clúster mejora la capacidad y dota al sistema de alta disponibilidad.

Esquema de Arquitectura en CouchDB
Esquema de Arquitectura en CouchDB

Su arquitectura interna es tolerante a fallos, y los fallos se producen en un entorno controlado. La arquitectura de CouchDB intenta evitar que los problemas individuales se propaguen en cascada por todo el sistema e intenta aislarlos.

Sus componentes pueden utilizarse como bloques de construcción que resuelven los problemas de almacenamiento de formas ligeramente diferentes para sistemas más grandes y complejos. Ya sea que necesites un sistema que sea muy rápido pero que no se preocupe demasiado por la fiabilidad, o uno que garantice el almacenamiento en dos o más ubicaciones físicamente separadas, pero que estés dispuesto a sacrificar parte del rendimiento, CouchDB te puede resultar útil.

Replicación de Datos

El exclusivo protocolo de replicación de CouchDB es la base de toda una nueva generación de aplicaciones «Offline First» para aplicaciones móviles y otros entornos con infraestructuras de red difíciles.

La función principal de la replicación es sincronizar dos o más bases de datos. Para ello, debe sincronizar de forma fiable las bases de datos entre varias máquinas para el almacenamiento redundante de datos. También distribuir los datos en un clúster de instancias que comparten las peticiones que llegan al clúster equilibrando la carga. Por último, debe distribuir los datos entre ubicaciones físicamente distantes.

La replicación de CouchDB utiliza la misma API REST que utilizan todos los clientes. La replicación funciona de forma incremental: si durante la replicación algo va mal, como la caída de la conexión de red, se retomará donde se quedó la próxima vez que se ejecute.

El proceso de replicación es incremental. A nivel de la base de datos, la replicación solo examina los documentos actualizados desde la última replicación.

Se pueden crear y mantener réplicas parciales. La replicación puede filtrarse mediante una función JavaScript, de modo que solo se repliquen determinados documentos o los que cumplan criterios específicos.

Almacenamiento de Documentos

Un despliegue de CouchDB aloja bases de datos que almacenan documentos. Cada documento tiene un nombre único en la base de datos y se proporciona una API HTTP REST para leer, actualizar y eliminar los documentos.

Los documentos son la unidad de datos en CouchDB y están formados por cualquier número de campos. Los documentos también incluyen metadatos que son mantenidos por el sistema. Los campos de los documentos tienen un nombre único y pueden contener valores de distintos tipos, como por ejemplo texto, números o booleanos. No hay un límite para el tamaño del texto o del número de elementos.

El modelo de actualización de documentos de CouchDB es optimista y sin bloqueos. Las ediciones de documentos se realizan mediante aplicaciones cliente que cargan los documentos, aplican los cambios y los guardan de nuevo en la base de datos. Si otro cliente que edita el mismo documento guarda sus cambios primero, el cliente recibe un error de conflicto de edición al guardar. Para resolver el conflicto de actualización, se puede abrir la última versión del documento, volver a aplicar los cambios e intentar la actualización de nuevo.

Las actualizaciones de un solo documento (añadir, editar, eliminar) son transaccionales: o tienen éxito por completo o fallan por completo. La base de datos nunca contiene documentos parcialmente guardados o editados.

Propiedades ACID

CouchDB cuenta con las propiedades ACID (Atomic, Consistent, Isolated, Durable). En el disco, CouchDB asegura que los archivos de la base de datos están siempre en un estado consistente.

Las actualizaciones de los documentos (añadir, editar, borrar) se serializan, excepto los blobs binarios que se escriben simultáneamente. Los lectores de la base de datos nunca se bloquean y nunca tienen que esperar a los escritores u otros lectores. Cualquier número de clientes puede estar leyendo documentos sin ser bloqueados o interrumpidos por actualizaciones concurrentes, incluso en el mismo documento. Las operaciones de lectura de CouchDB utilizan un modelo de control de concurrencia multiversión o mediante versiones múltiples (MVCC) en el que cada cliente ve una instantánea consistente de la base de datos desde el principio hasta el final de la operación de lectura. Esto significa que CouchDB puede garantizar la semántica transaccional en cada documento.

Cuando los documentos de CouchDB se actualizan, todos los datos y los índices asociados se vuelcan al disco y el commit transaccional siempre deja la base de datos en un estado completamente consistente.

Compactación de datos

El espacio desperdiciado se recupera mediante la compactación ocasional. De forma programada, o cuando el archivo de la base de datos supera una determinada cantidad de espacio desaprovechado, el proceso de compactación clona todos los datos activos en un nuevo archivo y luego descarta el archivo antiguo.

La base de datos permanece disponible todo el tiempo y se permite que todas las actualizaciones y lecturas se completen con éxito. El archivo de la base de datos antigua solo se elimina cuando se han copiado todos los datos y todos los usuarios han pasado al nuevo archivo.

Ejemplo de código con CouchDB

A continuación se muestra un ejemplo de código en Python que muestra cómo utilizar CouchDB para almacenar y recuperar datos:

# Importa la librería de CouchDB
import couchdb

# Crea una conexión al servidor de CouchDB
couch = couchdb.Server('http://localhost:5984/')

# Crea una nueva base de datos en CouchDB
db = couch.create('mydatabase')

# Crea un nuevo documento en la base de datos
doc = {'name': 'John Doe', 'age': 34}
db.save(doc)

# Recupera el documento de la base de datos
doc = db.get('mydatabase')

# Muestra el documento
print(doc)

En este ejemplo se importa la biblioteca de CouchDB y se crea una conexión al servidor CouchDB. Luego se crea una nueva base de datos en CouchDB y se crea un nuevo documento en la base de datos. Se utiliza el método get de CouchDB para recuperar el documento de la base de datos y se imprime el documento recuperado.

Alternativas a CouchDB

PouchDB está construido para navegadores web móviles y de escritorio.

Couchbase Lite está construido para aplicaciones nativas de iOS y Android.

CouchDB vs MariaDB: ¿Cuál es mejor?

MariaDB Logo

MariaDB es una base de datos relacional open source muy popular, que usan tablas estructuradas para almacenar los datos. Es compatible con MySQL, en su API y comandos. La primera versión apareció en 2009 y es compatible con los sistemas operativos Linux, Windows y Mac. MariaDB soporta alta disponibilidad y es un sistema muy seguro y con un buen rendimiento.

La diferencia más notable entre estos dos sistemas es que CouchDB almacena documentos, mientras que MariaDB utiliza un sistema de gestión de bases de datos relacionales (DBMS), aunque también puede almacenar documentos.

Ambas tecnologías tienen licencias de código abierto. Sin embargo, MariaDB es compatible con SQL y XML, claves externas y funciones en memoria. Por otro lado, CouchDB es compatible con MapReduce.

En cuanto a los mecanismos de consistencia, CouchDB tiene consistencia eventual y no soporta transacciones ACID, mientras que MariaDB tiene consistencia inmediata y sí soporta transacciones.

Mejores cursos de CouchDB – Formación

A continuación tienes dos cursos que te recomiendo para profundizar en tu aprendizaje de CouchDB y empezar a implementar esta base de datos en tus proyectos:

Curso Aprende CouchDB 3: NoSQL Básico y Avanzado

Aprende CouchDB 3: NoSQL Básico y Avanzado

Este curso te enseñará a desenvolverte con CouchDB 3 desde cero. Aprenderás a instalar y configurar la base de datos, almacenar y consultar documentos y gestionar la replicación y la seguridad del sistema.

Curso Aprende Diseño de bases de datos NoSQL

Aprende Diseño de bases de datos NoSQL con CouchDB

En el curso comprenderás los fundamentos del diseño de bases de datos NoSQL usando CouchDB como referencia. Recomendado.

Preguntas Frecuentes CouchDB – FAQ

¿Qué tipo de base de datos es CouchDB?

CouchDB es una base de datos open source noSQL orientada a documentos. Es distribuida y tolerante a fallos con alta disponibilidad. El formato principal para almacenar datos es JSON.

¿Cuál es la diferencia entre CouchDB y MongoDB?

El lenguaje de consulta de MongoDB es propio, y CouchDB permite realizar consultas con su API REST. CouchDB también es un sistema que disponiza la disponibilidad, mientras que MongoDB no lo es.

¿Es CouchDB una herramienta para big data?

CouchDB puede ser una solución apropiada en un sistema big data si se necesita una base de datos documental, simple de usar y que proporciona escalabilidad y alta disponibilidad.


Deja una respuesta