Azure DP-900: T03/M02: Exploración de los aspectos básicos de Azure Cosmos DB

https://docs.microsoft.com/es-es/learn/modules/explore-non-relational-data-stores-azure/

Unidad 1: Introducción

Las bases de datos relacionales almacenan datos en tablas relacionales, pero a veces la estructura que impone este modelo puede ser demasiado rígida y, a menudo, conduce a un rendimiento deficiente a menos que dedique tiempo a implementar un ajuste detallado. Existen otros modelos, denominados colectivamente bases de datos NoSQL. Estos modelos almacenan datos en otras estructuras, como documentos, gráficos, almacenes de clave-valor y almacenes de familias de columnas.

Azure Cosmos DB es un servicio de base de datos en la nube altamente escalable para datos NoSQL.

Unidad 2: Descripción de Azure Cosmos DB

Azure Cosmos DB admite varias interfaces de programación de aplicaciones (API) que permiten a los desarrolladores usar la semántica de programación de muchos tipos comunes de almacén de datos para trabajar con datos en una base de datos Cosmos DB. La estructura de datos interna se abstrae, lo cual permite a los desarrolladores usar Cosmos DB para almacenar y consultar datos mediante API con las que ya están familiarizados.

NOTA:

Una API es una interfaz de programación de aplicaciones. Los sistemas de administración de bases de datos (y otros marcos de software) proporcionan un conjunto de API que los desarrolladores pueden usar para escribir programas que necesitan tener acceso a datos. Las API serán diferentes para los distintos sistemas de administración de bases de datos.

Cosmos DB usa índices y particiones para proporcionar un rendimiento rápido de lectura y escritura y se puede escalar a volúmenes masivos de datos. Puede habilitar escrituras en varias regiones, agregando las regiones de Azure que prefiera a su cuenta de Cosmos DB para que los usuarios distribuidos globalmente puedan trabajar con datos en su réplica local.

Cuándo usar Cosmos DB

Cosmos DB es un sistema de administración de bases de datos muy escalable. Cosmos DB asigna automáticamente espacio para las particiones en un contenedor y cada partición puede crecer hasta un tamaño de 10 GB. Los índices se crean y se mantienen de forma automática. No hay prácticamente ninguna sobrecarga administrativa.

Cosmos DB es un servicio fundamental de Azure. Muchos de los productos de Microsoft usan Cosmos DB para aplicaciones críticas a escala global, como Skype, Xbox, Microsoft 365 y Azure, entre muchos otros. Cosmos DB es muy recomendable para los escenarios siguientes:

  • IoT y telemática. Estos sistemas suelen ingerir grandes cantidades de datos en ráfagas de actividad frecuentes. Cosmos DB puede aceptar y almacenar esta información con rapidez. lo que permite que servicios analíticos como Azure Machine Learning, Azure HDInsight o Power BI puedan hacer uso de esos datos. Además, los datos se pueden procesar en tiempo real a través de funciones de Azure Functions que se activan a medida que los datos van llegando a la base de datos.
  • Comercio y marketing. Microsoft usa Cosmos DB en sus plataformas de comercio electrónico propias que se ejecutan como parte de la Tienda Windows y Xbox Live. También se usa en el sector comercial para almacenar los datos de catálogo y para el suministro de eventos en las canalizaciones de procesamiento de pedidos.
  • Juegos. El nivel de base de datos es un componente fundamental de las aplicaciones de juegos. Los juegos modernos realizan el procesamiento de los elementos grafos en los clientes de consola o dispositivos móviles, pero utilizan la nube para ofrecer contenido personalizado y a medida, como estadísticas dentro del juego, integración con las redes sociales y los marcadores de puntuaciones. A menudo, los juegos requieren latencias de un solo milisegundo en las lecturas y escrituras para proporcionar una experiencia de juego inmersiva. Una base de datos de un juego debe ser rápida y capaz de manejar los picos masivos en la velocidad de las solicitudes cuando se inicia un nuevo juego y se actualizan las características.
  • Aplicaciones web y para dispositivos móviles. Azure Cosmos DB se usa normalmente en aplicaciones web y móviles y sirve para modelar interacciones sociales, para la integración con servicios de terceros y para la creación de experiencias personalizadas enriquecidas. Se pueden usar SDK de Cosmos DB con el fin de compilar aplicaciones para iOS y Android completas con el marco Xamarin Framework, muy popular.

