1. CONTROL DE VERSIONES DEL DOCUMENTO

VERSIÓN FECHA DESCRIPCIÓN RESPONSABLE
1.0 21/07/2022 creación del lineamiento Juan Garcia

2. CARACTERISTICAS

• Permitir la Distribución de datos y escrituras multi-región, lo cual brinda un almacenamiento independientemente entre regiones de Azure así como la réplica automática de los datos que sean necesarios.
• Integrarse con otros servicios de Azure como Functions, Synapse Analytics o AKS (Azure Kubernetes Service) de forma sencilla.
• Utilizar diferentes Apis de consulta, que proporcionaran la flexibilidad necesaria en función de lo que se requiera realizar.
• Implementar Indexación automática de los datos sin esquema para reducir los tiempos de consulta.
• Reducir el tiempo de gestión y de mantenimiento ya que se gestionan las actualizaciones y operaciones de escalado de forma transparente.

3. CONSIDERACIONES

3.1 Casos de Uso
    Se recomienda Cosmos DB para los siguientes escenarios:
    • Si los datos cambian mucho, sin importar si es esquema o Keyvalue.
    • Si se tienen muchas transacciones por segundo.
    • Si estamos usando el RDBMS para cosas “extrañas”.
    • En general todos aquellos escenarios para los que los RBDMS nos son buenos.

3.2 Eleccion de API
    Para la eleccion de la API se recomienda utilizar API Core (SQL) o API MongoDB segun sea el caso:
        3.2.1 API Core (SQL)
        • Si esquema cambia con mucha frecuencia, una base de datos de documentos tradicional es una buena opción en estos casos.
        • Si los datos son simples pares clave-valor es la mejor opción, ya que ofrece una experiencia de consulta más completa, con         indexación mejorada con respecto a Table API.
        • Puede consultar documentos JSON jerárquicos con un lenguaje similar a SQL. Core (SQL) usa el sistema de tipos de JavaScript,         la evaluación de expresiones y la invocación de funciones.
        • Para los desarrolladores que tienen experiencia con el lenguaje de consulta SQL, Core (SQL) proporciona varias instrucciones y         cláusulas SQL conocidas; por ejemplo:
            SELECT - FROM - WHERE - BETWEEN - COUNT - SUM - MIN - MAX - ORDER BY
        • Esta API tiene SDKs para los lenguajes Java, Python, .NET y Node.js.
        3.2.2 API MongoDB
        • La API de Azure Cosmos DB para MongoDB admite el protocolo de transferencia de MongoDB.
        • Esta API permite que SDK de cliente de MongoDB, controladores y herramientas existentes interactúen con los datos de forma         transparente, como si se ejecutaran sobre una base de datos de MongoDB real.
        • Los datos se almacenan en formato de documento, que es lo mismo que usar Core (SQL).
        • En la actualidad, la API de Azure Cosmos DB para MongoDB es compatible con la versión 3.2 del protocolo de transferencia de         MongoDB.
        • Versiones del API
            - Versión de API 3.6
            Considerar lo siguiente: Al crear cuentas de la API de Azure Cosmos DB for MongoDB, la versión 3.6 de la cuenta tiene el punto             de conexión con el formato .mongo.cosmos.azure.com, mientras que la versión 3.2 de la cuenta tiene el punto de             conexión con el formato .documents.azure.com. Para mas detalles de la version, por favor visitar API Mongo versión 3.6
        • Diferencias entre MongoDB y CosmosDB Api MongoDB

