更快地查询以从 Cosmos DB 中获取详细信息

Faster Query to fetch details from Cosmos DB

我正在使用下面提到的 LINQ 表达式从数组 (String[] getPersons) 作为输入从 Cosmos DB 获取人员列表。

var container = db.GetContainer(containerId);
var q = container.GetItemLinqQueryable<Person>();
var iterator = q.Where(p => getPersons.Contains(p.Name)).ToFeedIterator();
var results = await iterator.ReadNextAsync();

我可以得到结果,但需要更多时间(>15 秒)来检索数据(超过 1K 条记录 ) 来自 CosmosDB。我需要在 < 1 秒 内获取数据。有没有办法优化上面的查询来实现这个?

您可以做很多事情,但我的直觉认为这不是 SDK 问题,而是设计问题。

分区键是人名吗?如果不是,那么您就是 运行 一个永远无法扩展的跨分区查询。事实上,当您添加更多数据时,您的表现会变差。

我建议查看 Choosing a Partition key 以详细了解如何创建可轻松扩展的数据库。

此外,如果您是这种类型的数据库的新手,这篇文章也非常有帮助,How to model and partition data on Azure Cosmos DB using a real-world example

一旦您的设计可以扩展,从单个(或一组有界的)分区回答查询,您的查询性能将大大提高。