从 Cosmos DB 获取详细信息的更快查询

时间:2021-01-25 14:21:45

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi

我正在使用下面提到的 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();

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

1 个答案:

答案 0 :(得分:1)

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

分区键是人名吗?如果不是,那么您正在运行一个永远不会扩展的跨分区查询。事实上,随着您添加更多数据,您的性能会变差。

我建议查看 Choosing a Partition key 以了解有关如何创建易于扩展的数据库的更多信息。

此外,如果您不熟悉此类数据库,这篇文章也非常有用,How to model and partition data on Azure Cosmos DB using a real-world example

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