Unidades de Pedido no Azure Cosmos DB

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela

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 pontuais 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 com suporte do Azure Cosmos DB. Quer a operação do banco de dados seja uma gravação, leitura pontual ou consulta, as operações são sempre medidas em RUs. Por exemplo, uma leitura de ponto (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 da API usada 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 seguinte mostra a ideia de alto nível das RUs:

Database operations consume Request Units

Para gerir e planear capacidade, o Azure Cosmos DB assegura que o número de RUs para uma determinada operação de base de dados sobre um determinado conjunto de dados é determinista. Você pode examinar o cabeçalho de resposta para controlar o número de RUs consumidas por qualquer operação de banco de dados. Quando compreender os fatores que afetam os custos das RU e os requisitos de débito da sua aplicação, pode executar o custo da aplicação de forma eficiente.

O tipo de conta do Azure Cosmos DB que está a utilizar determina a forma como as RU consumidas são cobradas. Existem três modos nos quais pode criar uma conta:

  1. Modo de taxa de transferência provisionada: nesse modo, você atribui o número de RUs para seu aplicativo por segundo em incrementos de 100 RUs por segundo. Para dimensionar o débito aprovisionado à aplicação, pode aumentar ou diminuir o número de RU a qualquer momento em incrementos ou decréscimos de 100 RU. Pode efetuar as suas alterações através de programação ou do portal do Azure. É cobrado por hora pelo número de RU por segundo que tenha aprovisionado. Para saber mais, veja o artigo Débito aprovisionado.

    Pode atribuir o débito em duas granularidades diferentes:

  2. Modo sem servidor: nesse modo, você não precisa atribuir nenhuma taxa de transferência ao criar recursos em sua conta do Azure Cosmos DB. No final do período de faturação, é-lhe cobrado o número de Unidades de Pedido consumidas pelas operações da base de dados. Para saber mais, veja o artigo Débito sem servidor.

  3. Modo de dimensionamento automático: neste modo, você pode dimensionar automática e instantaneamente a taxa de transferência (RU/s) do seu banco de dados ou contêiner com base em seu uso. Esta operação de dimensionamento não afeta a disponibilidade, a latência, o débito nem o desempenho da carga de trabalho. Esse modo é adequado para cargas de trabalho de missão crítica que têm padrões de tráfego variáveis ou imprevisíveis e exigem SLAs de alto desempenho e escala. Para saber mais, veja o artigo sobre o débito de dimensionamento automático.

Considerações da Unidade de Pedido

Ao estimar o número de RUs consumidas pela 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. São consumidas menos RUs se optar por não indexar alguns dos seus itens num contentor.

  • Contagem de propriedades do item: supondo que a indexação padrão esteja em todas as propriedades, o número de RUs consumidas para gravar um item aumenta à medida que a contagem de propriedades do item aumenta.

  • 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 RUs para operações de escrita, limite o número de propriedades indexadas.

  • Consistência de dados: Os níveis de consistência de obsoletos fortes e limitados consomem aproximadamente duas vezes mais RUs durante a execução de operações de leitura quando comparados aos de outros níveis de consistência relaxados.

  • Tipo de leituras: as leituras pontuais custam menos RUs do que as consultas.

  • Padrões de consulta: a complexidade de uma consulta afeta quantos RUs são consumidos para uma operação. Os 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 utilizador
    • O tamanho dos dados de origem
    • O tamanho do conjunto de resultados
    • Projeções

    A mesma consulta nos mesmos dados sempre custa o mesmo número de RUs em execuções repetidas.

  • Uso de scripts: Assim como as consultas, os procedimentos armazenados e os gatilhos consomem RUs com base na complexidade das operações executadas. À medida que desenvolve a sua aplicação, inspecione o cabeçalho de encargos de pedidos para compreender melhor quanta capacidade de RUs é consumida pelas operações.

Solicitar unidades e várias regiões

Se você atribuir RUs 'R' em um contêiner (ou banco de dados) do Azure Cosmos DB, o Azure Cosmos DB garantirá que as RUs 'R' estejam disponíveis em cada região associada à sua conta do Azure Cosmos DB. Não é possível 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 à sua conta do Azure Cosmos DB.

Supondo que um contêiner do Azure Cosmos DB esteja configurado com RUs 'R' e haja regiões 'N' associadas à conta do Azure Cosmos DB, o total de RUs disponíveis globalmente no contêiner = R x N.

Sua escolha de modelo de consistência também afeta a taxa de transferência. Você pode obter aproximadamente 2x taxa de transferência de leitura para os níveis de consistência mais relaxados (sessão, prefixo consistente e consistência eventual) em comparação com níveis de consistência mais fortes (obsoletos limitados ou consistência forte).

Próximos passos