Una base de datos orientada a documentos , o almacén de documentos , es un programa informático y un sistema de almacenamiento de datos diseñado para almacenar, recuperar y gestionar información orientada a documentos, también conocida como datos semiestructurados . [1]
Las bases de datos orientadas a documentos son una de las principales categorías de bases de datos NoSQL , y la popularidad del término "base de datos orientada a documentos" ha crecido [2] con el uso del propio término NoSQL. Las bases de datos XML son una subclase de bases de datos orientadas a documentos que están optimizadas para trabajar con documentos XML . Las bases de datos de gráficos son similares, pero agregan otra capa, la relación , que les permite vincular documentos para un recorrido rápido.
Las bases de datos orientadas a documentos son inherentemente una subclase del almacén de valores clave , otro concepto de base de datos NoSQL. La diferencia [ contradictoria ] radica en la forma en que se procesan los datos; en un almacén de valores clave, los datos se consideran inherentemente opacos para la base de datos, mientras que un sistema orientado a documentos se basa en la estructura interna del documento para extraer metadatos que el motor de la base de datos utiliza para una mayor optimización. Aunque la diferencia suele ser insignificante debido a las herramientas de los sistemas, [a] conceptualmente el almacén de documentos está diseñado para ofrecer una experiencia más rica con técnicas de programación modernas.
Las bases de datos de documentos [b] contrastan fuertemente con la base de datos relacional tradicional (RDB). Las bases de datos relacionales generalmente almacenan datos en tablas separadas definidas por el programador, y un solo objeto puede distribuirse en varias tablas. Las bases de datos de documentos almacenan toda la información de un objeto determinado en una única instancia de la base de datos, y cada objeto almacenado puede ser diferente de los demás. Esto elimina la necesidad de realizar un mapeo relacional de objetos mientras se cargan datos en la base de datos.
El concepto central de una base de datos orientada a documentos es la noción de documento . Si bien cada implementación de base de datos orientada a documentos difiere en los detalles de esta definición, en general, todas asumen que los documentos encapsulan y codifican datos (o información) en algún formato o codificación estándar. Las codificaciones en uso incluyen XML , YAML , JSON , así como formas binarias como BSON .
Los documentos en un almacén de documentos son aproximadamente equivalentes al concepto de programación de un objeto. No están obligados a seguir un esquema estándar ni tendrán todas las mismas secciones, ranuras, piezas o claves. Generalmente, los programas que utilizan objetos tienen muchos tipos diferentes de objetos, y esos objetos suelen tener muchos campos opcionales. Cada objeto, incluso aquellos de la misma clase, puede verse muy diferente. Los almacenes de documentos son similares en que permiten diferentes tipos de documentos en un solo almacén, permiten que los campos dentro de ellos sean opcionales y, a menudo, permiten codificarlos utilizando diferentes sistemas de codificación. Por ejemplo, el siguiente es un documento codificado en JSON:
{ "nombre" : "Bob" , "apellido" : "Smith" , "DIRECCIÓN" : { "tipo" : "Inicio" , "calle1" : "5 Oak St." , "ciudad" : "Chicos" , "estado" : "AR" , "zip" : "32225" , "país" : "EE.UU." }, "hobby" : "navegar" , "teléfono" : { "tipo" : "Celda" , "número" : "(555)-123-4567" }}
Un segundo documento podría codificarse en XML como:
<contacto> <nombre> Bob </nombre> <apellido> Smith </apellido> <tipo de teléfono = "Celular" > (123) 555-0178 </teléfono> < tipo de teléfono= "Trabajo" > (890) 555- 0133 </phone> <address> <type> Home </type> <street1> 123 Back St. </street1> <city> Boys </city> <state> AR </state> <zip> 32225 </zip > <país> EE.UU. </ país> < /dirección> </contacto>
Estos dos documentos comparten algunos elementos estructurales entre sí, pero cada uno también tiene elementos únicos. La estructura, el texto y otros datos dentro del documento generalmente se denominan contenido del documento y se puede hacer referencia a ellos mediante métodos de recuperación o edición (ver más abajo). A diferencia de una base de datos relacional donde cada registro contiene los mismos campos, dejando vacíos los campos no utilizados; No hay 'campos' vacíos en ninguno de los documentos (registro) del ejemplo anterior. Este enfoque permite agregar nueva información a algunos registros sin necesidad de que todos los demás registros de la base de datos compartan la misma estructura.
Las bases de datos de documentos normalmente proporcionan metadatos adicionales que se asocian y almacenan junto con el contenido del documento. Esos metadatos pueden estar relacionados con las instalaciones que proporciona el almacén de datos para organizar documentos, brindar seguridad u otras características específicas de implementación.
Las operaciones principales que admite una base de datos orientada a documentos son similares a otras bases de datos y, aunque la terminología no está perfectamente estandarizada, la mayoría de los profesionales las reconocerán como CRUD :
Los documentos se abordan en la base de datos mediante una clave única que representa ese documento. Esta clave es un identificador simple (o ID), normalmente una cadena , un URI o una ruta . La clave se puede utilizar para recuperar el documento de la base de datos. Normalmente, la base de datos conserva un índice de la clave para acelerar la recuperación del documento y, en algunos casos, se requiere la clave para crear o insertar el documento en la base de datos.
Otra característica definitoria de una base de datos orientada a documentos es que, más allá de la simple búsqueda de clave a documento que se puede utilizar para recuperar un documento, la base de datos ofrece una API o lenguaje de consulta que permite al usuario recuperar documentos según el contenido (o metadatos). Por ejemplo, es posible que desee una consulta que recupere todos los documentos con un determinado campo establecido en un determinado valor. El conjunto de API de consulta o funciones de lenguaje de consulta disponibles, así como el rendimiento esperado de las consultas, varían significativamente de una implementación a otra. Del mismo modo, el conjunto específico de opciones y configuración de indexación disponibles varía mucho según la implementación.
Es aquí donde el almacén de documentos difiere más del almacén de valores clave. En teoría, los valores de un almacén de valores-clave son opacos para el almacén; son esencialmente cajas negras. Pueden ofrecer sistemas de búsqueda similares a los de un almacén de documentos, pero pueden tener menos conocimientos sobre la organización del contenido. Los almacenes de documentos utilizan los metadatos del documento para clasificar el contenido, lo que les permite, por ejemplo, entender que una serie de dígitos es un número de teléfono y otra es un código postal. Esto les permite buscar ese tipo de datos, por ejemplo, todos los números de teléfono que contengan 555, lo que ignoraría el código postal 55555.
Las bases de datos de documentos suelen proporcionar algún mecanismo para actualizar o editar el contenido (o metadatos) de un documento, ya sea permitiendo el reemplazo de todo el documento o de partes estructurales individuales del documento.
Las implementaciones de bases de datos de documentos ofrecen una variedad de formas de organizar documentos, incluidas nociones de
A veces, estas nociones organizativas varían en cuanto a su representación lógica o física (por ejemplo, en disco o en memoria).
Una base de datos orientada a documentos es un almacén de valores-clave especializado , que a su vez es otra categoría de base de datos NoSQL. En un almacén clave-valor simple, el contenido del documento es opaco. Una base de datos orientada a documentos proporciona API o un lenguaje de consulta/actualización que expone la capacidad de consultar o actualizar en función de la estructura interna del documento . Esta diferencia puede ser menor para los usuarios que no necesitan API de consulta, recuperación o edición más completas que normalmente proporcionan las bases de datos de documentos. Los almacenes modernos de valores-clave a menudo incluyen funciones para trabajar con metadatos, lo que desdibuja las líneas entre los almacenes de documentos.
Algunos sistemas de motores de búsqueda (también conocidos como recuperación de información ) como Apache Solr y Elasticsearch proporcionan suficientes operaciones centrales en documentos para ajustarse a la definición de una base de datos orientada a documentos.
En una base de datos relacional, los datos primero se clasifican en una serie de tipos predefinidos y se crean tablas para contener entradas o registros individuales de cada tipo. Las tablas definen los datos dentro de los campos de cada registro , lo que significa que cada registro de la tabla tiene la misma forma general. El administrador también define las relaciones entre las tablas, selecciona ciertos campos que cree que se usarán con mayor frecuencia para realizar búsquedas y define índices en ellos. Un concepto clave en el diseño relacional es que cualquier dato que pueda repetirse normalmente se coloca en su propia tabla, y si estas instancias están relacionadas entre sí, se selecciona una columna para agruparlas, la clave externa . Este diseño se conoce como normalización de bases de datos . [3]
Por ejemplo, una aplicación de libreta de direcciones generalmente necesitará almacenar el nombre del contacto, una imagen opcional, uno o más números de teléfono, una o más direcciones postales y una o más direcciones de correo electrónico. En una base de datos relacional canónica, se crearían tablas para cada una de estas filas con campos predefinidos para cada bit de datos: la tabla CONTACTO podría incluir las columnas FIRST_NAME, LAST_NAME e IMAGE, mientras que la tabla PHONE_NUMBER podría incluir COUNTRY_CODE, AREA_CODE, PHONE_NUMBER y TYPE ( hogar, trabajo, etc.). La tabla PHONE_NUMBER también contiene una columna de clave externa, "CONTACT_ID", que contiene el número de identificación único asignado al contacto cuando se creó. Para recrear el contacto original, el motor de la base de datos utiliza claves externas para buscar elementos relacionados en el grupo de tablas y reconstruir los datos originales.
Por el contrario, en una base de datos orientada a documentos puede que no exista una estructura interna que se corresponda directamente con el concepto de tabla, y los campos y relaciones generalmente no existen como conceptos predefinidos. En cambio, todos los datos de un objeto se colocan en un solo documento y se almacenan en la base de datos como una sola entrada. En el ejemplo de la libreta de direcciones, el documento contendría el nombre, la imagen y cualquier información del contacto, todo en un solo registro. Se accede a esa entrada a través de su clave, que permite a la base de datos recuperar y devolver el documento a la aplicación. No se necesita trabajo adicional para recuperar los datos relacionados; todo esto se devuelve en un solo objeto.
Una diferencia clave entre los modelos relacional y orientado a documentos es que los formatos de datos no están predefinidos en el caso del documento. En la mayoría de los casos, cualquier tipo de documento se puede almacenar en cualquier base de datos y esos documentos pueden cambiar de tipo y forma en cualquier momento. Si se desea agregar un COUNTRY_FLAG a un CONTACTO, este campo se puede agregar a nuevos documentos a medida que se insertan, esto no tendrá ningún efecto en la base de datos ni en los documentos existentes ya almacenados. Para ayudar a recuperar información de la base de datos, los sistemas orientados a documentos generalmente permiten al administrador proporcionar sugerencias a la base de datos para buscar ciertos tipos de información. Estos funcionan de manera similar a los índices en el caso relacional. La mayoría también ofrece la posibilidad de agregar metadatos adicionales fuera del contenido del documento en sí, por ejemplo, etiquetar entradas como parte de una libreta de direcciones, lo que permite al programador recuperar tipos de información relacionados, como "todas las entradas de la libreta de direcciones". . Esto proporciona una funcionalidad similar a una tabla, pero separa el concepto (categorías de datos) de su implementación física (tablas).
En el modelo relacional normalizado clásico, los objetos de la base de datos se representan como filas separadas de datos sin ninguna estructura inherente más allá de la que se les proporciona a medida que se recuperan. Esto genera problemas al intentar traducir objetos de programación hacia y desde sus filas de base de datos asociadas, un problema conocido como falta de coincidencia de impedancia relacional de objetos . [4] Los almacenes de documentos se acercan más de cerca o, en algunos casos, directamente, asignan objetos de programación al almacén. Suelen comercializarse utilizando el término NoSQL .
La mayoría de las bases de datos XML son bases de datos orientadas a documentos.
Las bases de datos orientadas a documentos, o almacenes de documentos, son bases de datos NoSQL que almacenan datos en forma de documentos. Los almacenes de documentos son un tipo de almacén clave-valor: cada documento tiene un identificador único (su clave) y el documento en sí sirve como valor.