Loading AI tools
De Wikipedia, la enciclopedia libre
Apache CouchDB, comúnmente llamada CouchDB, es un gestor de bases de datos de có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 datos NoSQL que emplea JSON para almacenar los datos, JavaScript como lenguaje de consulta por medio de MapReduce y HTTP como API.[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 proyecto Apache en 2008.
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 License 2.0 | |
Información técnica | ||
Programado en | Erlang | |
Versiones | ||
Última versión estable | 3.3.1 (info) ( 11.01.2023) | |
Enlaces | ||
A diferencia de una base 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 de control 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ántica ACID con consistencia 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.
CouchDB (Couch es un acrónimo para cluster of unreliable commodity hardware)[3] es un proyecto creado en abril de 2005 por Damien Katz, ex desarrollador de Lotus Notes en IBM. 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 licencia GPL.
En febrero de 2008, pasó a ser un proyecto de Apache Incubator y la licencia se cambió a la Apache License.[4] Pocos meses más tarde, se graduó como proyecto top-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 en Couchbase.[7] El proyecto ha seguido adelante, liberando su versión 1.2, en abril de 2012.
CouchDB también ofrece una interfaz de administración incorporada y accesible vía web llamada Futon.[9]
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]
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:
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.
CouchDB maneja una colección de documentos JSON. Los documentos se organizan por medio de vistas. Las vistas se definen por medio de funciones de agregación y los filtros se calculan en paralelo, al estilo de MapReduce.
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).
Las aplicaciones interactúan con CouchDB vía HTTP. A continuación hay algunos ejemplos con cURL, un utilitario de línea de comando. En estos ejemplos se supone que CouchDB se está ejecutando en localhost (127.0.0.1) en el puerto 5984.
Acción | Petición | Respuesta |
---|---|---|
Acceder a la información del servidor | curl http://127.0.0.1:5984/
|
{
"couchdb": "Welcome",
"version":"1.1.0"
}
|
Crear una base de datos llamada wiki | curl -X PUT http://127.0.0.1:5984/wiki
|
{"ok": true}
|
Intentar crear una segunda base de datos llamada wiki | curl -X PUT http://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 datos wiki | curl http://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 datos wiki | curl -X DELETE http://127.0.0.1:5984/wiki
|
{"ok": true}
|
Crear un documento, pidiéndole a CouchDB que suministre un identificador para el documento | curl -X POST -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"
}
|
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 primer intérprete de JavaScript, escrito por Brendan Eich en Netscape Communications, posteriormente liberado como código abierto, que actualmente es mantenido por la Fundación Mozilla. | Licencia triple MPL/GPL/LGPL |
jQuery | jQuery es una biblioteca JavaScript liviana e independiente del navegador, que enfatiza la interacción entre JavaScript y HTML. | Licencia dual: GPL y MIT |
ICU | International Components for Unicode (ICU) es un proyecto de código abierto que provee bibliotecas maduras para C/C++ y Java de soporte para Unicode, internacionalización y globalización de software. ICU es ampliamente portable a diversos sistemas operativos y entornos. | Licencia MIT License |
OpenSSL | OpenSSL es una implementación en código abierto de los protocolos SSL y TLS. La biblioteca nuclear (escrita en lenguaje C) implementa las funciones criptográficas básicas y provee diversas funciones utilitarias. | Licencia semejante a la licencia Apache |
Erlang | Erlang es un lenguaje de programación concurrente y runtime de propósito general. El subconjunto secuencial de Erlang es un lenguaje funcional, con evaluación estricta, asignación única y tipado dinámico. | Licencia MPL modificada |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.