Para obtener más información sobre los usos de Cosmos DB, consulte Casos de uso comunes de Azure Cosmos DB.

Unidad 3: Identificación de las API de Azure Cosmos DB

Azure Cosmos DB admite varias API, lo cual permite a los desarrolladores migrar fácilmente datos desde almacenes NoSQL usados habitualmente y aplicar sus aptitudes de programación existentes. Al aprovisionar una nueva instancia de Cosmos DB, seleccione la API que quiere usar. La elección de la API depende de muchos factores, como el tipo de datos que se van a almacenar, la necesidad de admitir aplicaciones existentes y las aptitudes de API de los desarrolladores que trabajarán con el almacén de datos.

API Core (SQL)

La API nativa de Cosmos DB administra los datos en formato de documento JSON y, a pesar de ser una solución de almacenamiento de datos NoSQL, usa sintaxis SQL para trabajar con los datos.

Una consulta SQL para una base de datos de Cosmos DB que contiene datos del cliente podría ser similar a esta:

SELECT *
FROM customers c
WHERE c.id = "joe@litware.com"

El resultado de esta consulta consta de uno o varios documentos JSON, como se muestra aquí:

{
   "id": "joe@litware.com",
   "name": "Joe Jones",
   "address": {
        "street": "1 Main St.",
        "city": "Seattle"
    }
}

MongoDB API

MongoDB es una base de datos de código abierto popular en la que los datos se almacenan en formato JSON binario (BSON). La API de MongoDB de Azure Cosmos DB permite a los desarrolladores usar bibliotecas de cliente de MongoDB en y código para trabajar con datos en Azure Cosmos DB.

El lenguaje de consulta de MongoDB (MongoDB Query Language, MQL) usa una sintaxis compacta orientada a objetos en la que los desarrolladores usan objetos para llamar a métodos. Por ejemplo, la consulta siguiente usa el método find para consultar la colección products en el objeto db:

db.products.find({id: 123})

Los resultados de esta consulta constan de documentos JSON, similares a los siguientes:

{
   "id": 123,
   "name": "Hammer",
   "price": 2.99}
}

Table API

Table API se usa para trabajar con datos en tablas de clave-valor, de forma similar a Azure Table Storage. Table API de Azure Cosmos DB ofrece mayor escalabilidad y rendimiento que Azure Table Storage.

Por ejemplo, puede definir una tabla denominada Clientes de la siguiente forma:

Posteriormente, puede usar Table API de Cosmos DB a través de uno de los SDK específicos del lenguaje para realizar llamadas al punto de conexión de servicio para recuperar datos de la tabla. Por ejemplo, la siguiente solicitud devuelve la fila que contiene el registro de Samir Nadoy en la tabla anterior:

https://endpoint/Customers(PartitionKey='1',RowKey='124')

Cassandra API

Cassandra API es compatible con Apache Cassandra, que es una base de datos de código abierto popular que usa una estructura de almacenamiento de familia de columnas. Las familias de columnas son tablas, similares a las de una base de datos relacional, con la excepción de que no es obligatorio que cada fila tenga las mismas columnas.

Por ejemplo, puede crear una tabla de Empleados como esta:

idNombreManager
1Sue Smith
2Ben ChanSue Smith

Cassandra admite una sintaxis basada en SQL, por lo que una aplicación cliente podría recuperar el registro de Ben Chan como se muestra a continuación:

SELECT * FROM Employees WHERE ID = 2

API de Gremlin

Gremlin API se usa con datos en una estructura de grafos. en el que las entidades se definen como vértices que forman nodos en el gráfico conectado. Los nodos se conectan mediante bordes que representan relaciones, como esta:

