編輯

共用方式為


Azure Cosmos DB 中階層式分割區索引鍵的常見問題集

適用於:NoSQL MongoDB Cassandra Gremlin 桌子

階層式分割區索引鍵 (或子分割) 可讓您針對分割區索引鍵設定最多有三個層級的階層,以進一步最佳化資料散發並啟用更高的規模。 本文會回答有關 Azure Cosmos DB 階層式分割區索引鍵的常見問題。

是否可以將階層式分割區索引鍵新增至現有容器?

系統不支援將階層式分割區索引鍵新增至現有容器。 不過您可以使用自己偏好的階層式分割索引鍵建立新容器,並執行容器複製作業,將資料從現有容器複製到新容器。 如需如何複製資料的詳細資訊,請參閱容器複製作業

邏輯分割區索引鍵的大小是否有儲存體限制?

是。 就像目前的 Azure Cosmos DB 一樣,邏輯分割區大小仍然限制為 20 GB。 不過,使用階層式分割區索引鍵時,邏輯分割區現在是整個分割區索引鍵路徑。 例如,如果您依 TenantId -> UserId 進行分割,則範例邏輯分割區會是 Contoso_Alice。 使用子分割區表示您可以有 20 GB 的資料,其中分割區索引鍵值為 Contoso_Alice。 「Contoso」中的資料允許的儲存體數量實際上為 20 GB * 租用戶「Contoso」的唯一 UserId 數目。

實體分割區的儲存體和 RU/秒限制是否有任何變更?

否。 就像目前的 Azure Cosmos DB 一樣,實體分割區可以保有 50 GB 的儲存體,最多可提供 10,000 RU/秒。 不過,使用階層式分割索引鍵時,如果特定分割區索引鍵前置詞的資料 (例如 TenantId) 位於多個實體分割區中,則子分割表示單一 TenantId 可達到的 RU/秒總數可以超過 10,000 RU/秒。

如果我進行查詢,並只在路徑的「中間」指定分割區索引鍵,會發生什麼事?

您的查詢會是跨分割區查詢。 例如,如果您依 TenantId -> UserId 進行分割,而且只在查詢中提供 UserId,此查詢會展開傳送至所有實體分割區。

若要使用 TenantId -> UserId 範例獲得有效率路由傳送的查詢,您有兩個選項:

  • 提供 TenantId。 查詢會移至包含 TenantId 資料的所有實體分割區。
  • 同時提供 TenantId 和 UserId。 查詢會移至包含 TenantId 和特定 UserId 的單一實體分割區。

是否必須在文件中建立新的屬性才能使用此功能?

否。 請在建立容器時指定您想要使用的分割區索引鍵路徑階層。 例如,如果您依 TenantId -> UserId 進行分割,則不需要將這些值串連來建立新的屬性。 請確定每個文件都有一個 TenantId 屬性和一個 UserId 屬性。 如需詳細資訊,請參閱子分割程式碼範例

我建立了基數不多的索引鍵階層。 我該怎麼做?

您所面對的情節,可能是工作負載只會叫用所有分割區的幾個實體分割區。 這可能表示階層式分割區索引鍵的一或多個層級具有低基數。 為了疑難排解此項情節,我們一律建議您重新建立階層式分割區索引鍵,而且您可以使用 DTS 變更索引鍵,並將容器資料複製到新容器。 如果無法執行此步驟,我們建議採取兩種因應措施以確保資料統一分布

  • 方法 1
  1. 您可以建立少於 10,000 RU 的容器,以確保您只有一個實體分割區。
  2. 內嵌約 5 GB 的資料,以確保沒有分割區分割。
  3. 擴大為您想要的 RU、繼續內嵌資料,而 Azure Cosmos DB 可確保實體分割區會統一分割。
  • 方法 2
  1. 您可以增加總供應項目達到更高的 RU 數目,並內嵌所有資料。
  2. 然後執行資料分割區合併,以確保工作負載分割區不會片段化並平均分佈
  3. 合併完成後,請縮減為原始所需的 RU 數目。

若要更充分掌控每個分割區的輸送量,您也可以使用輸送量轉散發,以確保工作負載所使用的分割區有足夠 RU 因應您未來的要求。

下一步