Una base de datos documental está constituida por un conjunto de programas que almacenan, recuperan y gestionan datos de documentos o datos de algún modo estructurados. Este tipo de bases de datos constituyen una de las principales subcategorías dentro de las denominadas bases de datos NoSQL. A diferencia de las bases de datos relacionales, estas bases de datos están diseñadas alrededor de una noción abstracta de "Documento".
El concepto central de una base de datos orientada a documentos es el concepto mismo de Documento. Mientras cada implementación de base de datos orientada a documentos difiere en los detalles, en general todas ellas comparten el principio de que los documentos encapsulan y codifican datos o información siguiendo algún formato estándar. Entre las codificaciones usadas en la actualidad se encuentran XML, YAML y JSON, así como formatos binarios como BSON.
Los documentos dentro de una base de datos orientada a documentos son similar, de algún modo, a registros, tuplas o filas en una base de datos relacional pero menos rígidos. No se les requiere ajustarse a un esquema estándar ni tener todos las mismas secciones, atributos, claves o cosas por el estilo. Por ejemplo un documento puede ser:
{ Nombre:Miguel Ignacio Barboteo Piñero Dirección:Málaga Profesión:"Bancario" }
Mientras que otro:
{ Nombre:Miguel Ignacio Barboteo Piñero Dirección:Málaga Hijos:[ {Nombre:"Iñaki"}, {Nombre:"Nando"}, {Nombre:"Maria"}, Esposa:[ {Nombre:"Maria Begoña"},
Estos documentos contienen alguna información similar y otra diferente. Al contrario que una base de datos relacional en la que todos los registros deben tener los mismos atributos -que pueden quedar vacíos- , en un documento no quedan 'campos' vacíos. De este modo es posible añadir nueva información sin necesidad de establecer qué información queda excluida.
Se direccionan los documentos mediante una clave única que identifica el documento. Generalmente esta clave se compone de una simple cadena. En algunos casos puede tratarse de un URI o un camino, que sirve para rescatar el documento de la base de datos. Generalmente la base de datos mantiene un índice de dichas claves, por lo que la recuperación es rápida.
Otra de las características que definen una base de datos orientada a documentos es que, más allá de la sencilla correspondencia clave-documento (o clave-valor) usada para recuperar un documento, la base de datos ofrece un API o un lenguaje de interrogación para recuperar documentos según su contenido. Por ejemplo, para preguntar por todos los documentos que tienen un valor dado en un campo. El conjunto de características del API o del lenguaje de interrogación, así como lo que se obtiene, varía significativamente entre distintas implementaciones.
Las distintas implementaciones de bases de datos documentales que podemos organizan los documentos de muy distintas formas, entre las que se encuentran:
Nombre | Editor | Licencia | Lenguaje | Notas | API RESTful |
---|---|---|---|---|---|
BaseX | BaseX Team | BSD | Java, XQuery | Soporta XML, JSON y formatos binarios; arquitectura cliente-servidor; búsquedas de texto completo concurrentes. | Sí |
ArangoDB | triAGENS | Apache 2 | C, C++ & Javascript | Almacén de documentos y presentación gráfica. | Sí[1] |
Clusterpoint | Clusterpoint Ltd. | Libre/Comercial[2] | C++ | Base de datos documental sin esquema, búsqueda de texto completo, ordenación por relevancia y funcionamiento en Cluster. | Sí |
Couchbase Server | Couchbase, Inc. | Apache | Erlang y C | Base de datos NoSQL distribuida documental. | Sí[3] |
CouchDB | Apache Software Foundation | Apache | Erlang | JSON sobre REST/HTTP con propiedades ACID mediante multiversion concurrency control limitadas. Usa map y reduce para las vistas e interrogaciones.[4] | Sí[5] |
eXist | eXist, [2] | GPL | XQuery, Java | XML sobre REST/HTTP, WebDAV, búsqueda de texto completo con Lucene, validación, versionado, clustering, triggers, reescritura de URLs, colecciones, ACLs, XQuery Update | Sí[6] |
FleetDB | FleetDB | MIT | Clojure | Una base de datos basada en JSON sin esquema, optimizada para desarrollo Agile. | (desconocido) |
Jackrabbit | Apache Software Foundation | Apache | Java | (desconocido) | |
Lotus Notes | IBM | Proprietaria | LotusScript, Java, Lotus @Formula | (desconocido) | |
MarkLogic | MarkLogic Corporation | Libre o comercial | REST, Java, XQuery, XSLT, C++ | Base de datos documental distribuida con multiversion concurrency control, búsqueda de texto completo y transacciones ACID. | Sí |
MongoDB | MongoDB, Inc | GNU AGPL v3.0[7] | C++ | Base de datos documental optimizada para contenido muy transitorio | Opcional[8] |
MUMPS[9] | Proprietaria y GNU Affero GPL[10] | MUMPS | Muy usada en aplicaciones médicas. | (desconocido) | |
OrientDB | Orient Technologies Archivado el 20 de abril de 2012 en Wayback Machine. | Apache | Java | JSON sobre HTTP | Sí |
Redis | BSD License | ANSI C | Almacén clave-valor con soporte de listas y conjuntos | (desconocido) | |
Rocket U2 | Rocket Software | Proprietaria | UniData, UniVerse | Sí (Beta) | |
RavenDB | Hibernating Rhinos | GNU AGPL v3.0[11][12] o Commercial | C# | JSON sobre HTTP | Sí |
Knosys | Micronet, S.A. | Propietaria | C++, Java, C# | Base de datos documental con control de flujos de trabajo | Si |
La mayoría de las bases de datos XML están orientadas a documentos.