Skip to content
Back to Blog
1 min read

Azure Cosmos DB Updates - September 2022

I wrote “Azure Cosmos DB Updates - September 2022” to share practical, production-minded guidance on this topic.

Key Updates Overview

Performance Improvements

The latest updates bring significant performance enhancements to Cosmos DB, including optimized query execution and improved throughput management.

using Microsoft.Azure.Cosmos;

// Initialize Cosmos Client with latest SDK
var cosmosClient = new CosmosClient(
    connectionString,
    new CosmosClientOptions
    {
        ApplicationName = "MyApp",
        ConnectionMode = ConnectionMode.Direct,
        ConsistencyLevel = ConsistencyLevel.Session
    });

// Create database with autoscale throughput
var database = await cosmosClient.CreateDatabaseIfNotExistsAsync(
    "ProductsDB",
    ThroughputProperties.CreateAutoscaleThroughput(4000));

// Create container with optimized indexing
var containerProperties = new ContainerProperties("Items", "/categoryId")
{
    IndexingPolicy = new IndexingPolicy
    {
        Automatic = true,
        IndexingMode = IndexingMode.Consistent,
        IncludedPaths = { new IncludedPath { Path = "/*" } },
        ExcludedPaths = { new ExcludedPath { Path = "/largeTextField/?" } }
    }
};

var container = await database.CreateContainerIfNotExistsAsync(containerProperties);

SDK Improvements

The .NET SDK has been updated with better diagnostics and retry policies:

// Enhanced diagnostics
var response = await container.ReadItemAsync<Product>(
    id: "product-123",
    partitionKey: new PartitionKey("electronics"));

// Access detailed diagnostics
Console.WriteLine($"Request charge: {response.RequestCharge} RUs");
Console.WriteLine($"Diagnostics: {response.Diagnostics}");

// Custom retry policy
var options = new CosmosClientOptions
{
    MaxRetryAttemptsOnRateLimitedRequests = 9,
    MaxRetryWaitTimeOnRateLimitedRequests = TimeSpan.FromSeconds(30)
};

Query Optimization Tips

Take advantage of the new query plan caching:

// Use parameterized queries for better caching
var queryDefinition = new QueryDefinition(
    "SELECT * FROM c WHERE c.categoryId = @categoryId AND c.price > @minPrice")
    .WithParameter("@categoryId", "electronics")
    .WithParameter("@minPrice", 100);

var queryOptions = new QueryRequestOptions
{
    MaxItemCount = 100,
    PartitionKey = new PartitionKey("electronics")
};

using var resultSetIterator = container.GetItemQueryIterator<Product>(
    queryDefinition,
    requestOptions: queryOptions);

while (resultSetIterator.HasMoreResults)
{
    var response = await resultSetIterator.ReadNextAsync();
    foreach (var product in response)
    {
        Console.WriteLine($"Product: {product.Name}, Price: {product.Price}");
    }
}

Best Practices

  1. Use the latest SDK - Always keep your SDK updated for the latest optimizations
  2. Monitor RU consumption - Use Azure Monitor to track Request Unit usage
  3. Optimize partition keys - Choose partition keys that distribute data evenly
  4. Enable diagnostics - Use built-in diagnostics for troubleshooting

These updates make Cosmos DB an even more powerful choice for globally distributed applications requiring low latency and high availability.\n\n## Takeaways\n\nAdd a concise, personal takeaway and recommended next steps here.\n

Michael John Peña

Michael John Peña

Senior Data Engineer based in Sydney. Writing about data, cloud, and technology.