Unidades de solicitud en Azure Cosmos DB

Azure Cosmos DB admite varias API, como SQL, MongoDB, Cassandra, Gremlin y Table. Cada API tiene su propio conjunto de operaciones de base de datos. Estas operaciones abarcan desde lecturas y escrituras puntuales sencillas hasta consultas complejas. Cada operación de base de datos consume recursos del sistema en función de la complejidad de la operación.

Azure Cosmos DB normaliza el costo de todas las operaciones de base de datos mediante unidades de solicitud (o RU, para abreviar) y mide el costo en función del rendimiento (unidades de solicitud por segundo, RU/s).

Unidad de solicitud es una moneda de rendimiento que abstrae los recursos del sistema, como el procesamiento (CPU), las operaciones de entrada y salida por segundo (IOPS) y la memoria, necesarios para realizar las operaciones de base de datos admitidas por Azure Cosmos DB. Sin importar si la operación de base de datos es una escritura, lectura puntual o consulta, los costos siempre se miden en RU. Por ejemplo, leer un solo elemento mediante el ID y la clave de partición usa una unidad de solicitud. El elemento debe tener un tamaño de aproximadamente 1 KB. Este tamaño estimado tiene el valor "true" en cualquier API que se use con Azure Cosmos DB. Puede modelar los costos de rendimiento con la calculadora de capacidad de Azure Cosmos DB.

En la siguiente imagen se muestra el concepto de unidades de solicitud a grandes rasgos:

Las operaciones de base de datos consumen Unidades de solicitud

Para administrar y planear la capacidad, Azure Cosmos DB garantiza que el número de RU para una operación de base de datos determinada en un conjunto de datos concreto sea determinista. Puede examinar el encabezado de respuesta para realizar un seguimiento del número de RU consumidas por cualquier operación de base de datos. Una vez comprendidos los factores que afectan a los cargos de unidad de solicitud y los requisitos de rendimiento de la aplicación, se puede ejecutar la aplicación de forma rentable.

El tipo de cuenta de Azure Cosmos DB que usa determina el modo en que se cobrarán las RU consumidas. Hay tres modos en los que se puede crear una cuenta:

  1. Modo de rendimiento aprovisionado: en este modo, se aprovisiona el número de RU de la aplicación por segundo en incrementos de 100 RU/segundo. Para escalar el rendimiento aprovisionado para la aplicación, puede aumentar o disminuir el número de RU en cualquier momento, en incrementos o decrementos de 100 RU. Puedes realizar los cambios mediante programación o en Azure Portal. Se le factura cada hora en función del número de RU por segundo aprovisionadas. Para más información, consulte Rendimiento aprovisionado.

  2. Modo sin servidor: en este modo, no es necesario aprovisionar el rendimiento al crear recursos en una cuenta de Azure Cosmos DB. Al final del período de facturación, se le factura el número de unidades de solicitud consumidas por las operaciones de base de datos. Para más información, consulte el artículo Rendimiento sin servidor.

  3. Modo de escalado automático: en este modo, puede escalar de forma automática e instantánea el rendimiento (RU/s) de la base de datos o el contenedor en función de su uso. Esta operación de escalado no afecta a la disponibilidad, la latencia, la capacidad de proceso o el rendimiento de la carga de trabajo. Este modo es muy adecuado para cargas de trabajo de importancia crítica que tienen patrones de tráfico variables o impredecibles y precisan de acuerdos de nivel de servicio (SLA) de alto rendimiento y escala. Para más información, consulte el artículo Rendimiento de escalabilidad automática.

Consideraciones de la unidad de solicitud

Al calcular el número de RU por segundo consumidos por su carga, tenga en cuenta los siguientes factores:

  • Tamaño del elemento: A medida que aumenta el tamaño de un elemento, también aumenta el número de unidades de solicitud (RU) que se consumen para leer o escribir el elemento.

  • Indexación del elemento: De forma predeterminada, cada elemento se indexa automáticamente. Se consumen menos RUs si opta por no indexar algunos elementos en un contenedor.

  • Recuento de propiedades del elemento: asumiendo que la indexación predeterminada está activada para todas las propiedades, el número de unidades de solicitud consumidas para escribir un elemento aumenta a medida que aumenta el recuento de propiedades del elemento.

  • Propiedades indexadas: Una directiva de índice en cada contenedor determina qué propiedades se indexan de forma predeterminada. Para reducir el consumo de RUs para operaciones de escritura, limite el número de propiedades indexadas.

  • Coherencia de los datos: los niveles de coherencia alta y de obsolescencia limitada consumen aproximadamente dos veces más unidades de solicitud al realizar operaciones de lectura en comparación con las que consumen los niveles de coherencia relajada.

  • Tipo de lecturas: las lecturas puntuales cuestan muchas menos RU que las consultas.

  • Patrones de consultas: la complejidad de una consulta afecta a la cantidad de RUs consumidos en una operación. Entre los factores que influyen en el costo de las operaciones de consulta están los siguientes:

    • El número de resultados de la consulta.

    • El número de predicados.

    • La naturaleza de los predicados.

    • El número de funciones definidas por el usuario.

    • El tamaño de los datos de origen.

    • El tamaño del conjunto de resultados.

    • Projections

    La misma consulta sobre los mismos datos siempre cuesta la misma cantidad de RUs en ejecuciones repetidas.

  • Uso de scripts: como las consultas, los procedimientos almacenados y los desencadenadores consumen unidades de solicitud según la complejidad de las operaciones que lleven a cabo. Cuando desarrolle la aplicación, inspeccione el encabezado de cargo de solicitud para entender mejor cuánta capacidad de unidades de solicitud consume cada operación.

Unidades de solicitud y varias regiones

Si aprovisiona RU de "R" en un contenedor de Azure Cosmos DB (o base de datos), Azure Cosmos DB garantiza que las RU de "R" están disponibles en cada región asociada con su cuenta de Azure Cosmos DB. No se pueden asignar RU de forma selectiva a una región específica. Las RU aprovisionadas en un contenedor de Azure Cosmos DB (o base de datos) se aprovisionan en todas las regiones asociadas con la cuenta de Azure Cosmos DB.

Suponiendo que un contenedor de Cosmos está configurado con RU de "R" y hay "N" regiones asociadas con la cuenta de Azure Cosmos DB, el número total de RU disponibles globalmente en el contenedor = R x N.

La elección del modelo de coherencia también afecta al rendimiento. Puede obtener aproximadamente 2 veces el rendimiento de lectura para los niveles de coherencia más relajados (sesión, prefijo consistente y coherencia eventual) en comparación con niveles de coherencia más fuertes (obsolescencia acotada o coherencia fuerte).