Otimizar o custo de armazenamento no Azure Cosmos DB

APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela

O Azure Cosmos DB oferece armazenamento e taxa de transferência ilimitados. Ao contrário da taxa de transferência, que você precisa provisionar/configurar em seus contêineres ou bancos de dados do Azure Cosmos DB, o armazenamento é cobrado com base no consumo. Você é cobrado apenas pelo armazenamento lógico que consome e não precisa reservar nenhum armazenamento com antecedência. O armazenamento é dimensionado automaticamente para cima e para baixo com base nos dados que você adiciona ou remove a um contêiner do Azure Cosmos DB.

Custo do armazenamento

O armazenamento é cobrado com a unidade de GBs. O armazenamento local suportado por SSD é usado pelos seus dados e indexação. O armazenamento total usado é igual ao armazenamento exigido pelos dados e índices usados em todas as regiões onde você está usando o Azure Cosmos DB. Se você replicar globalmente uma conta do Azure Cosmos DB em três regiões, pagará pelo custo total de armazenamento em cada uma dessas três regiões. Para estimar sua necessidade de armazenamento, consulte a ferramenta de planejamento de capacidade. O custo de armazenamento no Azure Cosmos DB é de US$ 0,25 GB/mês, consulte a página de preços para obter as atualizações mais recentes. Você pode configurar alertas para determinar o armazenamento usado pelo contêiner do Azure Cosmos DB, para monitorar seu armazenamento, consulte o artigo Monitor Azure Cosmos DB).

Otimize o custo com o tamanho do item

O Azure Cosmos DB espera que o tamanho do item seja de 2 MB ou menos para um desempenho ideal e benefícios de custo. Se você precisar de algum item para armazenar mais de 2 MB de dados, considere reprojetar o esquema do item. No caso raro de não ser possível redesenhar o esquema, você pode dividir o item em subitens e vinculá-los logicamente a um identificador (ID) comum. Todos os recursos do Azure Cosmos DB funcionam consistentemente ancorando nesse identificador lógico.

Otimize os custos com indexação

Por padrão, os dados são indexados automaticamente, o que pode aumentar o armazenamento total consumido. No entanto, você pode aplicar políticas de índice personalizadas para reduzir essa sobrecarga. A indexação automática que não foi ajustada através da política é de cerca de 10-20% do tamanho do item. Ao remover ou personalizar políticas de índice, você não paga custo extra por gravações e não precisa de capacidade de taxa de transferência adicional. Consulte Indexação no Azure Cosmos DB para configurar políticas de indexação personalizadas. Se você já trabalhou com bancos de dados relacionais antes, pode pensar que "indexar tudo" significa dobrar o armazenamento ou mais. No entanto, no Azure Cosmos DB, no caso mediano, é muito menor. No Azure Cosmos DB, a sobrecarga de armazenamento do índice é normalmente baixa (10-20%), mesmo com indexação automática, porque foi concebida para um espaço de armazenamento reduzido. Ao gerenciar a política de indexação, você pode controlar a compensação da pegada do índice e do desempenho da consulta de uma maneira mais refinada.

Otimize os custos com tempo de vida e mudança de feed

Quando não precisar mais dos dados, você poderá excluí-los normalmente de sua conta do Azure Cosmos DB usando o tempo de vida, alterar o feed ou migrar os dados antigos para outro armazenamento de dados, como o armazenamento de blobs do Azure ou o data warehouse do Azure. Com tempo de vida ou TTL, o Azure Cosmos DB fornece a capacidade de excluir itens automaticamente de um contêiner após um determinado período de tempo. Por padrão, você pode definir o tempo de vida no nível do contêiner e substituir o valor por item. Depois de definir o TTL em um contêiner ou em um nível de item, o Azure Cosmos DB removerá automaticamente esses itens após o período de tempo desde o momento em que foram modificados pela última vez. Usando o feed de alterações, você pode migrar dados para outro contêiner no Azure Cosmos DB ou para um armazenamento de dados externo. A migração leva zero tempo de inatividade e, quando terminar a migração, você pode excluir ou configurar o tempo de vida para excluir o contêiner do Azure Cosmos DB de origem.

Otimize os custos com tipos de dados de mídia avançada

Se quiser armazenar tipos de mídia avançada, por exemplo, vídeos, imagens, etc., você tem várias opções no Azure Cosmos DB. Uma opção é armazenar esses tipos de mídia avançada como itens do Azure Cosmos DB. Há um limite de 2 MB por item, e você pode evitar esse limite encadeando o item de dados em vários subitens. Ou você pode armazená-los no armazenamento de Blob do Azure e usar os metadados para fazer referência a eles de seus itens do Azure Cosmos DB. Há uma série de prós e contras com esta abordagem. A primeira abordagem obtém o melhor desempenho em termos de latência, SLAs de taxa de transferência e recursos de distribuição global turnkey para os tipos de dados de mídia avançada, além de seus itens regulares do Azure Cosmos DB. No entanto, o suporte está disponível a um preço mais alto. Ao armazenar mídia no armazenamento de Blob do Azure, você pode reduzir seus custos gerais. Se a latência for crítica, você poderá usar o armazenamento premium para arquivos de mídia avançada referenciados a partir de itens do Azure Cosmos DB. Isso se integra nativamente à CDN para fornecer imagens do servidor de borda a um custo mais baixo para contornar a restrição geográfica. A desvantagem desse cenário é que você precisa lidar com dois serviços - o Azure Cosmos DB e o armazenamento de Blob do Azure, o que pode aumentar os custos operacionais.

Verificar o armazenamento consumido

Para verificar o consumo de armazenamento de um contêiner do Azure Cosmos DB, você pode executar uma solicitação HEAD ou GET no contêiner e inspecionar os x-ms-request-quota cabeçalhos e x-ms-request-usage . Como alternativa, ao trabalhar com o SDK do .NET, você pode usar as propriedades DocumentSizeQuota e DocumentSizeUsage para obter o armazenamento consumido.

Utilizar o SDK

// Measure the item size usage (which includes the index size)
ResourceResponse<DocumentCollection> collectionInfo = await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri("db", "coll"));   

Console.WriteLine("Item size quota: {0}, usage: {1}", collectionInfo.DocumentQuota, collectionInfo.DocumentUsage);

Próximos passos

Em seguida, você pode continuar para saber mais sobre otimização de custos no Azure Cosmos DB com os seguintes artigos: