Azure Cosmos DB 中的佈建輸送量簡介
適用於:NoSQL MongoDB Cassandra Gremlin 桌子
Azure Cosmos DB 可讓您在資料庫和容器上設定佈建輸送量。 佈建輸送量有兩種類型:標準 (手動) 或自動調整。 本文提供佈建輸送量如何運作的概觀。
Azure Cosmos DB 資料庫是一組容器的管理單位。 資料庫是由一組無從驗證結構描述的容器所組成的。 Azure Cosmos DB 容器是適用於輸送量和儲存體的可擴縮性單位。 容器會跨 Azure 區域內的一組機器進行水平分割,並散發到與您 Azure Cosmos DB 帳戶相關聯的所有 Azure 區域。
使用 Azure Cosmos DB,您可以佈建兩個資料粒度的輸送量:
- Azure Cosmos DB 容器
- Azure Cosmos DB 資料庫
在容器上設定輸送量
在 Azure Cosmos DB 容器上佈建的輸送量是專為該容器保留的。 該容器隨時都可接收佈建輸送量。 容器上的佈建輸送量在財務方面會由 SLA 所支援。 若要了解如何在容器上設定標準 (手動) 輸送量,請參閱在 Azure Cosmos DB 容器上佈建輸送量。 若要了解如何在容器上設定自動調整輸送量,請參閱佈建自動調整輸送量。
在容器上設定佈建的輸送量是最常使用的選項。 您可以透過使用要求單位 (RU) 佈建任何數量的輸送量,來彈性擴充容器的輸送量。
針對容器佈建的輸送量會平均分散於其實體分割區之間,並假設有一個良好的分割區索引鍵,可在實體分割區之間平均分散邏輯分割區,則輸送量也會平均分散於容器的所有邏輯分割區之間。 您無法選擇性地指定邏輯分割區的輸送量。 因為實體分割區會裝載容器的一或多個邏輯分割區;因此,實體分割區專屬於該容器並支援該容器上佈建的輸送量。
如果邏輯分割區上執行的工作負載耗用超過配置給基礎實體分割區的輸送量,則作業的速率可能會受到限制。 所謂的「經常性分割」是指某個邏輯分割區的要求比其他分割區索引鍵值超出太多。
發生速率限制時,您可以提高整個容器的佈建輸送量或重試此作業。 也應該確保您選擇的分割區索引鍵可平均分散儲存體和要求數量。 如需有關分割的詳細資訊,請參閱在 Azure Cosmos DB 中分割和水平縮放。
想要預知容器的效能時,建議您設定容器細微程度的輸送量。
下圖示範實體分割區如何裝載容器的一或多個邏輯分割區:
在資料庫上設定輸送量
當您在 Azure Cosmos DB 資料庫上佈建輸送量時,輸送量會在資料庫中的所有容器 (稱為標準資料庫容器) 上共用。 如果在資料庫中的特定容器上指定佈建輸送量,則為例外。 在其容器之間共用資料庫層級佈建輸送量,相當於在機器叢集上裝載資料庫。 由於資料庫共用內的所有容器都會共用機器上可用的資源,因此,您自然不會取得任何特定容器上的可預測效能。 若要了解如何在資料庫上設定佈建輸送量,請參閱在 Azure Cosmos DB 資料庫上設定佈建輸送量。 若要了解如何在資料上設定自動調整輸送量,請參閱佈建自動調整輸送量。
因為資料庫共用內的所有容器都會共用佈建輸送量,因此,Azure Cosmos DB 不會針對該資料庫中的特定容器提供任何可預測的輸送量保證。 特定容器可接收的輸送量部分取決於:
- 容器數目。
- 對於各種容器所選擇的分割區索引鍵。
- 散發於容器中各種不同邏輯分割區的工作負載。
當您想要在多個容器之間共用輸送量,但不想讓輸送量專屬於任何特定容器時,我們建議您在資料庫上設定輸送量。
以下是最好在資料庫層級佈建輸送量的範例:
在一組容器上共用資料庫的佈建輸送量非常適用於多租用戶應用程式。 每個使用者可分別用不同的 Azure Cosmos DB 容器來表示。
當您將從 VM 叢集或從內部部署實體伺服器裝載的 NoSQL 資料庫 (例如 MongoDB 或 Cassandra) 移轉到 Azure Cosmos DB 時,在一組容器之間共用資料庫的佈建輸送量就很實用。 將 Azure Cosmos DB 資料庫上設定的佈建輸送量想像為 MongoDB 或 Cassandra 叢集計算容量之佈建輸送量的邏輯對等項目 (但更符合成本效益且更具彈性)。
以所佈建輸送量在資料庫內建立的所有容器,在建立時都必須具有分割區索引鍵。 在任何指定的時間點,配置給資料庫內容器的輸送量都會散發到該容器的所有邏輯分割區。 當您有容器共用資料庫上設定的佈建輸送量時,就無法選擇性地將輸送量套用到特定容器或邏輯分割區。
如果邏輯分割區上的工作負載所取用的輸送量超過配置給特定邏輯分割區的輸送量時,您的作業將會受到速率限制。 發生速率限制時,您可以提高整個資料庫的輸送量或重試此作業。 如需有關分割的詳細資訊,請參閱邏輯分割區。
共用輸送量資料庫中的容器會共用配置給該資料庫的輸送量 (RU/秒)。 使用標準 (手動) 佈建輸送量時,資料庫上最多可以有 25 個最小 400 RU/秒的容器。 使用自動調整佈建輸送量時,資料庫中最多可以有 25 個容器,且自動調整下限為 1000 RU/秒 (在 100 - 1000 RU/秒之間調整)。
注意
我們在 2020 年 2 月引進了一項變更,可讓您在共用的輸送量資料庫中最多擁有 25 個容器,讓輸送量更能在容器之間共用。 在前 25 個容器之後,您就可以新增更多容器至資料庫,唯一前提是其是使用專用輸送量佈建的,這與資料庫的共用輸送量不同。
如果 Azure Cosmos DB 帳戶已包含的共用輸送量資料庫有 >= 25 個容器,則該帳戶及相同 Azure 訂用帳戶中的其他所有帳戶都不受制於這項變更。 如果您有任何意見反應或問題,請連絡產品支援。
如果您的工作負載涉及刪除和重新建立資料庫中的所有集合,建議您先捨棄空的資料庫並重新建立新的資料庫,然後再建立集合。 下圖顯示實體分割區如何裝載一或多個屬於資料庫內不同容器的邏輯分割區:
在資料庫和容器上設定輸送量
您可以結合這兩個模型, 就能同時在資料庫和容器上佈建輸送量。 下列範例說明如何在 Azure Cosmos DB 資料庫和容器上佈建標準(手動) 佈建輸送量:
您可以使用 "K" 個 RU 的標準 (手動) 佈建輸送量來建立名為 Z 的 Azure Cosmos DB 資料庫。
接下來,在資料庫中建立五個容器,名稱分別為 A、B、C、D 和 E。 建立容器 B 時,請務必啟用 [為此容器佈建專用輸送量] 選項,並在此容器上明確設定 "P" 個 RU 的佈建輸送量。 只有在建立資料庫和容器時,才能設定共用和專用輸送量。
"K" RU/秒輸送量會在四個容器 A、C、D 和 E 之間共用。A、C、D 或 E 可用的確切輸送量數量會有所不同。 沒有適用於每個個別容器輸送量的 SLA。
容器 B 保證能夠隨時取得 "P" RU/秒的輸送量, 並受到 SLA 支援。
注意
具有佈建輸送量的容器無法轉換為共用資料庫容器。 反之,共用資料庫容器也無法轉換為具有專用輸送量。 您必須將資料移至已設定所需輸送量的容器。 (NoSQL、MongoDB 和 Cassandra API 的容器複製作業有助於處理此程序。)
更新資料庫和容器上的輸送量
在建立 Azure Cosmos DB 容器或資料庫之後,您可以更新佈建輸送量。 您可以在資料庫或容器上設定的最大佈建輸送量沒有任何限制。
目前佈建的輸送量
您可以在 Azure 入口網站中或使用 SDK 來擷取容器或資料庫的佈建輸送量:
- .NET SDK 的 Container.ReadThroughputAsync。
- JAVA SDK 的 CosmosContainer.readThroughput。
這些方法的回應也包含容器或資料庫的最小佈建輸送量:
- .NET SDK 的 ThroughputResponse.MinThroughput。
- JAVA SDK 的 ThroughputResponse.getMinThroughput()。
實際的最小 RU/秒可能會根據您的帳戶設定而有所不同。 如需詳細資訊,請參閱自動調整常見問題集。
變更佈建的輸送量
您可以透過 Azure 入口網站或使用 SDK 來縮放容器或資料庫的佈建輸送量:
- .NET SDK 的 Container.ReplaceThroughputAsync。
- JAVA SDK 的 CosmosContainer.replaceThroughput。
如果您要減少佈建的輸送量,最多可將其降到最小值。
如果您要增加佈建的輸送量,多數情況下,作業都會立即完成。 但在某些情況下,因為有系統工作佈建所需的資源,作業可能費時較久。 在此情況下,嘗試在此作業進行時修改佈建的輸送量會產生 HTTP 423 回應,並出現錯誤訊息,指出有另一個調整作業進行中。
若要深入了解,請參閱縮放佈建輸送量 (RU/秒) 的最佳做法一文。
注意
如果您在規劃非常大的擷取工作負載,而需要大幅增加佈建的輸送量,請記住,縮放作業沒有 SLA,而如上一段所述,大幅增加時費時甚久。 您可以事先規劃,並在工作負載開始之前開始縮放,然後使用下列方法來檢查進度。
請參閱目前佈建的輸送量,並使用下列方法以程式設計方式檢查縮放進度:
- .NET SDK 的 ThroughputResponse.IsReplacePending。
- JAVA SDK 的 ThroughputResponse.isReplacePending()。
您可以使用 Azure 監視器計量,檢視資源上的佈建輸送量 (RU/秒) 和儲存體歷程記錄。
模型的比較
下表顯示在資料庫上與在容器上佈建標準 (手動) 輸送量之間的比較。
參數 | 資料庫上的標準 (手動) 輸送量 | 容器上的標準 (手動) 輸送量 | 資料庫上的自動調整輸送量 | 容器上的自動調整輸送量 |
---|---|---|---|---|
進入點 (最小 RU/秒) | 400 RU/秒。 最多可以有 25 個容器,每個容器沒有最小 RU/秒。 | 400 | 在 100 - 1000 RU/秒之間自動調整。 最多可以有 25 個容器,每個容器沒有最小 RU/秒。 | 在 100 - 1000 RU/秒之間自動調整。 |
每個容器的最小 RU/秒 | -- | 400 | -- | 在 100 - 1000 RU/秒之間自動調整 |
RU 數目上限 | 在資料庫上無限制。 | 在容器上無限制。 | 在資料庫上無限制。 | 在容器上無限制。 |
指派給或適用於特定容器的 RU | 不提供保證。 指派給指定容器的 RU 視屬性而定。 屬性可以選擇是共用輸送量之容器的資料分割索引鍵、工作負載散發,以及容器的數目。 | 設定於容器上的所有 RU 都是專為該容器保留的。 | 不提供保證。 指派給指定容器的 RU 視屬性而定。 屬性可以選擇是共用輸送量之容器的資料分割索引鍵、工作負載散發,以及容器的數目。 | 設定於容器上的所有 RU 都是專為該容器保留的。 |
容器的儲存體上限 | 無限制。 | 無限制 | 無限制 | 無限制 |
容器中每個邏輯分割區的輸送量上限 | 10K RU/秒 | 10K RU/秒 | 10K RU/秒 | 10K RU/秒 |
容器中每個邏輯分割區的儲存體上限 (資料 + 索引) | 20 GB | 20 GB | 20 GB | 20 GB |
下一步
- 深入了解邏輯分割區。
- 了解如何在 Azure Cosmos DB 容器上佈建標準 (手動) 輸送量。
- 了解如何在 Azure Cosmos DB 資料庫上佈建標準 (手動) 輸送量。
- 了解如何在 Azure Cosmos DB 資料庫或容器上佈建自動調整輸送量。
- 正在嘗試為遷移至 Azure Cosmos DB 進行容量規劃嗎? 您可以使用現有資料庫叢集的相關資訊進行容量規劃。
- 如果您知道現有資料庫叢集中的虛擬核心和伺服器數目,請參閱使用虛擬核心或 vCPU 來估計要求單位
- 如果您知道目前資料庫工作負載的一般要求率,請參閱使用 Azure Cosmos DB 容量規劃工具來估計要求單位