Creación de una instancia de Cosmos DB

Completado

En esta unidad, aprenderá más sobre cómo Azure Cosmos DB organiza los datos. Veremos cómo se puede usar Visual Studio Code para crear y mantener bases de datos y contenedores de Azure Cosmos DB.

¿Qué es Azure Cosmos DB?

Azure Cosmos DB es un servicio en la nube que implementa bases de datos de documentos. Los datos de un documento deben ajustarse a la sintaxis de JSON. Un documento JSON puede contener propiedades, subdocumentos y matrices de documentos.

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "partitionKey": "Bikes",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 }
      ]
}

A diferencia de una tabla de una base de datos relacional, los documentos de una instancia de Azure Cosmos DB no siguen ningún esquema definido. Esto permite que la base de datos contenga varios documentos con diferentes formas y tamaños. Así, podríamos almacenar en la misma base de datos diversa información sobre clientes distintos. O podríamos registrar un historial de direcciones completo como una matriz de un cliente. Podríamos registrar información extra, como la solvencia económica.

El servicio en la nube Azure Cosmos DB se organiza como una jerarquía. En la parte superior hay una cuenta de Azure Cosmos DB (el recurso). Esta cuenta es la unidad de seguridad de un conjunto de bases de datos. La cuenta de Azure Cosmos DB especifica la ubicación de las bases de datos junto con la información de seguridad necesaria para acceder a ellas. Dentro de una cuenta, se crean una o varias bases de datos; dentro de cada base de datos, se pueden crear uno o varios contenedores, y en esos contenedores se almacenan documentos.

Conceptual image of parent-child relationship of account, database, and container in Cosmos D B.

Contenedores y claves de partición de Cosmos DB

Cada contenedor se organiza como una serie de particiones. Las particiones se corresponden aproximadamente con los archivos físicos en el disco. Una partición grande puede tener su archivo, pero varias particiones pequeñas se pueden combinar en un único archivo. Cada documento tiene una clave de partición, que define la partición a la que pertenece. Las particiones sirven para almacenar documentos relacionados entre sí y para ayudar a optimizar la forma en que se accede a los datos.

En el siguiente ejemplo se muestra un documento JSON que almacena información del producto, como parte de una aplicación de Contoso. Dado que estos datos proceden de otro sistema, los identificadores ya están configurados para ser GUID. En su propio contenedor, puede traer el identificador o permitir que Cosmos DB proporcione uno. Al insertar un nuevo documento, debe proporcionar el identificador y la clave de partición (si usa claves de partición).

{
    "id": "08225A9E-F2B3-4FA3-AB08-8C70ADD6C3C2",
    "categoryName": "Bikes, Touring Bikes",
    "sku": "BK-T79U-50",
    "name": "Touring-1000 Blue, 50",
    "description": "The product called \"Touring-1000 Blue, 50\"",
    "price": 2384.0700000000002,
    "tags": [
        {
            "_id": "27B7F8D5-1009-45B8-88F5-41008A0F0393",
            "name": "Tag-61"
        }
    ],
    "inventory": [
        { "location": "Dallas", "inventory": 96 },
        { "location": "Seattle", "inventory": 85 },
        { "location": "Boston", "inventory": 4 },
        { "location": "Miami", "inventory": 12 },
        { "location": "San Diego", "inventory": 58 }
      ]
}

La empresa Contoso decidió usar el nombre de categoría, categoryName, como clave de partición, porque esto proporciona una distribución algo uniforme de documentos en el contenedor. El campo de clave de partición se establece para el contenedor cuando se crea el contenedor. Para cada nuevo documento insertado en el contenedor, la clave de partición se incluye como parte del documento JSON. En el ejemplo anterior, los requisitos mínimos para un documento con formato correcto son el identificador único y como la clave de partición, id y categoryName. Si trae un conjunto de datos de otro sistema y quiere mantener su identificador único para conectarse a otros sistemas, puede optar por usar el campo id o permitir que Cosmos DB cree un nuevo id único y el identificador se pueda almacenar en un nombre de propiedad independiente.

Nota:

Azure Cosmos DB agrega algunos campos propios a los documentos. Muchos de ellos se usan con fines internos y, en la mayoría de los casos, conviene no modificarlos directamente. La excepción es un campo con el nombre id. Azure Cosmos DB usa este campo para identificar el documento en la base de datos, y cada documento debe tener un campo id único.

Costo de rendimiento de Azure Cosmos DB

Azure Cosmos DB usa el concepto de unidades de solicitud por segundo (RU/s) para administrar el rendimiento y la facturación de las bases de datos. Esta medida extrae los recursos físicos subyacentes que se deben aprovisionar para dar cabida al rendimiento necesario. Cuando se crea una base de datos o un contenedor, se especifica el número de RU/s que se va a asignar, lo que conllevará los costos correspondientes.

