My scenario is slightly different than normal
The tech stack is using something called OutSystems a 'low-code' platform. We have a C# library for connecting to Cosmos DB, but this is only initiated when it's in use. It isn't a constant running API, therefor each time we call the DB, the Cosmos connection is initiated for the first time.
I am running a query which returns about 8k records which has 10 columns of small data. When running my query I am getting really inconsistent timings ranging from 800ms - 3000ms. I am pretty sure I am on the only person using and querying it at the moment.
My code:
private async Task<string> QueryItemsAsync(string filter, string partitionKey, int offset, int limit, string columns = null)
{
var sqlQuery = QueryBuilder(filter, partitionKey, offset, limit, columns);
var results = new List<Dictionary<string, string>>();
using (var feedIterator = this.container.GetItemQueryIterator<Dictionary<string, string>>(sqlQuery, null, new QueryRequestOptions() { }))
{
while (feedIterator.HasMoreResults)
{
foreach (var item in await feedIterator.ReadNextAsync().ConfigureAwait(false))
{
results.Add(item);
}
}
}
return JsonConvert.SerializeObject(results);
}
I've noticed that once I query over 1000 rows the performance seems to be the same as if it was 8000.
If I query 'Top 1' the return time is < 40ms. If I query 'Top 1000' the return time is > 1200ms
- Is this the most efficient loop?
- If anyone can refactor it, I will love you forever
With the tech stack, it makes debugging super difficult as I cannot live debug. I have to write logs and to console... It takes about 5 minutes to make a change and debug so it's not a quick task hence why I am asking SO.
Thanks in advance, Sam
edit: The query returns a flat JSON structure