从 CosmosDB 中的不同分区查询文档的建议方法是什么?

Mar*_* S. 5 paging partitioning azure-cosmosdb azure-cosmosdb-sqlapi

当使用 Azure Cosmos DB 并查询一个分区时,我只需在 FeedOptions 中指定分区键。但是当我必须查询 n 个分区时,我有(据我所知)2 个选项:

  1. 为每个分区运行单独的任务并将结果合并到我的应用程序代码中
  2. 在 FeedOoptions 中设置标志“EnableCrossPartitionQuery”(以及 MaxDegreeOfParallelism)并限制查询中的分区。

当我必须对整个结果集(跨所有分区)应用排序标准和分页时,我认为第一种方法将达到其极限。

使用 .NET SQL API 在 Cosmos DB 中跨多个分区进行查询的推荐方法是什么?

Nic*_*sas 4

不建议使用第一种方法,除非您知道文档具有的每个可能的分区键值并且准备好编写一些并行请求代码。仅当您想查询几个分区而不是全部分区时,它才有效。

EnableCrossPartitionQuery如果您想查询所有分区,建议启用它,但理想情况下,您希望尽可能少地使用它。

CosmosDB 知道分区键定义是否是查询的一部分,并且如果提供了分区键值,则会将其结果限制为此查询的分区。

这意味着,如果您编写类似的内容select * from c where c.partitionKey = 'something' || c.partitionKey = 'somethingelse'并启用这些EnableCrossPartitionQuery选项,则您的查询将仅针对属于查询一部分的 2 个分区(somethingsomethingelse)执行。

  • 这两种方法之间的性能有何不同?:这取决于您的编码方式。只是不建议这样做,因为它应该从您那里抽象出来并由 SDK 处理。也是的,除非您使用跨分区设置,否则您无法进行可靠的排序/分页。 (2认同)