El costo de hacer una lectura puntual (capturar un solo elemento por su identificador y valor de clave de partición) para un elemento de 1 KB es 1 unidad de solicitud (o 1 RU). A todas las demás operaciones de base de datos se les asigna de forma similar un costo en términos de unidades de solicitud. Con independencia de qué API utilice para interactuar con el contenedor de Azure Cosmos DB, los costos siempre se miden por RU. Si la operación de base de datos es una escritura, lectura puntual o consulta, los costos siempre se miden en RU.

Si aprovisiona 400 RU/s y emite una consulta que cuesta 40 RU, podrá emitir 10 de estas consultas por segundo. Cualquier solicitud más allá de eso tendrá una velocidad limitada, por lo que deberá reintentar la solicitud. Si usa controladores de cliente, admiten la lógica de reintento automático.

Para mantener las RU/s lo más bajas posible, tenga en cuenta lo siguiente:

Object Consideraciones
Tamaño del documento Un documento más grande en kb aumenta las RU.
Indexación de documentos La indexación eficaz puede reducir las RU.
Recuento de propiedades de documentos Si indexa todas las propiedades, el uso de más propiedades aumentará las RU. Las propiedades clave de indexación selectiva requerirán menos RU.
Coherencia de datos Los niveles de coherencia fuerte y limitada consumen más RU que otros niveles de coherencia relajados.
Tipo de lecturas de documento La lectura puntual mediante el identificador y la clave de partición de un elemento cuestan significativamente menos RU que las consultas.
Patrones de consulta La complejidad de una consulta afecta a la cantidad de RU usadas.
Uso de scripts Los procedimientos almacenados, los desencadenadores y las funciones definidas por el usuario consumen RU además de las consultas dentro de estos scripts.

Acceso a Cosmos DB

Azure Cosmos DB incluye las siguientes maneras de conectarse a Cosmos DB:

  • Visual Studio Code
  • SDK de JavaScript (y otros lenguajes)
  • Portal de Azure
  • Azure CLI
  • PowerShell
  • API DE REST

API de Azure Cosmos DB

Azure Cosmos DB admite varias API de programación. Estas API se ajustan lo más estrechamente posible a las API usadas por otras bases de datos NoSQL comunes. La intención es facilitar una ruta de migración sencilla a Azure Cosmos DB desde estas bases de datos sin que los desarrolladores tengan que aprender un nuevo paradigma ni realizar cambios importantes en las aplicaciones. Las API admitidas actualmente son estas:

  • Core (SQL)
  • MongoDB
  • Cassandra
  • Gremlin (una API de Cosmo DB de grafos común)
  • Azure Table Storage

La API de Core (SQL) es una variante del lenguaje SQL que usan la mayoría de los sistemas de administración de bases de datos relacionales. Existen restricciones y adaptaciones para controlar conjuntos de documentos sin esquema en lugar de tablas.

Uso de Visual Studio Code para administrar Azure Cosmos DB

Al usar Visual Studio Code como su entorno de desarrollo, puede instalar la extensión de Azure Databases para crear bases de datos y aplicaciones de Azure Cosmos DB.

Screenshot of the Azure Databases extension in Visual Studio Code marketplace

Esta extensión se instala desde el marketplace de extensiones para Visual Studio Code. Una vez instalada la extensión Databases, use el Explorador de Azure, Mayús + Alt + A, para usar la extensión de Cosmos DB.

Administración de Cosmos DB desde el explorador de Azure

La extensión Databases, en el explorador de Azure de Visual Studio Code, proporciona una interfaz gráfica de usuario que se integra con Visual Studio Code. Con esta extensión, puede crear, eliminar y administrar cuentas, bases de datos, contenedores y documentos de Azure Cosmos DB.

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the Documents node for a contextual menu to create a new document.

Acceso a la cuenta en el portal

La extensión también proporciona fácil acceso a todas las funciones de Cosmos DB al proporcionar la capacidad de abrir su cuenta en Azure Portal. Puede acceder a esto cuando haga clic con el botón derecho en su cuenta y seleccione Abrir en el portal.

Screenshot of the Azure Databases extension in Visual Studio Code as user right-clicks on the account node to open account in Azure portal.

El portal ofrece acceso a todas las configuraciones de Cosmos DB y al Explorador de datos para las bases de datos y contenedores. Use el Data Explorer para insertar, actualizar, eliminar y consultar los datos.

Screenshot of the Azure portal with the Data Explorer showing the query window open with a JSON document displayed.