Unidades de Solicitação no Azure Cosmos DB
APLICA-SE AO: NoSQL MongoDB Cassandra Gremlin Table
O Azure Cosmos DB dá suporte a muitas APIs como SQL, MongoDB, Cassandra, Gremlin e Table. Cada API tem seu próprio conjunto de operações de banco de dados. Essas operações variam de simples leituras e gravações de pontos a consultas complexas. Cada operação de banco de dados consome recursos do sistema com base na complexidade da operação.
O Azure Cosmos DB normaliza o custo de todas as operações de banco de dados usando unidades de solicitação (ou RUs, para abreviar) e mede o custo com base na taxa de transferência (Unidades de Solicitação por segundo, RU/s).
A unidade de solicitação é uma moeda de desempenho que abstrai os recursos do sistema (como CPU, IOPS e memória) necessários para executar as operações de banco de dados compatíveis com o Azure Cosmos DB. Independentemente da operação de banco de dados ser uma gravação, uma leitura pontual ou uma consulta, ela será sempre medida em RUs. Por exemplo, um ponto lido (buscar um único item por sua ID e valor de chave de partição) para um item de 1 KB é uma Unidade de Solicitação (ou uma RU), independentemente de qual API você usar para interagir com seu contêiner do Azure Cosmos DB. Você pode modelar seus custos de taxa de transferência usando a calculadora de capacidade do Azure Cosmos DB.
A imagem a seguir mostra a ideia de alto nível de RUs:
Para gerenciar e planejar a capacidade, o Azure Cosmos DB garante que o número de RUs para uma determinada operação de banco de dados em um determinado conjunto de dados seja determinístico. Você pode analisar o cabeçalho de resposta para rastrear o número de RUs consumidas por qualquer operação de banco de dados. Após reconhecer os fatores que afetam os encargos de RU e os requisitos de taxa de transferência do aplicativo, você poderá executar o custo do aplicativo de forma eficiente.
O tipo de conta do Azure Cosmos DB que você está usando determina a maneira como as RUs consumidas são cobradas. Há três modos nos quais você pode criar uma conta:
Modo de taxa de transferência provisionada: nesse modo, você atribui o número de RUs para o aplicativo por segundo em incrementos de 100 RUs por segundo. Para dimensionar a taxa de transferência provisionada ao aplicativo, você poderá aumentar ou diminuir o número de RUs a qualquer momento em incrementos ou decrementos de 100 RUs. É possível fazer as alterações de maneira programática ou por meio do portal do Azure. Você é cobrado por hora pelo número de RUs por segundo provisionadas. Para saber mais, confira o artigo de Taxa de transferência provisionada.
Você pode atribuir a taxa de transferência em duas granularidades distintas:
- Contêineres: para saber mais, confira Atribuir a taxa de transferência a um contêiner do Azure Cosmos DB.
- Bancos de dados: para saber mais, confira Atribuir a taxa de transferência a um banco de dados do Azure Cosmos DB.
Modo sem servidor: nesse modo, você não precisa atribuir nenhuma taxa de transferência ao criar recursos na sua conta do Azure Cosmos DB. No final do período de cobrança, você é cobrado pela quantidade de Unidades de Solicitação consumidas pelas operações de banco de dados. Para saber mais, confira o artigo de Taxa de transferência sem servidor.
Modo de dimensionamento automático: nesse modo, você pode dimensionar, de modo automático e instantâneo, a taxa de transferência (RU/s) do seu banco de dados ou contêiner conforme o uso. Essa operação de escala não afeta a disponibilidade, a latência, a taxa de transferência nem o desempenho da carga de trabalho. Esse modo é adequado para cargas de trabalho críticas que têm padrões de tráfego variáveis ou imprevisíveis e exigem SLAs em alto desempenho e escala. Para saber mais, confira o artigo taxa de transferência de dimensionamento automático.
Considerações sobre Unidade de Solicitação
Ao estimar o número de RUs consumidas por sua carga de trabalho, considere os seguintes fatores:
Tamanho do item: À medida que o tamanho de um item aumenta, o número de RUs consumidas para ler ou gravar o item também aumenta.
Indexação de itens: Por padrão, cada item é indexado automaticamente. Menos RUs serão consumidas se você optar por não indexar alguns de seus itens em um contêiner.
Contagem de propriedades do item: Assumindo que a indexação padrão é usada em todas as propriedades, o número de RUs consumidas para gravar um item aumentará na medida em que a contagem da propriedade do item aumentar.
Propriedades indexadas: Uma política de índice em cada contêiner determina quais propriedades são indexadas por padrão. Para reduzir o consumo de RU para operações de gravação, limite o número de propriedades indexadas.
Consistência de dados: os níveis de desatualização limitada e forte consomem aproximadamente duas vezes mais RUs durante a execução de operações de leitura, quando comparados com outros níveis de consistência relaxada.
Tipo de leituras: as leituras pontuais custam menos RUs do que as consultas.
Padrões de consulta: A complexidade de uma consulta afeta quantas RUs são consumidas por uma operação. Fatores que afetam o custo das operações de consulta incluem:
- O número de resultados da consulta
- O número de predicados
- A natureza dos predicados
- O número de funções definidas pelo usuário
- O tamanho dos dados de origem
- O tamanho do conjunto de resultados
- Projeções
A mesma consulta nos mesmos dados sempre custam o mesmo número de RUs em execuções repetidas.
Uso de script: assim como acontece com as consultas, os procedimentos armazenados e gatilhos consomem RUs com base na complexidade das operações que são executadas. Conforme você desenvolve seu aplicativo, inspecione o cabeçalho do preço de solicitação para entender melhor a capacidade de RU consumida por operação.
Unidades de solicitação e várias regiões
Se você atribuir 'R' RUs em um contêiner (ou em um banco de dados) do Azure Cosmos DB, o Azure Cosmos DB garante que as 'R' RUs estejam disponíveis em cada região associada à conta do Azure Cosmos DB. Você não pode atribuir seletivamente RUs a uma região específica. As RUs provisionadas em um contêiner (ou banco de dados) do Azure Cosmos DB são provisionadas em todas as regiões associadas à conta do Azure Cosmos DB.
Supondo que um contêiner do Azure Cosmos DB esteja configurado com 'R' RUs e que haja 'N' regiões associadas à conta do Azure Cosmos DB, o total de RUs disponíveis globalmente no contêiner será igual a R x N.
Sua opção de modelo de consistência também afeta a taxa de transferência. Você pode obter aproximadamente 2x a produtividade de leitura para os níveis de consistência mais flexíveis (sessão, *prefixo consistente e consistência eventual) em comparação com níveis de consistência mais fortes (desatualização limitada ou coerência forte).