从 CosmosDB 中的不同分区查询文档的建议方法是什么?
What is the advised way to query documents from different partitions in CosmosDB?
当使用 Azure Cosmos DB 并查询一个分区时,我只在 FeedOptions 中指定分区键。
但是当我必须查询 n 个分区时,我有 (afaik) 2 个选项:
- 运行 每个分区的单独任务并将结果合并到我的应用程序代码中
- 在 FeedOoptions 中设置标志 "EnableCrossPartitionQuery"(连同 MaxDegreeOfParallelism)并在查询中限制我的分区。
当我必须对整个结果集(跨所有分区)应用排序标准和分页时,我认为第一种方法将达到它的极限。
使用 .NET SQL API 在 Cosmos DB 中跨多个分区查询的推荐方法是什么?
不建议使用第一种方法,除非您知道文档具有的每个可能的分区键值并且准备好编写一些并行请求代码。只有当你想查询几个分区而不是所有分区时才有效。
如果您想查询所有分区,建议启用 EnableCrossPartitionQuery
方法,但理想情况下,您希望尽可能少地使用它。
CosmosDB 知道分区键定义是否是查询的一部分,如果提供了分区键值,它会将其结果限制为该查询的分区。
这意味着如果您编写类似 select * from c where c.partitionKey = 'something' || c.partitionKey = 'somethingelse'
的内容并启用 EnableCrossPartitionQuery
选项,您的查询将仅针对属于查询一部分的 2 个分区执行(something
和 somethingelse
).
当使用 Azure Cosmos DB 并查询一个分区时,我只在 FeedOptions 中指定分区键。 但是当我必须查询 n 个分区时,我有 (afaik) 2 个选项:
- 运行 每个分区的单独任务并将结果合并到我的应用程序代码中
- 在 FeedOoptions 中设置标志 "EnableCrossPartitionQuery"(连同 MaxDegreeOfParallelism)并在查询中限制我的分区。
当我必须对整个结果集(跨所有分区)应用排序标准和分页时,我认为第一种方法将达到它的极限。
使用 .NET SQL API 在 Cosmos DB 中跨多个分区查询的推荐方法是什么?
不建议使用第一种方法,除非您知道文档具有的每个可能的分区键值并且准备好编写一些并行请求代码。只有当你想查询几个分区而不是所有分区时才有效。
如果您想查询所有分区,建议启用 EnableCrossPartitionQuery
方法,但理想情况下,您希望尽可能少地使用它。
CosmosDB 知道分区键定义是否是查询的一部分,如果提供了分区键值,它会将其结果限制为该查询的分区。
这意味着如果您编写类似 select * from c where c.partitionKey = 'something' || c.partitionKey = 'somethingelse'
的内容并启用 EnableCrossPartitionQuery
选项,您的查询将仅针对属于查询一部分的 2 个分区执行(something
和 somethingelse
).