建立綜合分割區索引鍵

適用於:NoSQL

最佳做法是讓分割區索引鍵具有許多相異值,例如數百個或數千個。 目標是在與這些分割區索引鍵值相關聯的項目上平均散發您的資料和工作負載。 如果您的資料中沒有這類屬性,您可以建構綜合分割區索引鍵。 本文描述為 Azure Cosmos DB 容器產生綜合分割區索引鍵的幾種基本技巧。

串連項目的多個屬性

您可以藉由將多個屬性值串連到單一人工 partitionKey 屬性來形成分割區索引鍵。 這些索引鍵稱為綜合索引鍵。 例如,請考慮下列範例文件:

{
"deviceId": "abc-123",
"date": 2018
}

針對先前的文章,其中一個選項是將 /deviceId 或 /date 設為分割區索引鍵。 如果要依裝置識別碼或日期來分割容器,請使用此選項。 另一個選項是將這兩個值串連到一個綜合 partitionKey 屬性以用來作為分割區索引鍵。

{
"deviceId": "abc-123",
"date": 2018,
"partitionKey": "abc-123-2018"
}

在即時情節中,您的資料庫中可能有數以千計的項目。 不要手動新增綜合索引鍵,請定義用戶端邏輯來串連值,並將綜合索引鍵插入 Azure Cosmos DB 容器中的項目。

搭配隨機尾碼使用分割區索引鍵

另一個更平均散發工作負載的可行策略是在分割區索引鍵值結尾附加一個隨機數字。 當您以此方式散發項目時,您可以跨分割區執行平行的寫入作業。

其中一個範例是分割區索引鍵代表日期的情況。 您可以選擇介於 1 到 400 的隨機數字,並串連成日期的尾碼。 此方法產生 2018-08-09.12018-08-09.2 等等一直到 2018-08-09.400 的分割區索引鍵值。 由於您是將分割區索引鍵隨機化,因此每天在容器上的寫入作業都會平均分散在多個分割區中。 此方法會產生更好的平行處理原則及整體更高的輸送量。

使用預先計算尾碼的分割區索引鍵

隨機尾碼策略可以大幅改善寫入輸送量,但很難讀取特定的項目。 您不知道寫入該項目時所使用的尾碼值。 為了更輕鬆讀取個別項目,請使用預先計算的尾碼策略。 不要使用隨機數字在分割區之間分散項目,請改用根據您要查詢的項目而計算的數字。

在上一個範例中,容器以日期為分割區索引鍵。 現在,假設每個項目都有我們要存取的 Vehicle-Identification-Number (VIN) 屬性。 此外,假設您經常執行查詢依 VIN (除了日期) 來尋找項目。 在您的應用程式將項目寫入到容器之前,它可以根據 VIN 來計算雜湊尾碼,並將它附加至分割區索引鍵日期。 計算可能產生介於 1 和 400 之間平均分散的值。 此結果類似於隨機尾碼策略方法所產生的結果。 分割區索引鍵值先前是搭配計算結果串連的日期。

使用這個策略,寫入會在分割區索引鍵值之間以及在分割區之間平均分散。 因為您可以計算特定 Vehicle-Identification-Number 的分割區索引鍵值,輕鬆就能讀取特定的項目和日期。 此方法的優點是可以避免建立單一經常性分割區索引鍵,亦即負擔所有工作負載的分割區索引鍵。

下一步

您可以在下列文章中深入了解分割概念: