Otimizar o custo de leituras e gravações no Azure Cosmos DBOptimize reads and writes cost in Azure Cosmos DB

Este artigo descreve como o custo necessário para ler e gravar dados de Azure Cosmos DB é calculado.This article describes how the cost required to read and write data from Azure Cosmos DB is calculated. As operações de leitura incluem operações Get em itens e operações de gravação incluem inserir, substituir, excluir e Upsert de itens.Read operations include get operations on items and write operations include insert, replace, delete, and upsert of items.

Custo de leituras e gravaçõesCost of reads and writes

Azure Cosmos DB garante desempenho previsível em termos de taxa de transferência e latência usando um modelo de taxa de transferência provisionado.Azure Cosmos DB guarantees predictable performance in terms of throughput and latency by using a provisioned throughput model. A taxa de transferência provisionada é representada em termos de unidades de solicitação por segundo ou ru/s.The throughput provisioned is represented in terms of Request Units per second, or RU/s. Uma RU (unidade de solicitação) é uma abstração lógica sobre recursos de computação, como CPU, memória, e/s, etc., que são necessários para executar uma solicitação.A Request Unit (RU) is a logical abstraction over compute resources such as CPU, memory, IO, etc. that are required to perform a request. A taxa de transferência provisionada (RUs) é reservada e dedicada ao seu contêiner ou banco de dados para fornecer taxa de transferência e latência previsíveis.The provisioned throughput (RUs) is set aside and dedicated to your container or database to provide predictable throughput and latency. A taxa de transferência provisionada permite que Azure Cosmos DB forneçam desempenho previsível e consistente, baixa latência garantida e alta disponibilidade em qualquer escala.Provisioned throughput enables Azure Cosmos DB to provide predictable and consistent performance, guaranteed low latency, and high availability at any scale. As unidades de solicitação representam a moeda normalizada que simplifica o raciocínio sobre quantos recursos um aplicativo precisa.Request units represent the normalized currency that simplifies the reasoning about how many resources an application needs.

Você não precisa pensar em diferenciar unidades de solicitação entre leituras e gravações.You don't have to think about differentiating request units between reads and writes. O modelo de moeda unificada das unidades de solicitação cria eficiências para usar de forma intercambiável a mesma capacidade de taxa de transferência para leituras e gravações.The unified currency model of request units creates efficiencies to interchangeably use the same throughput capacity for both reads and writes. A tabela a seguir mostra o custo de leituras e gravações em termos de RU/s para itens que são de 1 KB e 100 KB de tamanho.The following table shows the cost of reads and writes in terms of RU/s for items that are 1 KB and 100 KB in size.

Tamanho do itemItem Size Custo de uma leituraCost of one read Custo de uma gravaçãoCost of one write
1 KB1 KB 1 RU1 RU 5 RUs5 RUs
100 KB100 KB 10 RUs10 RUs RUs 5050 RUs

Ler um item com 1 KB de tamanho custa um RU.Reading an item that is 1 KB in size costs one RU. A gravação de um item que é de 1 KB custa cinco RUs.Writing an item that is 1-KB costs five RUs. Os custos de leitura e gravação são aplicáveis ao usar o nível de consistênciade sessão padrão.The read and write costs are applicable when using the default session consistency level. As considerações sobre RUs incluem: tamanho do item, contagem de propriedades, consistência de dados, propriedades indexadas, indexação e padrões de consulta.The considerations around RUs include: item size, property count, data consistency, indexed properties, indexing, and query patterns.

Custo normalizado para leituras e gravações de 1 milhãoNormalized cost for 1 million reads and writes

O provisionamento de 1.000 RU/s se traduz em 3,6 milhões RU/hora e custará $0.08 pela hora (nos EUA e na Europa).Provisioning 1,000 RU/s translates to 3.6 million RU/hour and will cost $0.08 for the hour (in the US and Europe). Para um item de 1 KB, você pode executar 3,6 milhões leituras ou 720.000 gravações, (esse valor é calculado como: 3.6 million RU / 5) por hora com essa taxa de transferência provisionada.For a 1-KB item, you can perform 3.6 million reads or 0.72 million writes, (this value is calculated as: 3.6 million RU / 5) per hour with this provisioned throughput. Normalizado para um milhão de leituras e gravações, o custo seria de $0.22 para 1 milhão leituras (esse valor é calculado como: $% 0,08/3,6 milhão) e $0.111 para gravações de 1 milhão (esse valor é calculado como: $% 0,08/0,72 milhão).Normalized to a million reads and writes, the cost would be $0.022 for 1 million reads (this value is calculated as: $0.08/3.6 million) and $0.111 for 1 million writes (this value is calculated as: $0.08/0.72 million).

O número de regiões e o custo das unidades de solicitaçãoNumber of regions and the request units cost

O custo de gravações é constante, independentemente do número de regiões associadas à conta do Azure Cosmos.The cost of writes is constant irrespective of the number of regions associated with the Azure Cosmos account. Em outras palavras, uma gravação de 1 KB custará cinco RUs, independentemente do número de regiões associadas à conta.In other words, a 1 KB write will cost five RUs independent of the number of regions that are associated with the account. Há uma quantidade não trivial de recursos gastos na replicação, na aceitação e no processamento do tráfego de replicação em todas as regiões.There's a non-trivial amount of resources spent in replicating, accepting, and processing the replication traffic on every region. Para obter detalhes sobre a otimização de custo de várias regiões, consulte o artigo Otimizando o custo de contas de Cosmos de várias regiões .For details about multi-region cost optimization, see Optimizing the cost of multi-region Cosmos accounts article.

Otimizar o custo de gravações e leiturasOptimize the cost of writes and reads

Ao executar operações de gravação, você deve provisionar capacidade suficiente para dar suporte ao número de gravações necessárias por segundo.When you perform write operations, you should provision enough capacity to support the number of writes needed per second. Você pode aumentar a taxa de transferência provisionada usando o SDK, o portal, a CLI antes de executar as gravações e, em seguida, reduzir a taxa de transferência depois que as gravações forem concluídas.You can increase the provisioned throughput by using SDK, portal, CLI before performing the writes and then reduce the throughput after the writes are completed. Sua taxa de transferência para o período de gravação é a taxa de transferência mínima necessária para os dados fornecidos, além da taxa de transferência necessária para inserir carga de trabalho, supondo que nenhuma outra carga de trabalho esteja em execução.Your throughput for the write period is the minimum throughput needed for the given data, plus the throughput required for insert workload assuming no other workloads are running.

Se você estiver executando outras cargas de trabalho simultaneamente, por exemplo, consulta/leitura/atualização/exclusão, deverá adicionar também as unidades de solicitação adicionais necessárias para essas operações.If you are running other workloads concurrently, for example, query/read/update/delete, you should add the additional request units required for those operations too. Se as operações de gravação forem limitadas por taxa, você poderá personalizar a política de repetição/retirada usando Azure Cosmos DB SDKs.If the write operations are rate-limited, you can customize the retry/backoff policy by using Azure Cosmos DB SDKs. Por exemplo, você pode aumentar a carga até que uma pequena taxa de solicitações receba uma taxa limitada.For instance, you can increase the load until a small rate of requests gets rate-limited. Se o limite de taxa ocorrer, o aplicativo cliente deverá fazer logoff em solicitações de limitação de taxa para o intervalo de repetição especificado.If rate-limit occurs, the client application should back off on rate-limiting requests for the specified retry interval. Antes de repetir as gravações, você deve ter uma quantidade mínima de intervalo de tempo entre as repetições.Before retrying writes, you should have a minimal amount of time gap between retries. O suporte à política de repetição está incluído nos SDKs do SQL .NET, Java, Node. js e Python e todas as versões com suporte dos SDKs do .NET Core.Retry policy support is included in SQL .NET, Java, Node.js, and Python SDKs and all the supported versions of the .NET Core SDKs.

Você também pode inserir dados em massa em Azure Cosmos DB ou copiar dados de qualquer armazenamento de dados de origem com suporte para Azure Cosmos DB usando Azure data Factory.You can also bulk insert data into Azure Cosmos DB or copy data from any supported source data store to Azure Cosmos DB by using Azure Data Factory. Azure Data Factory integra-se nativamente com a API de Azure Cosmos DB em massa para fornecer o melhor desempenho ao gravar dados.Azure Data Factory natively integrates with the Azure Cosmos DB Bulk API to provide the best performance, when you write data.

Passos seguintesNext steps

Em seguida, você pode prosseguir para saber mais sobre a otimização de custos no Azure Cosmos DB com os seguintes artigos:Next you can proceed to learn more about cost optimization in Azure Cosmos DB with the following articles: