簡體   English   中英

Azure Cosmos DB 表中查找表的分區鍵

[英]Partition key for a lookup table in Azure Cosmos DB Tables

我有一個非常簡單的查找表,我想從 Azure 函數調用。

架構非常簡單: Name | Value 1 | Value 2 Name | Value 1 | Value 2

名稱將是唯一的,但值 1 和值 2 將不是。 查找表中沒有其他數據。

對於 Azure 表,您需要一個分區鍵和一個行鍵。 顯然,rowkey 將是Name字段。

我究竟應該使用什么作為分區鍵?

現在,我正在使用常量,因為不會有大量數據(最多可能有幾百行),但使用常量似乎有悖於這一點。

此答案適用於所有 Cosmos DB 容器,包括表。

什么時候將 Cosmos DB 容器存儲在單個分區中(使用常量作為分區鍵)有意義?

  • 如果您確定容器的數據大小將始終保持在 10GB 以下。
  • 如果您確定容器的吞吐量要求將始終保持在 10,000 RU/s(每秒 RU)以下。

如果上述任一條件不成立,或者您不確定數據大小或吞吐量要求的未來增長,那么根據以下指南使用分區鍵將允許容器擴展。

Cosmos DB 中的分區工作原理

Cosmos 根據分區鍵將容器項分組為一組邏輯分區 然后將這些邏輯分區映射到物理分區 物理分區是構成底層數據庫基礎架構的計算/存儲單元。

您可以通過選擇分區鍵來確定如何將數據拆分為邏輯分區。 您無法控制邏輯分區如何映射到物理分區,Cosmos 會自動且透明地處理此問題。

跨大量物理分區分布容器是 Cosmos 允許容器擴展到幾乎無限大小和吞吐量的方式。

每個邏輯分區最多可以包含 10GB 的數據。 未分區容器的最大吞吐量為 10,000 RU/s,這意味着每個邏輯分區的限制為 10,000 RU/s。

分配給容器的 RU/s 平均分配到托管容器數據的所有物理分區。 例如,如果您的容器分配了 4,000 RU/s 並且其邏輯分區分布在 4 個物理分區上,那么每個物理分區將分配給它 1,000 RU/s,這也意味着如果您的一個物理分區處於重負載或“熱”,它將被限制在 1,000 RU/s,而不是 4,000。 這就是為什么選擇一個分區鍵非常重要的原因,它可以跨分區均勻分布數據和訪問數據。

如果您的容器位於單個邏輯分區中,它將始終映射到單個物理分區,並且容器的整個 RU/s 分配將始終可用。

所有 Cosmos DB 事務的范圍都限定在單個邏輯分區內,並且存儲過程或觸發器的執行也限定在單個邏輯分區內。

如何選擇一個好的分區鍵

選擇一個分區鍵,將您的數據均勻分布在邏輯分區之間,這反過來將有助於確保數據在物理分區之間均勻映射。 這將防止“瓶頸”或“熱”分區,這將導致速率限制並可能增加您的成本。

選擇一個分區鍵,作為大部分查詢的過濾條件。 通過為您的查詢提供分區鍵作為過濾器,Cosmos 可以有效地將您的查詢路由到正確的分區。 如果未提供分區鍵,則會導致“扇出”查詢,該查詢將發送到所有分區,這將增加您的 RU 成本並可能影響性能。 如果您經常根據多個字段進行過濾,請參閱本文以獲取指導。

概括

  • 在 Cosmos DB 中對容器進行分區的主要目的是允許容器在存儲和吞吐量方面進行擴展。
  • 數據大小或吞吐量要求不會顯着增長的小型容器可以使用單個分區。
  • 大型容器或預計會增加數據大小或吞吐量要求的容器應使用精心選擇的分區鍵進行分區。
  • 分區鍵的選擇至關重要,可能會顯着影響您的擴展能力、RU 成本和查詢性能。

暫無
暫無

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

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