¿Qué es DocumentDB y para qué sirve?
DocumentDb es una base de datos basado en documentos que se ofrece como servicio en Azure. Eso significa que como se ofrece como servicio, solamente hay que dar de alta una instancia de DocumentDb y Microsoft se encarga del mantenimiento, escalabilidad y fiabilidad del servicio.
Pero antes de continuar explicando características concretas de DocumentDb, hay que contestar a esta pregunta.
¿Qué es una base de datos basada en documento?
Es una base de datos no relacional (NoSQL) que almacenan los datos en documentos basados en JSON. Es decir, que dentro de DocumentDb hay una serie de colecciones de objetos donde se utiliza el formato JSON para almacenar objetos.
JSON, que son las sigas de JavaScript Object Notation y es un estándar abierto que permite guardar un grafo de objetos en un formato que pueda ser leído por seres humanos. Está muy relacionado con JavaScript porque todos los motores de JavaScript lo soportan, pero no solo se puede usar dentro de JavaScript.
En DocumentDb es el formato predeterminado con el que se guardan los objetos que se les envía a la base de datos. Eso significa que DocumentDb se encarga de almacenar esos documentos e indexar toda la información relativa al documento haciendo posible que después se pueda buscar por cualquiera de los campos que forma un documento.
Al ser un servicio basado en una tecnología NoSQL eso significa que el esquema de tus objetos puede evolucionar a lo largo del tiempo sin problemas de retro compatibilidad con el propio motor o con las aplicaciones que se desarrollen utilizando DocumentDb.
¿No existía un servicio similar en Azure llamado Azure Storage Tables?
Efectivamente, antes de la creación de DocumentDb, Azure ofrecía un servicio de NoSQL que se llama Azure Storage Tables. Este servicio es también un servicio de almacenamiento NoSQL pero no es una base de datos basada en documento. En Storage Tables los datos se almacenan en tablas y dentro de las tablas se tiene una colección de entidades. Estas entidades son una colección de hasta un máximo de 255 pares de nombre valor, en donde en estos pares se almacena la información que el usuario desea. Así que la principal diferencia entre estos dos servicio es que, mientras DocumentDb es un servicio basado en documentos, Azure Storage Tables, es un servicio basado en pares de nombre valor.
Cómo empezar a trabajar con DocumentDb
Una de las primeras cosas que sorprende de DocumentDb es que no hay necesidad de consumir un objeto conexión, sino que, directamente se puede conectar al servicio. Todo ello es posible gracias a que la principal interfaz para trabajar con este servicio es una API RESTful.
Lo primero que hay que hacer para provisionar una nueva base de datos de DocumentDb desde el portal nuevo de Azure.
Una vez que se ha provisionado el servicio, en la sección de Keys del mismo se puede acceder a la información de conexión que se usará en el futuro para poder conectarse a la instancia de DocumentDb.
Antes de empezar a insertar documentos dentro de alguna de las colecciones que se pueden crear, es importante revisar el modelo de recursos que DocumentDb utiliza para que los desarrollares se familiaricen y pueda utilizar este servicio.
Modelo de recursos y conceptos
Este diagrama representa el modelo de recurso que DocumentDb expone para utilizar los recurso de la base de datos.
El nivel más alto de todos está la cuenta de DocumentDb de la que existen dos nodos hijo que representan, por un lado, la colección de base de datos y por otro lado /media que representa el listado de ficheros adjuntos al servicio.
Base de datos
Las base de datos son contenedores lógicos con tienen un listado de colecciones de documentos y la configuración de los usuarios que tienen acceso al servicio y sus roles.
Dentro de una cuenta de DocumentDb se pueden crear tantas bases de datos como uno quiera. Hay que tener en cuenta que solo se podrán hacer transacciones de documentos o colecciones que estén dentro de la misma base de datos. Una diferencia fundamental con respecto a las bases de datos tradicionales es no solo se utiliza un único servidor para almacenar la base de datos, sino que esta está distribuida a través de diferentes servidores. El tamaño puede ir desde kilobytes hasta terabytes.
Colecciones
Las colecciones son el contenedor donde los documentos son almacenados. Al ser DocumentDb una base de datos sin esquema, eso significa que esos documentos no tienen ninguna restricción en cuanto al formato o campos que pueden contener. En el momento que se inserta un nuevo documento en alguna colección, DocumentDb indexa toda la información relativa a ese documento. Eso permite tener un índice, optimizado para escritora, sin bloqueos y estructurado para acceder a la información de la colección.
Además se puede configurar una política para definir como se quiere tratar el indexado automático de los documentos.
- Indexado automático de todos los elementos de una colección.
- Exclusión selectiva en base a un patrón de algunos documentos.
- Se puede elegir entre indexación síncrona (consistente) o asíncrona (perezosa) de los elementos.
Procedimientos almacenados, disparadores y funciones definidas por el usuario
Otra de las características de la colecciones es la definir procedimientos que se pueden utilizar durante las operaciones de consulta o actualizado. Una característica muy interesante de los procedimientos almacenados, es que se pueden definir en JavaScript y ese código se ejecutara directamente en el servidor de DocumentDb.
var storedProc = {
id: "validateAndCreate",
body: function (documentToCreate) {
documentToCreate.id = documentToCreate.id.toUpperCase();
var collectionManager = getContext().getCollection();
collectionManager.createDocument(collectionManager.getSelfLink(),
documentToCreate,
function(err, documentCreated) {
if(err) throw new Error('Error while creating document: ' + err.message;
getContext().getResponse().setBody('success - created ' +
documentCreated.name);
});
}
};
client.createStoredProcedureAsync(collection._self, storedProc)
.then(function (createdStoredProcedure) {
console.log("Successfully created stored procedure");
}, function(error) {
console.log("Error");
});
En este ejemplo se registra una nuevo procedimiento almacenado y cuerpo del procedimiento es una función en JavaScript.
Los disparadores o triggers sirve para poder hacer intercepciones de ciertas operaciones que se produzcan dentro de la base de datos y ejecutar una pequeña pieza de código.
Por último las funciones definidas por el usuario también se pueden definir en JavaScript y se puede utilizar como parte de la ejecución.
Adjuntos y multimedia
Otra característica muy interesante de DocumentDb es la gestión de los ficheros adjuntos. La manera en que se gestiona es por documento, en la que hay un recurso nuevo llamado attachment donde se almacena un objeto que representa el adjunto a ese fichero.
SDKs y modelos de desarrollo
Al ser DocumentDb un servicio basado en una interfaz RESTful la manera en la que se accede al servicio es a través de peticiones http. Hay de todos modos SDKs diposnibles para los siguientes leguajes:
- .NET
- JavaScript
- Node.js
- Python
Además DocumentDb expone un método de conexión directa a la base de datos que permite utilizar TCP como canal de transporte, pero ahora mismo solo está disponible para .NET.
Si quieres aprender más sobre DocumentDb en la documentación oficial de Azure está toda la información que necesitas.
Luis Guerrero.
Technical Evangelist Azure.
Comments
- Anonymous
June 30, 2016
Como es la seguridad en DocumentDB comparado con otras bases de datos NoSQL como MongoDB?