Una de las cosas que puedo empezar a aplaudir de este servicio es el nombre asignado como “Azure Cosmos DB”, un servicio de bases de datos distribuidas globalmente en la nube de Microsoft. Más abajo mencionaré cuáles son sus capacidades técnicas que bien hacen referencia a ese nombre tan fuera de órbita.

Azure Cosmos DB viene a reemplazar y expandir un servicio ya existente llamado Document DB, ese servicio de bases de datos basado en documentos con respuestas en formato JSON de texto plano.

¿Qué hace diferente a Azure Cosmos DB de otras bases de datos?

Distribución global: La información pueden ser distribuida dentro las regiones, es decir, los centros de datos existentes de Microsoft a través del mundo.

Modelos de API: Existe una variedad de APIS con las cuales diferentes clientes pueden realizar conexiones hacia los datos almacenados en Azure Cosmos DB, hasta el momento son:

  • API de Document DB.
  • API de Mongo DB.
  • API de Azure Table Storage.
  • API de Microsoft Graph.
  • API de Cassandra.

Escalación a petición: Con una flexibilidad impresionante, capacidad de almacenamiento y rendimiento de bases de datos se regulan por tiempo determinado a grado de segundos.

Adaptadas para aplicaciones de misión crítica: Las bases de datos Azure Cosmos DB aseguran latencias muy bajas cuando suceden transacciones, lecturas de 10 ms y menores.

Disponibilidad: Como casi cualquier otro servicio proporcionado por Microsoft Azure, ofrece un 99.99% de SLA durante todo el año.

Niveles de consistencia: Un nivel de consistencia se refiere a un escenario de procesamiento de datos junto con la latencia que este mismo implica. Los niveles de consistencia soportados por Azure Cosmos DB son los siguientes:

  • Fuerte (Strong)
    • Lecturas con la versión más reciente de un elemento.
    • Escrituras solo visibles cuando existe certeza de que los datos están en todas las réplicas.
    • Las lecturas aseguran que serán las últimas escrituras confirmadas.
    • Ver mas
  • Obsolescencia limitada (Bounded Staleness)
    • Las lecturas pueden ir con retraso respecto a las escrituras.
    • Ver mas
  • Sesión (Session)
    • Sesiones por cliente.
    • Garantiza lecturas y escrituras individuales.
    • Ver mas
  • Prefijo consistente (Consistent Prefix)
    • Garantiza que las lecturas nunca verán escrituras desordenadas.
    • Ver mas
  • Eventual (Eventual)
    • Es el nivel más débil, se pueden obtener valores más antiguos que los antes vistos.
    • Ofrece la menor latencia de todos los niveles de consistencia tanto lecturas como escrituras.
    • Ver mas

Inexistencia de esquemas: En el motor de base de datos de Azure Cosmos DB no existen los esquemas, aunque aseguran una rapidez notable en las consultas.

¿En qué parte del Cosmos están repartidas las bases de datos Azure Cosmos DB?

Esa es una de las mejores preguntas que se le pueden hacer este servicio, abajo detallaré algunos aspectos únicos que las hacen globales.

Cada base de datos creada en Azure Cosmos DB se puede visualizar como una colección de información particionada y distribuida dentro de las regiones de Microsoft Azure a través del mundo.

La información es distribuida en dos dimensiones:

  • Distribución local: Dentro de una región determinada, todos los recursos se dividen horizontalmente en particiones.
  • Distribución global: La partición de la región, se replican en regiones con ubicación geográfica distinta.

Abajo puedes ver el mapa actual de las regiones existentes que tiene Microsoft.

Cada año estas regiones crecen debido a la expansión de Microsoft Azure, para estar al día con estas regiones podemos visitar Regiones de Microsoft.

Una base de datos Azure Cosmos DB puede estar asociada a una o más regiones de Microsoft Azure, eso es lo que las hace globales. Las regiones se asocian de manera gráfica desde el portal de Azure con simples clics en cada país que pueda ser admitido.

Una característica interesante es la posibilidad de poder especificar en qué regiones existirá modo solo lectura y en cuales solo escritura, las lecturas se encaminan hacia la región más cercana.

Modelo de datos de Azure Cosmos DB

Una de las mejores capacidades de Azure Cosmos DB es la posibilidad de “proyectar datos”, y es que al no mantener un esquema, no existen demasiadas restricciones para guardar información.

Azure Cosmos DB soporta nativamente múltiples modelos de datos. El núcleo del motor de base de datos es algo conocido como “Atom Record Sequence” abreviado como ARS. Un átomo (en el sentido de información y no de partículas) consiste en un pequeño conjunto de tipos primitivos como pueden ser: string, bool, int, double, etc.

El motor de base de datos de Azure Cosmos DB es capaz de hacer una eficiente conversión y proyección de modelos de datos sobre ARS. El núcleo es accesible al nivel de que puede ser accedido por tipos dinámicos de varios lenguajes de programación expuestos en formato JSON o similares.

Hablando del diseño del motor de base de datos de Azure Cosmos DB, soporta como bien se comentó anteriormente en el artículo APIS de: Document DB, Mongo DB, Azure Table Storage y Gremlin para vectores.

Dependiendo la API se hace el formato

Los desarrolladores pueden empezar a usar Azure Cosmos DB provisionando una cuenta de base de datos con la suscripción de Azure. Una cuenta de base de datos puede gestionar una o varias bases de datos. Las bases de datos Azure Cosmos DB manejan usuarios, permisos y contenedores. Un contenedor es independiente de esquema y tiene asociado procedimientos almacenados, disparadores y funciones definidas de usuario (componentes muy conocidos en SQL Server).

La verdad es que al principio no lograba ver como resultaba el modelo de datos de Azure Cosmos DB, pero después de analizarlo con más detenimiento y en colaboración con el grupo de producto de Microsoft, simplifique todo en un pequeño mapa conceptual, el cual es el siguiente:

Y las palabras mágicas son:

“Dependiendo la API, el contenedor y elementos asociados serán proyectados en tipos especializados”

Aspecto clave:

  • Los contenedores son elementos lógicos (tienen identificadores únicos) de particiones físicas (almacenamiento en servidores), mismos que pueden estar en distintas regiones (centros de datos).
  • Cada documento o recurso asociado a una API tiene una partición clave “Partition Key” y una partición física (Physical Partition) que los agrupa dentro de una misma ubicación lógica.

Aquí una pequeña entrevista con el Dr. Leslie Lamport – Premio Turing, investigador y colaborador de Azure Cosmos DB.

Y bien, después de todos estos conceptos y teoría veamos de manera práctica como se puede trabajar con Azure Cosmos DB desde el portal de Microsoft Azure:

Azure Cosmos DB

Este código te ayudará a administrar operaciones con Azure Cosmos DB usando C# como lenguaje de programación y Visual Studio.

Acerca del Proyecto

Azure Cosmos DB es una base de datos global donde podemos escalar por todo el mundo. El proyecto te mostrará como administrar datos para Azure Cosmos DB.

Tecnología Utilizada

  • Visual Studio 2015.
  • Portal de Azure.

Requerimientos

  • Visual Studio 2015 o posteriores
  • Una cuenta de Microsoft Azure.

Sígueme en Twitter @vmorenoz

¿Te gustó este artículo? Únete a Facebook en MicrosoftLand

Deja un comentario