使用 Azure Cosmos DB 中的資料分割圖表

適用於: Gremlin

Azure Cosmos DB 中的 API for Gremlin 的主要功能之一,是能夠透過水平調整處理大規模的圖形。 容器可以在儲存體和輸送量方面獨立調整。 您可以在 Azure Cosmos DB 中,建立能自動縮放來儲存圖表資料的容器。 資料根據指定的分割區金鑰來自動取得平衡。

如果容器預計儲存量大小超過 20 GB,或如果想要每秒配置 10,000 個以上的要求單位 (RU),即必須在內部執行分割區。 系統會根據您指定的分割區索引鍵,自動分割資料。 如果您從 Azure 入口網站或 3.x 或更高版本的 Gremlin 驅動程式建立圖形容器,就需要分割區索引鍵。 如果您使用 2.x 或較舊版本的 Gremlin 驅動程式,則不需要分割區索引鍵。

Azure Cosmos DB 分割區機制中的相同一般原則適用於下文所述的一些圖形特定最佳化。

Graph partitioning.

圖表分割機制

下列指導方針描述 Azure Cosmos DB 分割區策略的運作方式:

  • 頂點和邊緣會儲存為 JSON 文件

  • 端點需要資料分割索引鍵。 此索引鍵會決定頂點將透過雜湊演算法儲存在哪個資料分割中。 分割區索引鍵的屬性名稱是在建立新容器時定義,其格式為:/partitioning-key-name

  • 邊緣將會連同其來源頂點一起儲存。 換句話說,對每個頂點而言,其分割區金鑰將會定義其本身及其外傳邊緣的儲存位置。 之所以要最佳化,是為了避免在圖表查詢中使用 out() 基數時出現跨分割區查詢。

  • 邊緣包含指向頂點的參考。 所有邊緣都會和所指向的分割區索引鍵和頂點識別碼一起儲存。 此計算會讓所有 out() 方向的查詢一律為限定範圍的分割區查詢,而不是盲目的跨分割區查詢。

  • 圖形查詢必須指定資料分割索引鍵。 若要在 Azure Cosmos DB 中充分利用水平資料分割,則應在選取單一端點時盡可能指定資料分割索引鍵。 以下是在資料分割的圖表中選取一或多個頂點的查詢:

    • 不支援使用 /id/label 作為 API for Gremlin 中容器的分割區索引鍵。

    • 依識別碼選取頂點,然後使用 .has() 步驟指定資料分割索引鍵屬性

      g.V('vertex_id').has('partitionKey', 'partitionKey_value')
      
    • 藉由指定包含資料分割索引鍵值和識別碼的 Tuple 來選取頂點:

      g.V(['partitionKey_value', 'vertex_id'])
      
    • 選取一組包含識別碼的頂點,然後指定分割區索引鍵值的清單

      g.V('vertex_id0', 'vertex_id1', 'vertex_id2', …).has('partitionKey', within('partitionKey_value0', 'partitionKey_value01', 'partitionKey_value02', …)
      
    • 在查詢開始時使用分割區策略,並針對其餘 Gremlin 查詢範圍指定分割區:

      g.withStrategies(PartitionStrategy.build().partitionKey('partitionKey').readPartitions('partitionKey_value').create()).V()
      

使用資料分割圖表時的最佳做法

使用無限制容器進行資料分割圖表時,您可以使用下列指導方針來確保效能和延展性:

  • 在查詢頂點時務必要指定資料分割索引鍵值。 從已知資料分割取得頂點,是可達到效能的方法。 所有後續的相鄰作業一律限定在分割區範圍內,因為邊緣包含目標頂點的參考識別碼和分割區索引鍵。

  • 查詢邊緣時應盡可能使用外傳方向。 如前所述,邊緣會連同其外傳方向的來源頂點一起儲存。 依此模式為原則設計資料和查詢時,將可盡量降低進行跨資料分割查詢的可能性。 相反地,in() 查詢一律是昂貴的展開傳送查詢。

  • 選擇可將資料平均分散到每個資料分割的資料分割索引鍵。 此決策高度仰賴解決方案的資料模型。 請閱讀 Azure Cosmos DB 中的資料分割和調整,以深入了解如何建立適當的資料分割索引鍵。

  • 將查詢最佳化以在資料分割的界限內取得資料。 最佳的資料分割策略將與查詢模式相對應。 叢單一資料分割取得資料的查詢,將可提供最佳效能。

下一步

接下來,您可以繼續閱讀下列文章: