計費示例

本頁面提供範例,說明在一些常見情境中,如何計算帳單單位。請注意,每項查詢處理的資料量可能不同,取決於查詢方案、資料形狀和可用索引等因素。

建議使用「查詢說明」功能,進一步瞭解特定查詢的成本和效能。

讀取作業

大部分的讀取作業都涉及對特定文件執行點讀取,或是根據 ID 掃描資料範圍。讀取作業會耗用讀取單位。請參閱下列範例。

全文搜尋查詢的費用會區分文字索引的搜尋費用和文件擷取費用。文字索引的搜尋費用取決於查詢的複雜程度,以及索引中掃描的資料量 (用於尋找結果)。影響這項費用的因素包括搜尋字詞的數量和性質 (例如字詞、片語)、是否套用相關性評分,以及需要檢查的索引項目數量。擷取相關文件的費用則取決於搜尋階段完成後擷取的文件數量和大小。

下表列出為植物苗圃的電子商務產品目錄執行全文搜尋查詢時的相關費用。這個範例假設集合中有 200,000 個產品資訊,每個產品資訊文件為 2 KiB,對應的文字搜尋索引大小約為 100 MiB。

查詢 程式碼範例 每個查詢預估耗用的讀取單元 預估費用 (區域:us-central1,以美元計價)
搜尋稀有的「乾水」堆疊式平盤產品,結果會擷取 3 份文件。
db.products.find(
  {$text: {$search: '"dry water" stack flat'}}
);

讀取單元總數 10 個

根據全文搜尋的 7 個單位,以及傳回文件的 3 個額外單位計算。

每百萬次查詢 $0.50 美元
搜尋所有室內柑橘樹,結果會擷取 36 份文件。
db.products.find(
  {$text: {$search: '"indoor" "citrus" "tree"'}}
);

讀取單元總數:42

根據全文搜尋的 6 個單位,以及傳回文件的 36 個額外單位計算。

每百萬次查詢 $2.10 美元
搜尋陽台花盆,這類產品的相符項目很多。依關聯性排序結果,並限制為前 50 個搜尋結果。
db.products.find(
  {$text: {$search: 'balcony planter'}}
).sort({score: {$meta: "textScore"}}).limit(50);

75 個讀取單元

全文搜尋為 25 個單位,傳回的文件則為額外 50 個單位。

每百萬次查詢 $3.75 美元

以下範例說明不同的查詢模式如何影響費用:

  • 「乾水」查詢包含詞組 ("dry water") 和其他字詞。詞組搜尋較為複雜,因為查詢引擎需要檢查符記的鄰近程度和順序,因此搜尋階段會產生 7 個讀取單元。由於符合條件的文件很少,因此文件擷取費用較低。
  • 「室內」、「柑橘」、「樹」查詢會搜尋三個不同的字詞。 雖然每個字詞的複雜程度略低於詞組搜尋,但仍需要查詢多個符記。與「dry water」範例相比,這個範例的搜尋索引掃描費用略低,為 6 個讀取單位,但傳回了 36 份文件,因此總費用較高。
  • balcony planter 查詢的全文搜尋費用最高,達到 25 個單位,且差距相當大。這主要是因為該查詢要求依相關性 (.sort({score: {$meta: "textScore"}}) ) 排序符合許多文件的字詞。如要判斷前 50 個最相關的結果,查詢引擎必須找出「balcony」或「planter」的所有可能相符項目,計算每個項目的相關性分數,然後排序。即使最終只會擷取 50 份文件,但對索引中大量候選項目進行評分和排序的過程,仍需要大量運算資源。字詞範圍廣泛,加上相關性評分的額外負擔,導致搜尋階段的費用較高。

地理空間查詢

地理空間查詢的費用取決於查詢的複雜度、使用的特定條件和排序方式,以及掃描相關地理空間索引中所有資料所需的資源。

下表列出地圖應用程式執行地理空間查詢時的相關費用。這個範例假設有 1,000,000 個文件代表搜尋點,每個搜尋點文件為 1KiB,對應的地理空間索引大小約為 60MiB。

查詢 程式碼範例 每個查詢預估耗用的讀取單元 預估費用 (區域:us-central1,以美元計價)
在 10 公里範圍內尋找所有興趣點,並傳回 10 個相符結果。
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 10000
    }}})

總共 16 個讀取單位。

地理空間查詢為 6 個讀取單元,傳回的文件則為額外 10 個單元。

每百萬次查詢 $0.80 美元
找出距離最遠 100 公里的所有景點,並從 1,000 個相符項目中,傳回距離最近的 10 個景點
db.pois.find(
  {location: {
    $near: {
      $geometry: <point>,
      $maxDistance: 100000
    }}}).limit(10)

總共 19 個讀取單位。

地理空間查詢為 9 個讀取單位,傳回的文件則為額外 10 個單位。

每百萬次查詢 $0.95 美元

