簡體   English   中英

如何在 Azure CosmosDb 中獲取物理分區列表,有沒有辦法獲取物理分區列表?

[英]How do I get list of Physical Partition in Azure CosmosDb, is there a way to get list of physical partitions?

雖然我設置了高 RU,但我沒有得到所需的結果。

背景是:我正在開發 IOT 應用程序,不幸的是,分區鍵集非常糟糕 {deviceID}+ {dd/mm/yyyy hh:mm:sec:},這意味着從技術上講,每個邏輯分區的項目都非常少(永遠不會到達10 GB 限制),但我覺得創建了大量物理分區,這迫使我的 RU 拆分。 如何獲取物理分區列表

您無法控制分區,也無法獲得分區列表。 但你實際上並不需要它們。 它不像每個分區都會放在一個單獨的盒子上。 如果您遇到性能低下的問題,您需要確定導致節流的原因。 您可以使用指標刀片來識別受限制的分區並找出這些受限制的原因。 您還可以使用診斷設置並將其流式傳輸到 Log Analytics 以獲得更多見解

我們可以使用此API獲取分區鍵范圍列表。 分區鍵范圍將來可能會隨着數據的變化而變化。

物理分區是內部實現。 我們無法控制物理分區的大小或數量,也無法控制邏輯分區和物理分區之間的映射。

但是我們可以通過選擇合適的 Partition Key 來控制數據在邏輯分區上的分布,它可以將數據均勻地分布在多個邏輯分區上。

此信息曾經直接顯示在門戶中,但在重新設計中已刪除。

我覺得這是一個錯誤,因為提供 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());     } })();

訪問門戶中的指標選項卡並選擇數據庫和容器,然后運行書簽以查看警報框中的計數,如下所示。

在此處輸入圖片說明

您還可以從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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM