Azure CosmosDB如何针对物理分区进行查询

时间:2018-08-08 22:17:39

标签: azure-cosmosdb

我正在尝试执行一个非常大的查询,该查询需要返回数百万条记录,因此我想对查询进行分区并使用多台计算机来处理结果。

我的逻辑分区键将是文档的UUID,因此这对我将不同的部分分配给每个工作程序节点不是很有帮助。我可以获取物理分区ID并仅在特定物理分区内执行查询吗?

这是我尝试过的:

FeedOptions feedOptions = new FeedOptions();
feedOptions.setEnableCrossPartitionQuery(false);
feedOptions.setPartitionKeyRangeIdInternal("0");

client.queryDocuments(collectionPath, "SELECT * FROM e where e.docType
= 'address'", feedOptions).flatMapIterable(FeedResponse::getResults);

但是更改partitionKeyRangeId似乎根本不会改变结果。

请告知。

1 个答案:

答案 0 :(得分:0)

据我所知,到目前为止,它不能在特定的物理分区内执行。我在Cosmos DB Rest Api中找不到与物理分区有关的任何参数。您在代码中提到的PartitionKeyRangeId用于change feed请求中。

基于official doc中的语句,我们无法管理cosmos db中的物理分区:

  

Azure Cosmos DB将自动缩放物理数量   根据您的工作负载进行分区。所以你不应该把你的   数据库设计基于物理分区的数量来代替   应该确保选择正确的分区键来确定   逻辑分区。

但是,由于cosmos db具有灵活性,可用性和启发性,因此如果您确实有与物理分区相关的要求,可以提交feedback来寻求进一步的帮助。

希望它对您有帮助。


更新答案:

有很多方法可以提高处理大量数据的性能,在这里我只提供一些个人建议。

1。您可以尝试考虑选择比UUID更合适的分区键,以大大提高性能。

2。尝试使用page size限制每个查询的项目数,然后通过多线程实现查询和处理并行性。

3。增加RUs设置以提高性能。

更多建议,请参阅此doc