適用於: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:
- 您可以建立少於 10,000 RU 的容器,以確保您只有一個實體分割區。
- 內嵌約 5 GB 的資料,以確保沒有分割區分割。
- 擴大為您想要的 RU、繼續內嵌資料,而 Azure Cosmos DB 可確保實體分割區會統一分割。
- 方法 2:
- 您可以增加總供應項目達到更高的 RU 數目,並內嵌所有資料。
- 然後執行資料分割區合併,以確保工作負載分割區不會片段化並平均分佈
- 合併完成後,請縮減為原始所需的 RU 數目。
若要更充分掌控每個分割區的輸送量,您也可以使用輸送量轉散發,以確保工作負載所使用的分割區有足夠 RU 因應您未來的要求。
下一步
- 深入了解階層式分割區索引鍵。