Apache CouchDB - Apache CouchDB

Apache CouchDB
Apache CouchDB logo.svg
Apache CouchDB v2.1.1 Fauxton Console.png
Interfaz de administración Fauxton de CouchDB, base de datos de usuarios
Autor (es) original (es) Damien Katz, Jan Lehnardt, Naomi Slater, Christopher Lenz, J. Chris Anderson, Paul Davis, Adam Kocoloski, Jason Davies, Benoît Chesneau, Filipe Manana, Robert Newson
Desarrollador (es) Fundación de software Apache
Versión inicial 2005 ; Hace 16 años  ( 2005 )
Lanzamiento estable
3.1.1  Edita esto en Wikidata / 17 de septiembre de 2020 ; hace 8 meses  ( 17 de septiembre de 2020 )
Repositorio Edita esto en Wikidata
Escrito en Erlang , JavaScript , C , C ++
Sistema operativo Multiplataforma
Tipo Base de datos orientada a documentos
Licencia Licencia Apache 2.0
Sitio web couchdb .apache .org  Edita esto en Wikidata

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 .

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 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 múltiples 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 haber ocurrido mientras las bases de datos estaban desconectadas.

CouchDB implementa una forma de control de concurrencia de múltiples versiones (MVCC) para que no bloquee el archivo de la base de datos durante las escrituras. Los conflictos se dejan a la aplicación para que los resuelva. La resolución de un conflicto generalmente implica primero fusionar datos en uno de los documentos y luego eliminar el obsoleto.

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 construir 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 clúster de hardware básico poco confiable . El proyecto CouchDB fue creado en abril de 2005 por Damien Katz, un ex desarrollador de Lotus Notes en IBM . Él autofinancia el proyecto durante casi dos años y lo lanzó 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 . Unos meses después, pasó a ser un proyecto de primer nivel. Esto llevó al lanzamiento de la primera versión estable en julio de 2010.

A principios de 2012, Katz dejó el proyecto para centrarse en Couchbase Server .

Desde la partida de Katz, el proyecto Apache CouchDB ha continuado, la liberación de 1,2 en abril de 2012 y 1.3 en abril de 2013. En julio de 2013, la comunidad CouchDB fusionó el código base para BigCouch , Cloudant versión agrupada 's de CouchDB, en el proyecto Apache. El marco de agrupación en clústeres de BigCouch se incluye en la versión actual de Apache CouchDB.

La agrupación en clústeres nativa es compatible con la versión 2.0.0. Y el nuevo Mango Query Server proporciona una forma sencilla basada en JSON de realizar consultas CouchDB sin JavaScript o MapReduce.

Principales características

Semántica ACID
CouchDB proporciona semántica ACID . Lo hace implementando una forma de control de simultaneidad de múltiples versiones , lo que significa que CouchDB puede manejar un gran volumen de lectores y escritores simultáneos sin conflictos.
Construido para 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 vuelve a estar en línea.
Arquitectura distribuida con replicación
CouchDB se diseñó teniendo en cuenta la replicación (o sincronización) bidireccional y el funcionamiento fuera de línea. Eso 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 documento
CouchDB almacena datos como "documentos", como uno o más pares de campo / valor expresados ​​como JSON . Los valores de campo pueden ser cosas 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 una identificación única y no hay un esquema de documento requerido.
Coherencia eventual
CouchDB garantiza la consistencia eventual para poder proporcionar disponibilidad y tolerancia de partición.
Mapa / Reducir vistas e índices
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 mapa / reducción. La función toma un documento y lo transforma en un valor único 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 un URI único que se expone a través de HTTP. Utiliza los métodos HTTP POST, GET, PUT y DELETE para las cuatro operaciones básicas CRUD (Crear, Leer, Actualizar, Eliminar) en todos los recursos.

CouchDB también ofrece una interfaz de administración incorporada a la que se puede acceder a través de la Web llamada Futon.

Casos de uso e implementaciones de producción

