CouchDB
Apache CouchDB | ||
---|---|---|
![]() | ||
![]() Interfaz administrativa Futon de CouchDB, base de datos de usuarios | ||
Información general | ||
Tipo de programa | Base de datos | |
Autor | Damien Katz, Jan Lehnardt, Noah Slater, Christopher Lenz, J. Chris Anderson, Paul Davis, Adam Kocoloski, Jason Davies, Benoît Chesneau, Filipe Manana, Robert Newson | |
Desarrollador | Apache Software Foundation | |
Lanzamiento inicial | 2005 | |
Licencia | Apache License2.0 | |
Información técnica | ||
Programado en | Erlang | |
Versiones | ||
Última versión estable | 3.3.1 (info)( 11.01.2023) | |
Enlaces | ||
Apache CouchDB,comúnmente llamadaCouchDB,es ungestor de bases de datosdecódigo abierto,cuyo foco está puesto en la facilidad de su uso y en ser "una base de datos que asume la web de manera completa".[1] Se trata de una base de datosNoSQLque empleaJSONpara almacenar los datos,JavaScriptcomo lenguaje de consulta por medio deMapReduceyHTTPcomoAPI.[1] Una de sus características más peculiares es la facilidad con la que permite hacer replicaciones. CouchDB fue liberada por primera vez en 2005, transformándose en un proyectoApacheen 2008.
A diferencia de unabase de datos relacional,CouchDB no almacena los datos y sus relaciones en tablas. En cambio, cada base de datos es una colección de documentos independientes. Cada documento mantiene sus propios datos y su esquema autocontenido. Una aplicación puede acceder a múltiples bases de datos, por ejemplo una residente en el teléfono móvil del usuario y otra residente en un servidor. Los metadatos del documento contienen información acerca de la versión del mismo, permitiendo refundir cualesquiera diferencias que puedan haberse producido mientras las bases de datos estaban desconectadas.
CouchDB implementa una forma decontrol de concurrencia multiversión(Multiversion Concurrency Control) a fin de evitar la necesidad de bloquear el archivo de base de datos durante las escrituras. La resolución de conflictos se delega a la aplicación. Para resolver un conflicto generalmente se requiere primero refundir los datos en uno de los documentos para luego eliminar el otro.[2]
Otras características son una semánticaACIDconconsistencia eventual,MapReduce,replicación incremental y tolerancia a los fallos. Las labores de administración se facilitan por medio de una aplicación web incorporada, llamada Futon.
Historia
[editar]CouchDB(Couches un acrónimo paracluster of unreliable commodity hardware)[3] es un proyecto creado en abril de 2005 porDamien Katz,ex desarrollador deLotus NotesenIBM.Damien Katz lo definió como un "sistema de almacenamiento para una base de datos objetal de gran escala". Sus objetivos eran que la base de datos se transformara en la base de datos de la Internet y que se diseñara desde un principio para prestar servicios a aplicaciones web. Él mismo financió el proyecto por espacio de casi dos años y lo liberó como proyecto de código abierto bajo la licenciaGPL.
En febrero de 2008, pasó a ser un proyecto deApache Incubatory la licencia se cambió a laApache License.[4] Pocos meses más tarde, se graduó como proyectotop-level.[5] Así se llegó a la publicación de la primera versión estable en julio de 2010.[6]
A principios de 2012, Damien Katz abandonó el proyecto a fin de concentrarse enCouchbase.[7] El proyecto ha seguido adelante, liberando su versión 1.2, en abril de 2012.
Características principales
[editar]- Almacenamiento de documentos
- CouchDB almacena los datos como "documentos", esto es, uno o más pares campo/valor expresados enJSON.Los valores de los campos pueden ser datos simples como cadenas de caracteres, números o fechas. Pero también se pueden usarlistas ordenadasyvectores asociativos.Todos los documentos en una base de datos CouchDB tienen un identificador único y no requieren un esquema determinado.
- Semántica ACID
- CouchDB provee una semántica deatomicidad, consistencia, aislamiento y durabilidad.[8] Lo hace implementando una forma decontrol de concurrencia multiversión,lo que significa que CouchDB puede manejar un gran número de lectores y escritores en paralelo, sin que surjan conflictos.
- Vistas e índices Map/Reduce
- Los datos almacenados se estructuran por medio de vistas. En CouchDB, cada vista se construye por medio de una funciónJavaScriptque actúa como la mitad Map de una operación map/reduce. La función recibe un documento y lo transforma en un único valor, retornándolo. CouchDB puede indexar vistas y mantener actualizados esos índices a medida que se agregan, eliminan o actualizan documentos.
- Arquitectura distribuida con replicación
- CouchDB se diseñó con teniendo en mente la replicación bidireccional (o sincronización) y la operación off-line. Eso significa que múltiples réplicas pueden tener cada una sus propias copias de los mismos datos, modificarlas y luego sincronizar esos cambios en un momento posterior.
- Interfaz REST
- Todos los ítems tienen una URI única que queda expuesta vía HTTP.RESTusa losmétodos HTTPPOST, GET, PUT y DELETE para las cuatro operaciones básicasCRUD(Create, Read, Update, Delete) con todos los recursos.
- Consistencia Eventual
- CouchDB garantizaconsistencia eventualpara poder ofrecer tanto disponibilidad como tolerancia a las particiones.
- Hecha para operar offline
- CouchDB puede replicar datos a dispositivos (como teléfonos inteligentes) que pueden quedar offline y manejar automáticamente la sincronización de los datos cuando el dispositivo vuelve a estar en línea.
CouchDB también ofrece una interfaz de administración incorporada y accesible vía web llamada Futon.[9]
Casos de uso e instalaciones productivas
[editar]Las capacidades de replicación y sincronización de CouchDB hacen de ella un recurso ideal para ser usado en dispositivos móviles, donde la conectividad de red no está garantizada pero la aplicación debe seguir funcionando en modo offline.
CouchDB se presta para aplicaciones con un fondo de datos acumulativo con cambios ocasionales, sobre el que se ejecutan consultas predefinidas y donde el manejo de versiones resulta importante (CRM, sistemas CMS, por ejemplo). La replicación máster-máster es una característica especialmente interesante que facilita las instalaciones en múltiples sitios.[10]
Empresas que usan CouchDB
[editar]CouchDB se usa en determinadas aplicaciones para Android, tales como"SpreadLyrics",así como aplicaciones para Facebook como "Will you Kissme" o "Birthday Greeting Cards", o bien sitios web como"Friendpaste"[11]
Entre las empresas que han usado o actualmente usan CouchDB se pueden mencionar:
- Ubuntupara su servicio de sincronización "Ubuntu One"hasta noviembre de 2011[12] pero fue descontinuado por problemas de escalabilidad.[13]
- LaBBC,para sus plataformas de contenidos dinámicos[14]
- Credit Suisse,para usos internos en el departamento de commodities para su framework de mercados.[11]
- Meebo,para su plataforma social (web y aplicaciones) - Meebo fue adquirido por Google y cesó sus operaciones el 12 de julio de 2012.
Para una lista más completa de proyectos de software y sitios web que usan CouchDB, véase el artículo "CouchDB in the wild"[11] en el sitio oficial del proyecto.
Manipulación de datos: documentos y vistas
[editar]CouchDB maneja una colección de documentosJSON.Los documentos se organizan por medio de vistas. Las vistas se definen por medio defunciones de agregacióny los filtros se calculan en paralelo, al estilo deMapReduce.
Las vistas, en general, se almacenan en la base de datos y sus índices se actualizan continuamente. CouchDB soporta un sistema de vistas que emplea servidores de sockets externos y un protocolo basado en JSON.[15] Como consecuencia, se han desarrollado servidores de vistas en diversos lenguajes de programación (JavaScript es el lenguaje por defecto, pero también existen en PHP, Ruby, Python y Erlang).
Acceso a los datos vía HTTP
[editar]Las aplicaciones interactúan con CouchDB vía HTTP. A continuación hay algunos ejemplos concURL,un utilitario de línea de comando. En estos ejemplos se supone que CouchDB se está ejecutando enlocalhost(127.0.0.1) en el puerto 5984.
Acción | Petición | Respuesta |
---|---|---|
Acceder a la información del servidor | curlhttp://127.0.0.1:5984/
|
{
"couchdb":"Welcome",
"version":"1.1.0"
}
|
Crear una base de datos llamadawiki | curl-XPUThttp://127.0.0.1:5984/wiki
|
{"ok":true}
|
Intentar crear una segunda base de datos llamadawiki | curl-XPUThttp://127.0.0.1:5984/wiki
|
{
"error":"file_exists",
"reason":"The database could not be created, the file already exists."
}
|
Consultar información sobre la base de datoswiki | curlhttp://127.0.0.1:5984/wiki
|
{
"db_name":"wiki",
"doc_count":0,
"doc_del_count":0,
"update_seq":0,
"purge_seq":0,
"compact_running":false,
"disk_size":79,
"instance_start_time":"1272453873691070",
"disk_format_version":5
}
|
Eliminar la base de datoswiki | curl-XDELETEhttp://127.0.0.1:5984/wiki
|
{"ok":true}
|
Crear un documento, pidiéndole a CouchDB que suministre un identificador para el documento | curl-XPOST-H"Content-Type: application/json"--data\
'{ "text": "Wikipedia on CouchDB", "rating": 5 }'\
http://127.0.0.1:5984/wiki
|
{
"ok":true,
"id":"123BAC",
"rev":"946B7D1C"
}
|
Componentes de código abierto
[editar]CouchDB incluye diversos otros proyectos de código abierto que forman parte de su paquete por defecto.
Componente | Descripción | Licencia |
---|---|---|
SpiderMonkey | SpiderMonkey es un nombre clave del absolutamente primerintérprete de JavaScript,escrito porBrendan EichenNetscape Communications,posteriormente liberado como código abierto, que actualmente es mantenido por laFundación Mozilla. | Licencia tripleMPL/GPL/LGPL |
jQuery | jQuery es una biblioteca JavaScript liviana e independiente del navegador, que enfatiza la interacción entreJavaScriptyHTML. | Licencia dual:GPLyMIT |
ICU | International Components for Unicode (ICU) es un proyecto decódigo abiertoque provee bibliotecas maduras paraC/C++yJavade soporte paraUnicode,internacionalizacióny globalización de software. ICU es ampliamente portable a diversos sistemas operativos y entornos. | LicenciaMIT License |
OpenSSL | OpenSSL es una implementación encódigo abiertode los protocolosSSL y TLS.Labibliotecanuclear (escrita enlenguaje C) implementa las funcionescriptográficasbásicas y provee diversas funciones utilitarias. | Licencia semejante a la licenciaApache |
Erlang | Erlang es unlenguaje de programaciónconcurrenteyruntimede propósito general. El subconjunto secuencial de Erlang es unlenguaje funcional,conevaluación estricta,asignación únicaytipado dinámico. | LicenciaMPLmodificada |
Véase también
[editar]Portal:Software libre.Contenido relacionado conSoftware libre.
- Apache Cassandra
- Apache Software Foundation
- Sistemas gestores de bases de datos
- Lotus Notes
- MongoDB
Referencias
[editar]- ↑abApache Software Foundation.«Apache CouchDB».Consultado el 15 de abril de 2012.
- ↑Smith, Jason.«What is the CouchDB replication protocol? Is it like Git?».StackOverflow.Stack Exchange.Consultado el 14 de abril de 2012.
- ↑Exploring CouchDB,artículo de IBM Developer Works
- ↑Anuncio en la lista de correo de Apacheen mail-archives.apache.org
- ↑Re: Proposed Resolution: Establish CouchDB TLPen mail-archives.apache.org
- ↑"CouchDB NoSQL Database Ready for Production Use"Archivadoel 10 de septiembre de 2012 enWayback Machine., artículo aparecido en PC World de julio de 2010
- ↑Katz, Damien.«The future of CouchDB».Consultado el 15 de abril de 2012.
- ↑CoachDB, Technical OverviewArchivadoel 20 de octubre de 2011 enWayback Machine.
- ↑"Welcome to Futon"en "CouchDB The Definitive Guide"
- ↑Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase comparisonpor Kristóf Kovács
- ↑abc"CouchDB in the wild"Archivadoel 20 de julio de 2017 enWayback Machine.artículo del sitio oficial, con una lista de proyectos de software y sitios web que usan CouchDB
- ↑Email de Elliot Murphy (Canonical)Archivadoel 5 de mayo de 2011 enWayback Machine.a la lista CouchDB-Devel
- ↑EOL for couchdb and desktopcouch
- ↑CouchDB at the BBC as a fault tolerant, scalable, multi-data center key-value store
- ↑View Server DocumentationArchivadoel 20 de octubre de 2008 enWayback Machine.en wiki.apache.org
Bibliografía
[editar]- Anderson, J. Chris; Slater, Noah; Lehnardt, Jan (15 de noviembre de 2009),CouchDB: The Definitive Guide(1st edición),O'Reilly Media,p. 300,ISBN0-596-15816-5.
- Lennon, Joe (15 de diciembre de 2009),Beginning CouchDB(1st edición),Apress,p. 300,ISBN1-4302-7237-6,archivado desdeel originalel 5 de diciembre de 2010,consultado el 31 de julio de 2012.
- Holt, Bradley (7 de marzo de 2011),Writing and Querying MapReduce Views in CouchDB(1st edición),O'Reilly Media,p. 76,ISBN1-4493-0312-9.
- Holt, Bradley (11 de abril de 2011),Scaling CouchDB(1st edición),O'Reilly Media,p. 72,ISBN1-4493-0343-9.
- Brown, MC (31 de octubre de 2011),Getting Started with CouchDB(1st edición),O'Reilly Media,p. 50,ISBN1-4493-0755-8.
- Thompson, Mick (2 de agosto de 2011),Getting Started with GEO, CouchDB, and Node.js(1st edición),O'Reilly Media,p. 64,ISBN1-4493-0752-3.
Enlaces externos
[editar]- Sitio oficial
- CouchDB: La guía definitiva(en inglés)
- Artículos sobre CouchDB en NoSQLDatabases(en inglés)
- Noticias y artículos sobre CouchDB en myNoSQL(en inglés)
- Scaling CouchDB(en inglés)
- Referencia completa de la API HTTP(en inglés)
- Simple biblioteca PHP5 para comunicarse con CouchDB(en inglés)
- Cliente asincrónico CouchDB para Java(en inglés)
- 3 estudios de caso con CouchDB(en inglés)
- CouchDB para la agregación y el análisis de bitácoras de acceso(en inglés)
- Lehnardt, Jan (2008).«Couch DB at 10,000 feet».Erlang eXchange 2008.Archivado desdeel originalel 9 de noviembre de 2012.Consultado el 15 de abril de 2012.Texto «web» ignorado (ayuda)
- Lenhardt, Jan (2009).«CouchDB for Erlang Developers».Erlang Factory London 2009.Archivado desdeel originalel 19 de junio de 2011.Consultado el 15 de abril de 2012.
- Katz, Damien (enero de 2009).«CouchDB and Me».RubyFringe.InfoQ. Archivado desdeel originalel 27 de abril de 2011.Consultado el 15 de abril de 2012.