En el ejemplo de la imagen se muestran dos tipos de vértices (empleado y departamento) y bordes que los conectan (el empleado «Ben» depende de la empleada «Sue» y ambos empleados trabajan en el departamento «Hardware»).

La sintaxis de Gremlin incluye funciones para operar en vértices y bordes, y esto permite insertar, actualizar, eliminar y consultar datos en el gráfico. Por ejemplo, puede usar el código siguiente para agregar un nuevo empleado llamado Alice que dependa de la empleada con el identificador 1 (Sue)

g.addV('employee').property('id', '3').property('firstName', 'Alice')
g.V('3').addE('reports to').to(g.V('1'))

La consulta siguiente devuelve todos los vértices de empleado, por orden de identificador.

g.V().hasLabel('employee').order().by('id')

MCT: Video 3.2.1 Descripción de Azure Cosmos DB – Parte 1

Azure Cosmos DB

  • Es un sistema de administración de BD no SQL
  • Cosmos administra los datos como un conjunto de documentos con particiones
  • Un documento es una colección de campos identificados por una clave
  • Los campos de cada documento puede variar
  • Y un campo puede contener documentos secundarios

JSON

  • Normalmente se utiliza el formato JSON para crear los documentos No SQL
  • Los campos se colocan entre llaves y tienen un prefijo como nombre
  • Un documento puede contener hasta 2 MB de datos entre los que se incluyen objetos binario pequeños, si se requiere almacenar más datos puede utilizar Azure Blob Storage y agregando la referencia al documento
  • En el ejemplo se ve que el «Estado» en los 2 registros son diferentes ya que permiten almacenar información no estructurada

Contenedores

  • Los documentos de una BD se organizan en contenedores y los documentos de un contenedor se agrupan en particiones las cuales contienen un conjunto de documentos que comparten una clave de partición
  • Estro ayuda a reducir las operaciones de E/S de disco

API

  • Cosmos DB soporte el uso de API’s (Interfaces de Programación de Aplicaciones) que permiten el acceso a los documentos JSON mediante el conjunto de interfaces conocidas , estas son:

SQL API

  • Proporciona un lenguaje de consulta similar a SQL
  • Permite identificar y recuperar documentos mediante las instrucciones SELECT

Table API

  • Permite utilizar la API de Azure Table Storage para almacenar y recuperar documentos
  • La función se creó para que pueda pasar de Azure Table Storage a Comos DB sin modificar las aplicaciones existentes

API MongoDB

  • Se creó para que una aplicación que normalmente funciona de forma local con MongoDB pueda se implementada en la nube

Cassandra API

  • Cassandra es otro sistema de administración de BD que muchas organizaciones ejecutan de manera local
  • Se proporciona una API similar al entorno local
  • Su función es migrar las aplicaciones de cassandra a Cosmos DB

Gremlin API

  • Implementa una interfaz de grafos en Cosmos DB
  • Los datos se conservan como un conjunto de documentos en Cosmos DB pero Gremlin permite realizar consultas de grafos en los datos
  • Mediante esta API se pueden examinar los objetos y las relaciones de los grafos para detectar todo tipo de relaciones complejas
  • Su función es permitir la migración de BD gremlin locales en la nube

NOTA

  • Si va a crear una nueva aplicación debe utilizar mejor SQL API

Ventajas

  • Servicio totalmente administrado (brinda administración / Actualizaciones / Revisiones automáticas)
  • Garantiza una alta disponibilidad de 99.99)%
  • Se pueden replicar los datos entre regiones por un costo adicional
  • garantiza una latencia menor a 10 milisegundos para lecturas indexadas y para escritura de 99% de los casos en todo el mundo lo que permite que la ingesta de datos y lecturas se realicen de forma rápida
  • Permite un gran volumen de solicitudes de millones al día
  • Todos los datos están cifrados
  • La fuente de cambios facilita el seguimiento y administración de los cambios y desencadenación de eventos

