如何在Azure CosmosDb中获取物理分区列表,有没有方法获取物理分区列表?

如何在Azure CosmosDb中获取物理分区列表,有没有方法获取物理分区列表?,azure,azure-cosmosdb,Azure,Azure Cosmosdb,虽然我设定的RUs很高,但我没有得到要求的结果 背景是:我正在IOT应用程序上工作,不幸的是分区密钥集非常糟糕{deviceID}+{dd/mm/yyyy hh:mm:sec:},这意味着从技术上讲,每个逻辑分区的项目会非常少(永远不会达到10GB的限制),但我觉得创建了大量物理分区,这迫使我的RU进行拆分。如何获取物理分区列表您无法控制分区,也无法获取分区列表。但实际上你并不需要它们。它不像每个分区将被放置在一个单独的盒子上。如果性能低下,则需要确定导致节流的原因。您可以使用metrics刀片

虽然我设定的RUs很高,但我没有得到要求的结果


背景是:我正在IOT应用程序上工作,不幸的是分区密钥集非常糟糕{deviceID}+{dd/mm/yyyy hh:mm:sec:},这意味着从技术上讲,每个逻辑分区的项目会非常少(永远不会达到10GB的限制),但我觉得创建了大量物理分区,这迫使我的RU进行拆分。如何获取物理分区列表

您无法控制分区,也无法获取分区列表。但实际上你并不需要它们。它不像每个分区将被放置在一个单独的盒子上。如果性能低下,则需要确定导致节流的原因。您可以使用metrics刀片来识别受限制的分区,并找出这些分区被限制的原因。您还可以使用诊断设置,并将这些设置流式传输到日志分析中,以获得更多的信息

我们可以使用此功能获得分区键范围的列表。分区键范围将来可能会随着数据的变化而变化

物理分区是内部实现。我们无法控制物理分区的大小或数量,也无法控制逻辑分区和物理分区之间的映射


但是我们可以通过选择适当的分区键来控制数据在逻辑分区上的分布,分区键可以将数据均匀地分布在多个逻辑分区上。

此信息过去在门户中直接显示,但在重新设计时已删除

我觉得这是一个错误,因为配置RU需要知道每个分区的RU峰值乘以分区数,所以这个数字应该很容易访问

信息在返回到门户的JSON中返回,但没有显示给我们。对于使用专用吞吐量(即不使用数据库配置的吞吐量)配置的集合,此javascript书签显示信息

javascript:(function () {     var ss = ko.contextFor($(".ext-quickstart-tabs-left-margin")[0]).$rawData().selectedSection();      var coll = ss.selectedCollectionId();      if (coll === null) {         alert("Please drill down into a specific container");     }     else {         alert("Partition count for container " + coll + " is " + ss.selectedCollectionPartitionCount());     } })();
访问门户中的metrics选项卡,选择数据库和容器,然后运行书签以查看警报框中的计数,如下所示

您还可以从
pkranges
REST端点查看此信息。这是SDK使用的。下面是一些在V2 SDK中工作的代码

var documentClient = new DocumentClient(new Uri(endpointUrl), authorizationKey,
 new ConnectionPolicy {
  ConnectionMode = ConnectionMode.Direct
 });

var partitionKeyRangesUri = UriFactory.CreatePartitionKeyRangesUri(dbName, collectionName);
FeedResponse < PartitionKeyRange > response = null;

do {
 response = await documentClient.ReadPartitionKeyRangeFeedAsync(partitionKeyRangesUri,
  new FeedOptions {
   MaxItemCount = 1000
  });
 foreach(var pkRange in response) {
  //TODO: Something with the pkRange
 }

} while (!string.IsNullOrEmpty(response.ResponseContinuation));
var documentClient=new documentClient(新Uri(endpointUrl)、authorizationKey、,
新连接策略{
ConnectionMode=ConnectionMode.Direct
});
var partitionKeyRangesUri=UriFactory.CreatePartitionKeyRangesUri(dbName,collectionName);
FeedResponseresponse=null;
做{
response=wait documentClient.ReadPartitionKeyRangeFeedAsync(partitionKeyRangesUri,
新的饲料选择{
MaxItemCount=1000
});
foreach(响应中的变量范围){
//TODO:是关于pkRange的
}
}而(!string.IsNullOrEmpty(response.ResponseContinuation));

CosmosDb的Monitor选项卡允许您查看物理分区从写入的角度来看,您的分区键似乎很好。它与创建的物理分区的数量无关。这将取决于它们中数据的大小以及它们需要拆分的时间。但我不确定它是否能支持你的阅读问题。搜索来自特定设备的所有事件或搜索最近的所有事件通常都需要跨分区扇出。您可能应该问一个不同的问题,关于您的案例的最佳分区策略