Apache CouchDB es una base de datos NoSQL de código abierto orientada a documentos , implementada en Erlang .
CouchDB utiliza múltiples formatos y protocolos para almacenar, transferir y procesar sus datos. Utiliza JSON para almacenar datos, JavaScript como lenguaje de consulta mediante MapReduce y HTTP para una API . [ 2 ]
CouchDB se lanzó por primera vez en 2005 y posteriormente se convirtió en un proyecto de la Apache Software Foundation en 2008.
A diferencia de una base de datos relacional , una base de datos CouchDB no almacena datos ni relaciones en tablas. En cambio, cada base de datos es una colección de documentos independientes. Cada documento mantiene sus propios datos y un esquema autónomo. Una aplicación puede acceder a varias bases de datos, como una almacenada en el teléfono móvil del usuario y otra en un servidor. Los metadatos de los documentos contienen información de revisión, lo que permite fusionar cualquier diferencia que haya surgido mientras las bases de datos estaban desconectadas.
CouchDB implementa una forma de control de concurrencia multiversión (MVCC), por lo que no bloquea el archivo de la base de datos durante las escrituras. La aplicación se encarga de resolver los conflictos. Generalmente, la resolución de un conflicto implica primero fusionar los datos en uno de los documentos y luego eliminar el obsoleto. [ 3 ]
Otras características incluyen semántica ACID a nivel de documento con consistencia eventual , MapReduce (incremental) y replicación (incremental). Una de las características distintivas de CouchDB es la replicación multi-maestro , que le permite escalar en diferentes máquinas para crear sistemas de alto rendimiento. Una aplicación web integrada llamada Fauxton (anteriormente Futon) facilita la administración.
Historia
Couch es un acrónimo de cluster of unreliable commodity hardware (clúster de hardware comercial poco fiable) . [ 4 ] El proyecto CouchDB fue creado en abril de 2005 por Damien Katz, un antiguo desarrollador de Lotus Notes en IBM . Financió el proyecto por su cuenta durante casi dos años y lo publicó como un proyecto de código abierto bajo la Licencia Pública General GNU .
En febrero de 2008, se convirtió en un proyecto de Apache Incubator y se ofreció bajo la Licencia Apache . [ 5 ] Unos meses después, pasó a ser un proyecto de nivel superior. [ 6 ] Esto llevó a que la primera versión estable se lanzara en julio de 2010. [ 7 ]
A principios de 2012, Katz dejó el proyecto para centrarse en Couchbase Server . [ 8 ]
Desde la partida de Katz, el proyecto Apache CouchDB ha continuado, publicando la versión 1.2 en abril de 2012 y la 1.3 en abril de 2013. En julio de 2013, la comunidad de CouchDB fusionó el código fuente de BigCouch , la versión en clúster de CouchDB de Cloudant , con el proyecto Apache. [ 9 ] El marco de clúster de BigCouch está incluido en la versión actual de Apache CouchDB. [ 10 ]
La agrupación nativa es compatible con la versión 2.0.0. Además, el nuevo Mango Query Server proporciona una forma sencilla basada en JSON para realizar consultas CouchDB sin JavaScript ni MapReduce. También en la versión 2.0.0 se introdujo Fauxton, la nueva interfaz web integrada, para reemplazar a Futon, la antigua interfaz web integrada. [ 11 ]
Características principales
- Semántica ACID
- CouchDB proporciona semántica ACID . [ 12 ] Lo hace implementando una forma de control de concurrencia multiversión , lo que significa que CouchDB puede manejar un alto volumen de lectores y escritores concurrentes sin conflicto.
- Diseñado para funcionar sin conexión.
- CouchDB puede replicar datos en dispositivos (como teléfonos inteligentes) que pueden desconectarse de internet y gestionar la sincronización de datos cuando el dispositivo vuelva a estar en línea.
- Arquitectura distribuida con replicación
- CouchDB se diseñó teniendo en cuenta la replicación bidireccional (o sincronización) y el funcionamiento sin conexión. Esto significa que varias réplicas pueden tener sus propias copias de los mismos datos, modificarlos y luego sincronizar esos cambios posteriormente.
- Almacenamiento de documentos
- CouchDB almacena los datos como "documentos", que consisten en uno o más pares campo/valor expresados en formato JSON . Los valores de los campos pueden ser elementos simples como cadenas de texto, números o fechas; pero también se pueden usar listas ordenadas y matrices asociativas . Cada documento en una base de datos CouchDB tiene un identificador único y no se requiere un esquema de documento.
- Consistencia eventual
- CouchDB garantiza la consistencia eventual para poder proporcionar tanto disponibilidad como tolerancia a las particiones.
- Vistas e índices de Map/Reduce
- Los datos almacenados se estructuran mediante vistas. En CouchDB, cada vista se construye con una función JavaScript que actúa como la parte de Map de una operación map /reduce. La función toma un documento y lo transforma en un único valor que devuelve. CouchDB puede indexar las vistas y mantener actualizados esos índices a medida que se añaden, eliminan o actualizan documentos.
- API HTTP
- Todos los elementos tienen una URI única que se expone a través de HTTP. Se utilizan los métodos HTTP POST, GET, PUT y DELETE para las cuatro operaciones CRUD básicas (Crear, Leer, Actualizar, Eliminar) en todos los recursos.
CouchDB también ofrece una interfaz de administración integrada accesible a través de la web llamada Fauxton. [ 13 ]
Casos de uso e implementaciones en producción
Las capacidades de replicación y sincronización de CouchDB lo hacen ideal para su uso en dispositivos móviles, donde la conexión a la red no está garantizada y la aplicación debe seguir funcionando sin conexión.
CouchDB es ideal para aplicaciones con datos acumulativos y que cambian ocasionalmente, sobre las que se ejecutan consultas predefinidas y donde el control de versiones es importante (sistemas CRM y CMS, por ejemplo). La replicación maestro-maestro es una característica especialmente interesante, que permite implementaciones sencillas en múltiples sitios. [ 14 ]
Usuarios
Entre los usuarios de CouchDB se incluyen:
- El CERN utiliza CouchDB como base de datos para el Sistema de Gestión de Datos en el Gran Colisionador de Hadrones . [ 15 ]
- La Cruz Roja utiliza la aplicación iDAT para completar los casos electrónicamente en zonas de desastre. Aquí se utiliza CouchDB como base de datos multinodo peer-to-peer sin conexión. [ 16 ]
- Los servicios de IBM Cloud se basan fundamentalmente en CouchDB. [ 17 ]
- United Airlines utiliza CouchDB para los sistemas de entretenimiento a bordo en más de 3000 aviones. [ 18 ] [ 19 ]
- Amadeus IT Group , para algunos de sus sistemas de back-end.
- Credit Suisse , para uso interno en el departamento de materias primas para su marco de mercado. [ 20 ]
- Meebo , por su plataforma social (web y aplicaciones). Meebo fue adquirida por Google y la mayoría de sus productos se cerraron el 12 de julio de 2012. [ 21 ]
- npm utiliza CouchDB como base de datos replicada para su registro de paquetes. [ 22 ]
- Sophos , para algunos de sus sistemas de back-end.
- BBC , para una plataforma CMS dinámica. [ 23 ]
- Canonical comenzó a usarlo en 2009 para su servicio de sincronización "Ubuntu One", [ 24 ] pero dejó de usarlo en noviembre de 2011. [ 25 ]
- CANAL+ es una plataforma internacional bajo demanda disponible en CANAL+ Overseas.
- Protogrid , como backend de almacenamiento para su marco de desarrollo rápido de aplicaciones [ 26 ]
Manipulación de datos: documentos y vistas
CouchDB gestiona una colección de documentos JSON . Los documentos se organizan mediante vistas. Las vistas se definen con funciones de agregación y los filtros se calculan en paralelo, de forma muy similar a MapReduce .
Las vistas generalmente se almacenan en la base de datos y sus índices se actualizan continuamente. CouchDB admite un sistema de vistas que utiliza servidores de sockets externos y un protocolo basado en JSON. [ 27 ] En consecuencia, se han desarrollado servidores de vistas en diversos lenguajes (JavaScript es el predeterminado, pero también existen PHP, Ruby, Python y Erlang).
Acceso a datos a través de HTTP
Las aplicaciones interactúan con CouchDB mediante HTTP. A continuación, se muestran algunos ejemplos utilizando cURL , una utilidad de línea de comandos. Estos ejemplos presuponen que CouchDB se está ejecutando en localhost (127.0.0.1) en el puerto 5984.
Componentes de código abierto
CouchDB incluye otros proyectos de código abierto como parte de su paquete predeterminado.
Véase también
Referencias
- ↑ "Versión 3.5.2" . 14 de mayo de 2026. Consultado el 15 de mayo de 2026 .
- ↑ Apache Software Foundation. "Apache CouchDB" . Consultado el 15 de abril de 2012 .
- ↑ Smith, Jason. "¿Qué es el protocolo de replicación de CouchDB? ¿Es como Git?" . StackOverflow . Stack Exchange . Consultado el 14 de abril de 2012 .
- ↑ "Explorando CouchDB" . Developer Works . IBM. 31 de marzo de 2009. Consultado el 30 de septiembre de 2016 .
- ↑ Anuncio en la lista de correo de Apache en mail-archives.apache.org
- ↑ Re: Resolución propuesta: Establecer CouchDB TLP en mail-archives.apache.org
- ↑ "Base de datos NoSQL CouchDB lista para su uso en producción" Archivado el 15/11/2010 en Wayback Machine , artículo de PC World de julio de 2010
- ↑ Katz, Damien. "El futuro de CouchDB" . Consultado el 15 de abril de 2012 .
- ↑ Slater, Noah (25 de julio de 2013). "Bienvenido BigCouch" . Recuperado el 25 de julio de 2013 .
- ↑ "'2.0'" . 20 de septiembre de 2016 . Consultado el 13 de enero de 2017 .
- ↑ "1.8. 2.0.x Branch — Apache CouchDB® 3.3 Documentation" . docs.couchdb.org . Consultado el 4 de agosto de 2024 .
- ↑ CouchDB, Descripción técnica. Archivado el 20 de octubre de 2011 en Wayback Machine .
- ↑ «couchdb-fauxton» . GitHub . apache . Consultado el 2 de mayo de 2023 .
- ↑ Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase comparación de Kristóf Kovács
- ↑ Finley, Klint (26 de agosto de 2010). "Por qué los científicos del Gran Colisionador de Hadrones utilizan CouchDB" . ReadWrite . Archivado del original el 17 de junio de 2022. Consultado el 29 de marzo de 2022 .
- ↑ iDAT , Código de la Cruz Roja, 31/07/2021 , consultado el 29/03/2022
- ↑ "Database-Deep-Dives-CouchDB" . www.ibm.com . 19 de julio de 2019. Consultado el 29 de marzo de 2022 .
- ↑ "Database-Deep-Dives-CouchDB" . www.ibm.com . 19 de julio de 2019. Consultado el 29 de marzo de 2022 .
- ↑ "United Airlines optimiza sus operaciones con Couchbase | Estudio de caso" . www.couchbase.com . Consultado el 29 de marzo de 2022 .
- ↑ "CouchDB en la práctica" Archivado el 20/07/2017 en el artículo de Wayback Machine de la web del producto, una lista de proyectos de software y sitios web que utilizan CouchDB.
- ↑ Cutler, Kim-Mai (9 de junio de 2012). "Meebo recibe el clásico tratamiento de adquisición y contratación de Google: la mayoría de los productos cerrarán pronto" . TechCrunch . AOL Inc. Recuperado el 7 de enero de 2016 .
- ↑ "npm-registry-couchapp" . GitHub . npm. 17 de junio de 2015. Consultado el 7 de enero de 2016 .
- ↑ CouchDB en la BBC como un almacén de clave-valor tolerante a fallos, escalable y con múltiples centros de datos.
- ↑ Correo electrónico de Elliot Murphy (Canónico) Archivado el 5 de mayo de 2011 en Wayback Machine en la lista CouchDB-Devel
- ↑ Canonical elimina CouchDB de Ubuntu One (Slashdot)
- ↑ "Protogrid - Über uns" .
- ↑ Ver documentación del servidor archivada el 20/10/2008 en Wayback Machine en wiki.apache.org
Bibliografía
- Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (15 de noviembre de 2009), CouchDB: La guía definitiva (1.ª ed.), O'Reilly Media , pág. 300, ISBN 978-0-596-15816-3
- Lennon, Joe (15 de diciembre de 2009), Beginning CouchDB (1ª ed.), Apress , p. 300, ISBN 978-1-4302-7237-3Archivado del original el 5 de diciembre de 2010 , consultado el 1 de noviembre de 2009.
- Holt, Bradley (7 de marzo de 2011), Writing and Querying MapReduce Views in CouchDB (1.ª ed.), O'Reilly Media , pág. 76, ISBN 978-1-4493-0312-9
- Holt, Bradley (11 de abril de 2011), Escalando CouchDB (1.ª ed.), O'Reilly Media , pág. 72, ISBN 978-1-4493-0343-3
- Brown, MC (31 de octubre de 2011), Introducción a CouchDB (1.ª ed.), O'Reilly Media , pág. 50, ISBN 978-1-4493-0755-4
- Thompson, Mick (2 de agosto de 2011), Introducción a GEO, CouchDB y Node.js (1.ª ed.), O'Reilly Media , pág. 64, ISBN 978-1-4493-0752-3
Enlaces externos
- Sitio web oficial
- CouchDB: La guía definitiva
- Referencia completa de la API HTTP
- Librería PHP5 sencilla para comunicarse con CouchDB.
- Cliente asíncrono de CouchDB para Java
- Cliente asíncrono de CouchDB para Scala
- Lehnardt, Jan (2008). "Couch DB a 10,000 pies" . Erlang eXchange 2008. Archivado del original el 9 de noviembre de 2012. Recuperado el 15 de abril de 2012 .
- Lenhardt, Jan (2009). "CouchDB para desarrolladores de Erlang" . Erlang Factory London 2009. Archivado del original el 19 de junio de 2011. Recuperado el 15 de abril de 2012 .
- Katz, Damien (enero de 2009). "CouchDB y yo" . RubyFringe . InfoQ. Archivado del original el 27 de abril de 2011. Recuperado el 15 de abril de 2012 .
- Proyectos de la Apache Software Foundation
- Sistemas de gestión de bases de datos cliente-servidor
- Software multiplataforma
- Software relacionado con bases de datos para Linux
- Arquitectura de computación distribuida
- Bases de datos orientadas a documentos
- Erlang (lenguaje de programación)
- Sistemas de gestión de bases de datos gratuitos
- NoSQL
- Almacenamiento estructurado
- Software relacionado con redes Unix
- Software libre programado en Erlang.
- Software de 2005
- Software que utiliza la licencia Apache.