共用方式為


最佳化 Azure Cosmos DB for MongoDB 中的寫入效能

適用於: MongoDB

最佳化寫入效能有助於充分利用 Azure Cosmos DB for MongoDB 的無限規模調整。 不同於其他受控 MongoDB 服務,適用於 MongoDB 的 API 會自動以透明的方式將集合分區 (使用分區集合的情況下),藉此無限擴充。

進行此操作時必須留意寫入資料的方式,在分區間平行處理和散佈資料,以充分利用您的資料庫與集合。 本文說明將寫入效能最佳化的最佳做法。

將負載分散到分區間

將資料寫入 MongoDB 集合的分區 API 時,會將資料分割 (分區) 成小型配量,並根據分區索引鍵欄位的值寫入每個分區。 您可以將每個配量視為虛擬機器的一小部分,裡頭只儲存包含一個唯一分區索引鍵值的文件。

如果您的應用程式會將大量資料寫入至單一分區,這個做法的效率就不高,因為應用程式只會將一個分區的輸送量提到最高,而不會將負載分散到所有的分區上。 將多個具有唯一分區索引鍵值的文件平行寫入,寫入負載就能平均分散在集合中。

這個做法的其中一個範例,是在目錄欄位上分區的產品目錄應用程式。 與其一次寫入至一個類別 (分區),同時寫入所有類別更能達到最大寫入輸送量。

減少索引數目

編製索引是一項絕佳功能,可大幅減少查詢資料所需的時間。 為實現最具彈性的查詢體驗,適用於 MongoDB 的 API 預設會對資料啟用萬用字元索引,以迅速查詢所有欄位。 不過在寫入資料時,包含萬用字元索引的所有索引都會產生額外的負載,因為寫入會變更集合和索引。

將索引數量減少至只剩支援查詢所需的索引量,將可讓寫入速度更快且更費用更低。 一般來說,我們建議您執行下列動作:

  • 您篩選的任何欄位都應該有對應的單一欄位索引。 此選項也會啟用多欄位篩選功能。
  • 您排序的任何欄位群組都應具有該群組的複合索引。

在 MongoDB 驅動程式中將排序設定為 false

根據預設,MongoDB 驅動程式會在寫入資料時,會將排序選項設定為 "true",這樣系統會依序逐一寫入每份文件。 此選項會降低寫入效能,因為每個寫入要求都必須等待前一個寫入要求完成才能進行。 寫入資料時,請將此選項設為 false 以改善效能。

db.collection.insertMany(
   [ <doc1> , <doc2>, ... ],
   {
      ordered: false
   }
)

調整最佳批次大小和執行緒計數

跨多個執行緒/程序的寫入作業平行處理是調整寫入的關鍵。 適用於 MongoDB 的 API 可接受為每個程序/執行緒最多寫入 1000 份文件。

如果您一次會在每個程序/執行緒寫入超過 1000 份文件,則應將用戶端函數 (例如 insertMany()) 限制為約 1000 份文件。 否則,用戶端會先等待每個批次完成認可,才會繼續進行下個批次。 某些情況下,以少於或稍微超過 1000 份文件來分割批次,速度會更快。

下一步