Ejemplos

  • Muchas de las aplicaciones de Microsoft utilizan Cosmos DB como:
    • Skype
    • Xbox
    • office 365
    • Azure
  • Es útil para los siguientes escenarios
IoT y Telemática
  • En IoT se necesita realizar la ingesta de muchos datos procedentes de muchos sensores que luego deben ser procesados para obtener perspectivas en tiempo real
Comercio y Marketing
  • Por ejemplo un catalogo de productos para una tienda de partes de vehículos cada pieza puede tener sus propios atributos además de los atributos comunes que comparten con todas las piezas
  • Y los atributos de una pieza pueden cambiar de tamaño al año siguiente cuando se lance un nuevo modelo
  • Azure Cosmos DB admite esquemas flexibles y datos jerárquicos por esto es adecuado para este caso de uso

Juegos

  • Los juegos modernos realizan el procesamiento de los elementos en grafos de datos como clientes, consolas o dispositivos móviles
  • Pero utilizan la nube para ofrecer contenido personalizado y a la medida como estadísticas dentro del juego, integración con las redes sociales y marcadores de puntuaciones
  • A menudo los juegos requieren latencia de solo milisegundos para que las operaciones de E/S sean rápidas y la experiencia del juego sea atractiva
  • Azure Cosmos DB se utiliza en juegos como de The Walking Dead y Halos

Aplicaciones Web y dispositivos móviles

  • Se utiliza también en aplicaciones web y móviles
  • Sirve para modelar interacciones sociales para la integración de servicios de terceros y para la creación de experiencias personalizadas enriquecidas
  • Los kit’s de desarrollo de software SDK de Cosmos DB pueden utilizarse para generar aplicaciones completas en IOs y Android mediante el marco Xamarin

Redes Sociales

  • Otro caso es almacenar y consultar el contenido generado por usuarios para aplicaciones Web, móviles o redes sociales
  • Ejemplos de contenidos generados por usuarios son: chat’s , twitt’s, entradas a un blog, valoraciones y comentarios

MCT: Video 3.2.2 Descripción de Azure Cosmos DB – Parte 2

Aprovisionamiento del servicios desde el portal de Azure

  • Agregamos un recurso y agregamos Azure Cosmos DB
  • Nos solicita seleccionar el tipo de API, seleccionamos Núcleo (SQL)
  • Nos solicita la suscripción
  • El grupo de recursos: PruebaDB
  • Nombre de cuenta: cosmos-db
  • Ubicación: (US) South Central US
  • Modo de capacidad: rendimiento aprovisionado
  • Aplicar descuento del nivel Gratis: aplicar
  • Limitar el rendimiento total de la cuenta: Limitar la cantidad total de rendimiento que se puede aprovisionar en esta cuenta
  • en la sección de Distribución global, dejamos todo deshabilitado para reducir costos
  • Los mismos para todos los demás por lo que le damos revisar y crear
  • Si la validación es correcta le damos crear

Aprovisionamiento por Plantillas de Resources Manager

  • Buscamos «implementar una Plantilla Personalizada»
  • En la sección de Plantilla de inicio rápido, buscamos «comsosdb» y seleccionamos «101-cosmosdb-crear-account»
  • Seleccionamos la plantilla
  • Nos pide los datos de
  • Suscripción
  • Grupo de recursos PruebaDB
  • Región: South Central
  • Name: pruebacosmosdbdp900
  • Location: default
  • Tier: default
  • Si la validación es correcta le damos crear
  • Dentro de la documentación de Azure existen diferentes plantillas de ARM para CosmosDB
  • También podemos descargar la plantilla y modificar los parámetros que se requieran

MCT: Video 3.2.3 Azure Cosmos DB Profundización y configuración del servicio

Bases de Datos y Contenedores

  • Una cuenta de CosmosDB crear muy pocos recursos entre los principales las BD’s y los contenedores
  • Azure Cosmos DB utiliza el concepto de unidades de solicitudes por segundo RU/s para administrar el rendimiento y el costo de las BD’s
  • El rendimiento mínimo que se puede asignar a una BD o contener es de 400RU/s
  • Se pueden aumentar o disminuir la RU/s de un contenedor en cualquier momento
  • Pero el aumento de RU/s aumenta el costo también
  • La creación de una BD’s y un contenedor de puede hacer desde la CLI
  • –account-name: nombre de la cuenta
  • –name: nombre de la BD (debe ser minúscula y ser únicos )
  • –resource-group: nombre del grupo de recursos
  • –throughput: numero de RU/s
  • Para crear un contenedor:
  • –account-name: nombre de la cuenta
  • –database-name: nombre de la BD
  • –name: nombre del contenedor
  • –resource-group: nombre del grupo de recursos

PowerShell

  • también se puede crear la BD y el contenedor desde la PowerShell
  • Y los comandos son similares se les solicita la misma información
  • pero en contenedor pide además «PartitionKeyKind» : Hash

Portal de Azure

  • Para crear la BD y el contenedor debemos ingresar primero a a la cuenta creada anteriomente
  • Ingresamos a «Explorador de datos»
  • Creamos la BD, dando clic en «New Database» y completando los datos
  • Database id: nombre de la BD
  • Tipo de escalado: manual
  • y RU/s: 400
  • Una vez que la BD fue creada le damos en la opción de «New Container» donde se nos solicitan los siguientes parámetros
  • database id: «use existing»->»pruebaSQL»
  • Container Id: nombre del contenedor: SegInf
  • Indexing: Habilitamos la indexación para mejorar las consultas: Automatic
  • Partition Key: los contenedores se dividen en particiones por esto se solicita una clave de partición que identifique al contenedor mejorando las consultas: /troyanos

  • Ahora dentro de la BD podemos encontrar el contenedor creado y dentro de la sección de «Items» podemos agregar la información a la BD

Replicación

  • Azure Cosmos DB permite replicar las BD y contenedores en varias regiones
  • Esto se puede realizar al momento de aprovisionar el servicio
  • Pero también existe dentro del servicio una página para configurar la replicación
  • NOTA: la replica donde se creó el servicio es la única con permisos de escritura las demás son solo de lectura, se puede habilitar la escritura en otras regiones pero no hay garantía que se modifiquen los mismos datos en dos regiones distintas
  • La modificación es asíncrona y al tener un retraso puede se que exista un retraso mientras se actualizan los datos entre regiones
  • Cada replica aumenta el costo del servicio

Coherencia

Lectura/Escritura

  • Dentro de una región Cosmos DB utiliza un clúter de servidores este enfoque ayuda a mejorar la escalabilidad y disponibilidad
  • En cada servidor se guarda una copia de los datos
  • Cuando una aplicación escribe datos en un servidor se registra un cambio que después se replica en los demás servidores del cluster
  • Por ejemplo si al APP A actualiza datos en le servidor 1 y la APP B lee los datos aún no actualizados del servidor 2
  • Y este problema no solo se puede dar si se utilizan dos APP’s diferentes, sino que también una misma aplicación que escribe en el servidor 1 y leer del servidor 2
  • Por estos Cosmos DB permite especificar como se deben controlar las incoherencias esto dentro de la página de «Coherencia predeterminada»
  • Se ofrecen las siguientes opciones:
    • Fuerte: es la menos coherente, los cambios no se perderán ya que en algún momento aparecerán pero es posible que no aparezcan de inmediato, por lo que los cambios pueden parecer desordenados
    • Obsolescencia Limitada: hay un retraso entre la escritura y la lectura de los datos actualizados
    • Sesión: si una aplicación realiza una serie de cambios todos esos cambios estarán actualizados y en orden para esa aplicación, pero otras aplicaciones los podrán ver cuando se sincronicen
    • Prefijo Coherente: esta opción garantiza que los cambios aparezcan en orden aunque puede existir un retraso antes que sean visibles
    • Posible: todas las escrituras son visibles para los clientes después de confirmar que se han escrito correctamente, esta opción no esta disponible si se necesita distribuir los datos en varias regiones globales

Unidad 4: Ejercicio: exploración de Azure Cosmos DB

Creación de una cuenta de Cosmos DB

Para usar Cosmos DB, debe aprovisionar una cuenta de Cosmos DB en su suscripción de Azure. En este ejercicio, aprovisionará una cuenta de Cosmos DB que usa la API de núcleo (SQL).

En Azure Portal, seleccione + Crear un recurso en la parte superior izquierda y busque Azure Cosmos DB. En los resultados, seleccione Azure Cosmos DB y seleccione Crear.

En el mosaico Núcleo (SQL): Recomendado, seleccione Crear.

Escriba los detalles siguientes y seleccione Revisar y crear

  • Suscripción: si usa un espacio aislado, seleccione la opción Concierge Subscription (Suscripción de Concierge). En caso contrario, seleccione su suscripción de Azure.
  • Grupo de recursos: si usa un espacio aislado, seleccione el grupo de recursos existente (que tendrá un nombre como learn-xxxx…). De lo contrario, cree un grupo de recursos con el nombre que prefiera.
  • Nombre de cuenta: escriba un nombre único
  • Ubicación: cualquier ubicación disponible
  • Capacity mode (Modo de capacidad): rendimiento aprovisionado
  • Apply Free-Tier Discount (Aplicar descuento de nivel Gratis): seleccione Aplicar si está disponible
  • Limit total account throughput (Limitar el rendimiento total de la cuenta): no seleccionado

Una vez validada la configuración, seleccione Crear.

Espere a que la implementación finalice. A continuación, vaya al recurso implementado.

Crear una base de datos de ejemplo

En la página de la nueva cuenta de Cosmos DB, en el panel de la izquierda, seleccione Explorador de datos.

En la página del Explorador de datos, seleccione Start with Sample (Iniciar con ejemplo) y, posteriormente, observe el estado en el panel de la parte inferior de la pantalla hasta que se haya creado la base de datos SampleDB y el contenedor de Personas de ejemplo (esta acción puede tardar unos minutos).

Seleccione Cerrar en el mensaje de notificación.

Visualización y creación de elementos

En la página del Explorador de datos, expanda la base de datos SampleDB y el contenedor de Personas y seleccione Elementos para ver una lista de elementos del contenedor. Los elementos representan a personas, cada una con un identificador único, un nombre, una edad y otras propiedades.

Seleccione cualquiera de los elementos de la lista para ver una representación JSON de los datos del elemento.

En la parte superior de la página, seleccione Nuevo elemento para crear un nuevo elemento en blanco.

Modifique el JSON del nuevo elemento como se muestra a continuación y, posteriormente, seleccione Guardar.

Después de guardar el nuevo elemento, observe que las propiedades de metadatos adicionales se agregan automáticamente.

Consulta de la base de datos

En la página del Explorador de datos, seleccione el icono Nueva consulta de SQL.

En el editor de consultas SQL, revise la consulta predeterminada (SELECT * FROM c) y use el botón SELECT * FROM c para ejecutarla.

Revise los resultados, que incluyen la representación JSON completa de todos los elementos.

Modifique la consulta del siguiente modo:

SELECT * FROM c WHERE c.id LIKE '%tavo%'

Use el botón Ejecutar consulta para ejecutar la consulta revisada y revisar los resultados, que incluye JSON que contiene los campos de identificador, nombre y edad para los elementos de persona con una edad superior a 40.

Cierre el editor de consultas SQL y descarte los cambios.

Ha visto cómo crear y consultar entidades JSON en una base de datos de Cosmos DB mediante la interfaz del explorador de datos de Azure Portal. En un escenario real, un desarrollador de aplicaciones utilizará uno de los muchos kits de desarrollo de software (SDK) específicos del lenguaje de programación para llamar a la API de núcleo (SQL) y trabajar con datos en la base de datos.