Document-oriented NoSQL database
Apache CouchDB es una base de datos NoSQL orientada a documentos de código abierto , 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 luego se convirtió en un proyecto de Apache Software Foundation en 2008.
A diferencia de una base de datos relacional , una base de datos CouchDB no almacena datos y relaciones en tablas. En cambio, cada base de datos es una colección de documentos independientes. Cada documento mantiene sus propios datos y esquema autónomo. Una aplicación puede acceder a varias bases de datos, como una almacenada en el teléfono móvil de un usuario y otra en un servidor. Los metadatos del documento contienen información de revisión, lo que permite fusionar cualquier diferencia que pueda haberse producido mientras las bases de datos estaban desconectadas.
CouchDB implementa una forma de control de concurrencia multiversión (MVCC) de modo que no bloquea el archivo de base de datos durante las escrituras. Los conflictos quedan a cargo de la aplicación. La resolución de un conflicto generalmente implica primero fusionar los datos en uno de los documentos y luego eliminar el documento 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 multimaestro , que le permite escalar entre máquinas para crear sistemas de alto rendimiento. Una aplicación web incorporada llamada Fauxton (anteriormente Futon) ayuda con la administración.
Historia
Couch es un acrónimo de cluster of unreliable commodity hardware (grupo de hardware no fiable) . [4]
El proyecto CouchDB fue creado en abril de 2005 por Damien Katz, un ex desarrollador de Lotus Notes en IBM . Él mismo financió el proyecto durante casi dos años y lo publicó como un proyecto de código abierto bajo la Licencia Pública General de 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, se convirtió en un proyecto de alto nivel. [6] Esto llevó a que se lanzara la primera versión estable en julio de 2010. [7]
A principios de 2012, Katz abandonó el proyecto para centrarse en Couchbase Server . [8]
Desde la partida de Katz, el proyecto Apache CouchDB ha continuado, lanzando la versión 1.2 en abril de 2012 y la 1.3 en abril de 2013. En julio de 2013, la comunidad CouchDB fusionó la base de código de BigCouch , la versión agrupada de CouchDB de Cloudant , en el proyecto Apache. [9] El marco de agrupamiento BigCouch está incluido en la versión actual de Apache CouchDB. [10]
La versión 2.0.0 admite la agrupación nativa y el nuevo servidor de consultas Mango proporciona una forma sencilla basada en JSON de realizar consultas CouchDB sin JavaScript ni MapReduce. Además, en la versión 2.0.0 se introdujo Fauxton, la nueva interfaz web integrada, que reemplaza 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 de múltiples versiones , lo que significa que CouchDB puede manejar un gran volumen de lectores y escritores simultáneos sin conflictos.
- Creado para funcionar sin conexión
- CouchDB puede replicarse en dispositivos (como teléfonos inteligentes) que pueden desconectarse y manejar la sincronización de datos cuando el dispositivo vuelva a estar en línea.
- Arquitectura distribuida con replicación
- CouchDB fue diseñado teniendo en mente la replicación (o sincronización) bidireccional 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 en un momento posterior.
- Almacenamiento de documentos
- CouchDB almacena datos como "documentos", como uno o más pares de campo/valor expresados como JSON . Los valores de campo pueden ser elementos simples como cadenas, números o fechas; pero también se pueden utilizar listas ordenadas y matrices asociativas . Cada documento en una base de datos CouchDB tiene un identificador único y no se requiere ningún esquema de documento.
- Consistencia eventual
- CouchDB garantiza la consistencia final para poder proporcionar tanto disponibilidad como tolerancia a la partición.
- Vistas e índices de Map/Reduce
- Los datos almacenados se estructuran mediante vistas. En CouchDB, cada vista se construye mediante una función de JavaScript que actúa como la mitad del mapa de una operación de mapeo /reducción. La función toma un documento y lo transforma en un único valor que devuelve. CouchDB puede indexar vistas y mantener esos índices actualizados a medida que se agregan, eliminan o actualizan documentos.
- API HTTP
- Todos los elementos tienen una URL única que se expone a través de HTTP. Utiliza 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 incorporada accesible a través de la Web llamada Fauxton. [13]
Casos de uso e implementaciones de 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 de red no está garantizada y la aplicación debe seguir funcionando sin conexión.
CouchDB es ideal para aplicaciones con datos que se acumulan y cambian ocasionalmente, en las que se deben ejecutar consultas predefinidas y donde el control de versiones es importante (sistemas CRM, CMS, por ejemplo). La replicación maestro-maestro es una característica especialmente interesante, que permite implementaciones sencillas en varios sitios. [14]
Usuarios
Los usuarios de CouchDB incluyen:
- El CERN utiliza CouchDB como base de datos para el Sistema de Gestión de Datos del Gran Colisionador de Hadrones . [15]
- La Cruz Roja utiliza la aplicación iDAT para completar electrónicamente los casos en zonas de desastre. En este caso, se utiliza CouchDB como base de datos multinodo de punto a punto 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 3.000 aviones. [18] [19]
- Amadeus IT Group , para algunos de sus sistemas back-end. [ cita requerida ]
- Credit Suisse , para uso interno del departamento de materias primas para su marco de mercado. [20] [ se necesita una mejor fuente ]
- Meebo , por su plataforma social (Web y aplicaciones). [ cita requerida ] Meebo fue adquirido por Google y la mayoría de los productos fueron cerrados el 12 de julio de 2012. [21]
- npm utiliza CouchDB como base de datos de replicación para su registro de paquetes. [22]
- Sophos , para algunos de sus sistemas back-end. [ cita requerida ]
- 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+ para plataforma internacional bajo demanda en CANAL+ Overseas.
- Protogrid, como back-end de almacenamiento para su marco de desarrollo rápido de aplicaciones [26]
Manipulación de datos: documentos y vistas
CouchDB administra una colección de documentos JSON . Los documentos se organizan mediante vistas. Las vistas se definen con funciones agregadas y los filtros se calculan en paralelo, de forma 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 socket externos y un protocolo basado en JSON. [27] Como consecuencia, se han desarrollado servidores de vistas en una variedad de 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 a través de HTTP. A continuación, se muestran algunos ejemplos en los que se utiliza cURL , una utilidad de línea de comandos. En estos ejemplos se supone que CouchDB se ejecuta en el host local (127.0.0.1) en el puerto 5984.
Componentes de código abierto
CouchDB incluye varios otros proyectos de código abierto como parte de su paquete predeterminado.
Véase también
Referencias
- ^ "Versión 3.4.2". 20 de octubre de 2024. Consultado el 21 de octubre de 2024 .
- ^ 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 de la lista de correo de Apache en mail-archives.apache.org
- ^ Re: Resolución propuesta: Establecer TLP de CouchDB en mail-archives.apache.org
- ^ "Base de datos NoSQL CouchDB lista para su uso en producción" Archivado el 15 de noviembre de 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). «Welcome BigCouch» (Bienvenido BigCouch) . Consultado 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" (Documentación de Apache CouchDB® 3.3). docs.couchdb.org . Consultado el 4 de agosto de 2024 .
- ^ CouchDB, descripción técnica general Archivado el 20 de octubre de 2011 en Wayback Machine .
- ^ "couchdb-fauxton". GitHub . apache . Consultado el 2 de mayo de 2023 .
- ^ Comparación de Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase de Kristóf Kovács
- ^ "Por qué los científicos del Gran Colisionador de Hadrones están utilizando CouchDB". ReadWrite . 2010-08-26 . Consultado el 2022-03-29 .
- ^ iDAT, Código de la Cruz Roja, 2021-07-31 , consultado el 2022-03-29
- ^ "Database-Deep-Dives-CouchDB" (Análisis profundo de bases de datos en CouchDB). www.ibm.com . 19 de julio de 2019. Consultado el 29 de marzo de 2022 .
- ^ "Database-Deep-Dives-CouchDB" (Análisis profundo de bases de datos en CouchDB). www.ibm.com . 19 de julio de 2019. Consultado el 29 de marzo de 2022 .
- ^ "United Airlines optimiza sus operaciones con Couchbase | Caso práctico" www.couchbase.com . Consultado el 29 de marzo de 2022 .
- ^ "CouchDB en la naturaleza" Archivado el 20 de julio de 2017 en Wayback Machine Artículo 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 tratamiento clásico de Google Acq-hire: la mayoría de los productos cerrarán pronto". TechCrunch . AOL Inc . Consultado 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 de múltiples centros de datos, escalable y tolerante a fallos
- ^ Correo electrónico de Elliot Murphy (Canonical) Archivado el 5 de mayo de 2011 en Wayback Machine a la lista CouchDB-Devel
- ^ Canonical elimina CouchDB de Ubuntu One (Slashdot)
- ^ "Protogrid - Sobre nosotros".
- ^ Ver documentación del servidor Archivado el 20 de octubre de 2008 en Wayback Machine en wiki.apache.org
Bibliografía
- Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (15 de noviembre de 2009), CouchDB: The Definitive Guide (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-3, archivado desde el original el 5 de diciembre de 2010 , consultado el 1 de noviembre de 2009
- Holt, Bradley (7 de marzo de 2011), Escritura y consulta de vistas de MapReduce en CouchDB (1.ª ed.), O'Reilly Media , pág. 76, ISBN 978-1-4493-0312-9
- Holt, Bradley (11 de abril de 2011), Scaling 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
- Biblioteca PHP5 sencilla para comunicarse con CouchDB
- Cliente asincrónico CouchDB para Java
- Cliente CouchDB asincrónico para Scala
- Lehnardt, Jan (2008). "Couch DB at 10,000 feet" (Base de datos de sofá a 10.000 pies). Erlang eXchange 2008. Archivado desde el original el 9 de noviembre de 2012. Consultado el 15 de abril de 2012 .
- Lenhardt, Jan (2009). "CouchDB para desarrolladores de Erlang". Erlang Factory London 2009. Archivado desde el original el 19 de junio de 2011. Consultado el 15 de abril de 2012 .
- Katz, Damien (enero de 2009). "CouchDB and Me". RubyFringe . InfoQ. Archivado desde el original el 27 de abril de 2011 . Consultado el 15 de abril de 2012 .