以下範例說明不同的查詢模式如何影響費用:

  • 10 公里半徑查詢:這項查詢會掃描較小的地理區域。由於這項查詢只會在 10 公里半徑內找到 10 個相符項目,查詢引擎識別這些點並依距離排序 (如 $near 隱含),所需的工作量較少。因此,索引掃描成本較低,為 6 個讀取單位。
  • 100 公里半徑查詢:這項查詢涵蓋的範圍較大,這項查詢會在 100 公里半徑內找出 1,000 個潛在相符項目。如要滿足前 10 個最接近點的要求,查詢引擎必須計算距離,並在索引中排序數量多得多的候選項目 (最多 1,000 個點)。由於篩選和排序的點數更多,因此這項額外的運算工作會導致地理空間查詢成本較高 (9 個讀取單位),相較之下,10 公里查詢的成本較低,儘管兩者都只會傳回 10 份文件。

讀取點

點讀的計費範例如下:

  • 讀取單一 1 KiB 文件。耗用:1 個讀取單位
  • 讀取單一 4 KiB 文件。消耗:1 個讀取單位
  • 讀取單一 1 MiB 文件。消耗:256 個讀取單位
  • 讀取 100 份文件,每份 1 KiB。消耗:100 個讀取單位

掃描

下列範例包含掃描文件或索引項目的情境。

掃描文件

  • 查詢掃描 100 份文件,每份文件 1 KiB。消耗:25 個讀取單位

掃描索引

無論掃描的是文件還是索引,掃描費用 (以位元組計算) 都相同。不過,索引項目通常較小。因此,這類方法通常能以更具成本效益的方式掃描資料。

  • 查詢,掃描 100 個索引項目,每個項目 1 KiB。耗用:25 個讀取單位。
  • 查詢會掃描 100 個索引項目,每個項目 128 個位元組。消耗:4 個讀取單位。

文件或索引項目的最小大小

在某些情況下,您可能不需要讀取文件或索引項目的內容,即可滿足查詢需求。這包括簡單的計數查詢,例如計算集合中的文件總數。在這些情況下,掃描每個項目的最低費用為 32 個位元組。

  • 計算集合中的文件數量。這項查詢會掃描集合中的 1000 個項目。消耗量:8 個讀取單位。

掃描和點讀的組合

許多查詢會結合掃描和點讀,以滿足作業需求。

  • 查詢會掃描 128 個索引項目,每個項目 256 個位元組,並對 128 份文件執行點讀取作業,每份文件 4 KiB。消耗:136 個讀取單位,包括:
    • 點讀取 128 個讀取單元
    • 索引掃描作業的 8 個讀取單元

查詢說明

查詢說明可協助您瞭解資料庫如何執行查詢。您可根據這些詳細資料最佳化查詢。

使用查詢說明時,須支付下列費用:

  • 查詢說明,可執行查詢:會產生查詢費用。
  • 使用「僅限計畫」選項的查詢說明。消耗:1 個讀取單元 (查詢的最低費用)

寫入作業

寫入作業 (建立、更新和刪除) 的費用,是根據作業期間建立、修改或刪除的文件和索引大小計算。寫入作業會消耗寫入單位,寫入單位是以 1 KiB 為單位計算。

簡單的寫入作業 (例如依文件 ID 更新) 只會產生寫入費用。如果寫入作業需要查詢才能完成,則會額外產生與查詢相關的讀取費用。

請參閱以下範例。

建立

  • 建立不含索引的新 10 KiB 文件。消耗:10 個寫入單位
  • 在集合中建立 1 KiB 的文件,其中包含 1 個 256 位元組的索引項目。消耗:2 個寫入單位

更新

  • 依文件 ID 尋找 10 KiB 的文件,並更新集合中沒有索引的文件。消耗:10 個寫入單位
  • 依文件 ID 尋找 1 KiB 的文件,並更新 1 個欄位,其中包含 1 個 256 位元組的索引項目。消耗:3 個寫入單位。注意:在這種情況下更新索引項目會耗用 2 個寫入單位,一個用於刪除,一個用於重新建立索引項目。
  • 依文件 ID 找出 1 KiB 的文件,但不更新任何內容 (沒有變更)。消耗:1 個寫入單元 (最低寫入費用)
  • 查詢集合中的所有 1 KiB 文件 (掃描 1, 000 份文件),並在集合中插入新的 256 位元組欄位 (集合中沒有索引):1,000 個讀取單位和 1, 000 個寫入單位。

刪除

  • 刪除 1 KiB 的文件,該文件在集合中具有 1 個索引。消耗:2 個寫入單位
  • 刪除 1 KiB 的文件,該集合沒有任何索引。消耗:1 個寫入單位

索引建構

建立索引時,系統會針對建立或修改的索引項目收費。每當新增或移除索引定義時,就會產生這些費用。索引項目的計費方式與寫入作業相同,每 1 KiB 產生 1 個寫入單位。

  • 為含有 500 份文件的集合建立新索引,每個索引項目為 1 KiB,因此會消耗 500 個寫入單位。
  • 刪除含有 500 份文件的集合現有索引,每個刪除的索引項目為 1 KiB。消耗 500 個寫入單位。