Las capacidades de replicación y sincronización de CouchDB lo hacen ideal para usarlo 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 muy adecuado para aplicaciones con acumulación de datos que cambian ocasionalmente, en las que se ejecutarán consultas predefinidas y en las que el control de versiones es importante (CRM, sistemas CMS, por ejemplo). La replicación maestro-maestro es una característica especialmente interesante, que permite implementaciones sencillas en múltiples sitios.

Usuarios

Los usuarios de CouchDB incluyen:

  • Amadeus IT Group , para algunos de sus sistemas back-end.
  • Credit Suisse , para uso interno en el departamento de productos básicos para su marco de mercado.
  • Meebo , por su plataforma social (Web y aplicaciones). Meebo fue adquirida por Google y la mayoría de los productos se cerraron el 12 de julio de 2012.
  • npm , para su registro de paquetes.
  • Sophos , para algunos de sus sistemas de back-end.
  • La BBC , por sus plataformas de contenido dinámico.
  • Canonical comenzó a usarlo en 2009 para su servicio de sincronización "Ubuntu One", pero dejó de usarlo en noviembre de 2011.
  • CANAL + para plataforma internacional bajo demanda en CANAL + Overseas.
  • Protogrid , como back-end de almacenamiento para su marco de desarrollo rápido de aplicaciones

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, al igual que MapReduce .

Las vistas generalmente se almacenan en la base de datos y sus índices se actualizan continuamente. CouchDB admite un sistema de visualización que utiliza servidores de socket externos y un protocolo basado en JSON. Como consecuencia, los servidores de vistas se han desarrollado en una variedad de lenguajes (JavaScript es el predeterminado, pero también hay PHP, Ruby, Python y Erlang).

Acceder a los datos a través de HTTP

Las aplicaciones interactúan con CouchDB a través de HTTP. A continuación , se muestran algunos ejemplos que utilizan cURL , una utilidad de línea de comandos. Estos ejemplos asumen que CouchDB se está ejecutando en localhost (127.0.0.1) en el puerto 5984.

Acción Pedido Respuesta
Accediendo a la información del servidor
curl http://127.0.0.1:5984/
{
  "couchdb": "Welcome",
  "version":"1.1.0"
}
Creando una base de datos llamada wiki
curl -X PUT http://127.0.0.1:5984/wiki
{"ok": true}
Intentando 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."
}
Recuperar 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 wiki de la base de datos
curl -X DELETE http://127.0.0.1:5984/wiki
{"ok": true}
Cree un documento, solicitando a CouchDB que proporcione una identificación de 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"
}

PouchDB

El PouchDB es una implementación de Javascript CouchDB que es API compatible con él. Por lo tanto, puede usar CouchDB en el lado del servidor y Pouch en la propia aplicación y, una vez que la aplicación esté en línea, puede sincronizar ambos. Esto es especialmente útil para aplicaciones web progresivas que se basan en un primer enfoque fuera de línea.

Componentes de código abierto

CouchDB incluye varios otros proyectos de código abierto como parte de su paquete predeterminado.

Componente Descripción Licencia
Erlang Erlang es un lenguaje de programación concurrente de propósito general y un sistema de tiempo de ejecución . El subconjunto secuencial de Erlang es un lenguaje funcional con evaluación estricta , asignación única y escritura dinámica. Apache 2.0 (versión 18.0 y posterior)
Licencia pública de Erlang (versiones anteriores)
UCI International Components for Unicode (ICU) es un proyecto de código abierto de bibliotecas maduras de C / C ++ y Java para soporte Unicode , internacionalización de software y globalización de software. Licencia Unicode
jQuery jQuery es una biblioteca JavaScript liviana entre navegadores que enfatiza la interacción entre JavaScript y HTML Licencia MIT
OpenSSL OpenSSL es una implementación de código abierto de los protocolos SSL y TLS . La biblioteca central (escrita en el lenguaje de programación C ) implementa las funciones criptográficas básicas y proporciona varias funciones de utilidad Apache 1.0 y la licencia BSD de cuatro cláusulas
Mono araña SpiderMonkey es un motor JavaScript de alto rendimiento mantenido por Mozilla Foundation . Contiene un intérprete , un compilador JIT y un recolector de basura. MPL 2.0

Ver también

Referencias

Bibliografía

enlaces externos