Functions with Cosmos DB integration in Azure - Time & Space Complexity
When using Azure Functions with Cosmos DB, it is important to understand how the number of database operations affects the overall execution time.
We want to know how the time to complete the function grows as the amount of data or requests increases.
Analyze the time complexity of the following operation sequence.
// Azure Function triggered by HTTP request
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
var client = new CosmosClient("connection-string");
var container = client.GetContainer("database", "container");
string query = "SELECT * FROM c WHERE c.type = 'item'";
var iterator = container.GetItemQueryIterator<Item>(query);
List<Item> results = new List<Item>();
while (iterator.HasMoreResults)
{
var response = await iterator.ReadNextAsync();
results.AddRange(response.Resource);
}
return new OkObjectResult(results);
}
This function queries Cosmos DB for all items of a certain type and returns them in the response.
Identify the API calls, resource provisioning, data transfers that repeat.
- Primary operation: Calls to
ReadNextAsync()to fetch pages of query results from Cosmos DB. - How many times: Once per page of results until all items are retrieved.
Each page fetch retrieves a fixed number of items. As the total number of items grows, the number of page fetches grows roughly in proportion.
| Input Size (n) | Approx. Api Calls/Operations |
|---|---|
| 10 | 1 |
| 100 | ~10 |
| 1000 | ~100 |
Pattern observation: The number of API calls grows linearly with the number of items retrieved.
Time Complexity: O(n)
This means the time to complete the function grows directly in proportion to the number of items returned from Cosmos DB.
[X] Wrong: "Fetching all items from Cosmos DB happens in a single call regardless of data size."
[OK] Correct: Cosmos DB returns results in pages, so multiple calls are needed as data grows, increasing total time.
Understanding how cloud functions interact with databases and how data size affects performance is a key skill for building scalable applications.
What if the function filtered items inside the code instead of in the query? How would the time complexity change?