Caracteristica MongoDB Api MongoDB
Elección de proveedores de nube Si - AWS, Azure y Google Cloud, incluidos clústeres de varias nubes que abarcan las tres plataformas en la nube No
Admite todas las funciones de MongoDB con compatibilidad total con aplicaciones Si - Corre nativo MongoDB No - Reclama compatibilidad con API v4.2, en realidad más cerca de 3.6.Sin código del lado del servidor MongoDB.Falla en más del 66 % de las pruebas de compatibilidad
Acceso a la última versión de MongoDB Si - Ejecute la última versión de MongoDB o cualquier versión anterior compatible No - Reclamaciones de compatibilidad con la API v4.2; muchas funciones no son compatibles, algunas con limitaciones significativas
Nivel gratuito - Almacenamiento: 5 GB; Memoria RAM: Variable Limitado - Solo por las primeras 400 RU/s. Sin espacio aislado, por lo que no hay forma de evitar costos si el uso aumenta más allá del límite de 400RU/s
Migración en vivo Solo para cuentas elegibles
Elección de la configuración de la instancia - Clases y tamaños de instancias múltiples No - Configuración basada en el rendimiento aprovisionado. No hay forma de seleccionar de forma independiente las configuraciones de hardware subyacentes
Compatibilidad con transacciones ACID de varios documentos de MongoDB Limitado - Las transacciones de varios documentos solo se admiten dentro de una única colección no fragmentada; falla en casi todas las pruebas de transacción de MongoDB
Soporte de tipo de datos SON BSON (JSON binario) JSON regular + largos, dobles, flotantes, decimales, fechas y horas BSON Algunos tipos de datos tienen restricciones, incluida la incapacidad de modificarlos una vez establecidos
Tamaño máximo del documento 16mb 2mb
Esquema JSON para controles de gobierno de datos Si No - Todos los controles de esquema deben estar escritos en el nivel de la aplicación.
Búsqueda de texto integrada y consultas gráficas - Pipeline de agregación de MongoDB y Atlas Search Sin búsqueda de texto integrada
Consulta integrada de datos en el almacenamiento de objetos en la nube - Atlas Data Lake No
Archivo en línea Nivele automáticamente los datos de la base de datos al almacenamiento de objetos en la nube Si No
Combinar datos con combinaciones y uniones para consultas de análisis Si No
Recomendaciones automáticas de rendimiento - Asesor de rendimiento con recomendaciones de esquemas e índices No
Lecturas cubiertas - Consultas enviadas a múltiples réplicas para una latencia baja constante No
Pausar y reanudar clústeres No
Explorador de datos - Directamente en la interfaz de usuario de Atlas o a través de MongoDB Compass Si
Conectividad basada en SQL - Conector MongoDB para Business Intelligence - Las consultas SQL nativas requieren una instancia separada de Cosmos DB con API SQL; no hay forma de ejecutar consultas SQL directamente en una instancia de Cosmos DB utilizando la API de imitación de MongoDB. Power BI y Qlik Sense permiten consultas de análisis SQL
Visualización de datos nativos sin herramientas de BI de terceros - Gráficos MongoDB No
Base de datos compatible con implementaciones locales e híbridas - MongoDB Enterprise Avanzado No
Base de datos integrable con sincronización para dispositivos móviles - Sincronización de dispositivos MongoDB Atlas No


3.3 Configuración
    Para una configuración por defecto al momento de crear el recurso se recomienda considerar los siguientes parametros:
    • Copia de seguridad y restauración:
        o Intervalo de copia de seguridad: 240 Minutos
        o Retención de la copia de seguridad: 8 Horas
        o Redundancia de almacenamiento de copias de seguridad: Almacenamiento de copias de seguridad con redundancia geográfica
    • Replicación global de datos:
        o Escrituras en varias regiones: Deshabilitar
        o Región de escritura: East US 2
        o Regiones de lectura: East US 2
    • Coherencia predeterminada: SESIÓN
3.4 Costos
    Se recomienda utilizar el Capacity Calculator para conocer una estimación rápida del costo de la carga de trabajo en Azure Cosmos
    DB. Para obtener una estimación más precisa y la capacidad de ajustar más parámetros.
3.5 Eficiencia de Uso
    • Se recomienda utilizar el Emulador de Azure Cosmos DB para desarrollar y probar una aplicación localmente, sin crear una suscripción de Azure o realizar algún gasto. Cuando se culmine las pruebas y verifique que el funcionamiento de la aplicación es el esperado, puede cambiar a una cuenta de Azure Cosmos en la nube. Considerar que algunas características no están incluidas en el Emulador::
        o Admite una única cuenta fija y una clave principal ya conocida. No se puede regenerar la clave cuando se usa el emulador de         Azure Cosmos DB; sin embargo, puede cambiar la clave predeterminada mediante la opción de la línea de comandos.
        o Solo puede crear una cuenta de Azure Cosmos en modo de rendimiento aprovisionado. Actualmente no se admite el modo sin         servidor.
        o No es un servicio escalable y no admite un gran número de contenedores. Cuando se usa, de forma predeterminada se pueden         crear hasta 25 contenedores de tamaño fijo a 400 RU/s (solo compatibles con los SDK de Azure Cosmos DB) o 5 contenedores         ilimitados.
        o No ofrece diferentes niveles de coherencia como lo hace el servicio en la nube.
        o No ofrece replicación en varias regiones.
        o El emulador admite un tamaño máximo de la propiedad ID de 254 caracteres.
    • Cuando tengamos aplicaciones que usan Azure Table Storage podremos migrarlas directamente a Cosmos DB con la API de Tablas sin tener que cambiar el código. La ventaja que tiene migrar a Cosmos DB en este caso es la mejora en los tiempos de respuesta que nos proporciona. Al migrar los datos de tablas se indexan automáticamente todas sus propiedades. Esta API tiene SDKs para los lenguajes Java, Python, .NET y Node.js.

Nota: Mover la base de datos desde Azure Table Storage a Azure Cosmos DB con un bajo rendimiento supondría un ahorro de costes considerable, ya que Table Storage se cobra en función del tamaño de los datos, no de la frecuencia de acceso.

3.6 Seguridad
    Para temas de seguridad, al momento de realizar consultas a través de azure functions o algún microservicio se recomienda utilizar      Azure Key Vault para ayudar a almacenar y administrar de forma segura los secretos de la aplicación. Para lo cual es necesario:
    • Creación de un almacén de claves.
    • Adición de claves de acceso de Azure Cosmos DB en Key Vault.
    • Creación de una aplicación web de Azure.
    • Registro de la aplicación y concesión de permisos para leer el almacén de claves.