儲存空間大小計算

本頁面說明實體、索引鍵、屬性和索引項目在 Firestore (Datastore 模式) 中的儲存空間大小。您可以在 Datastore 模式定價相關頁面查詢此儲存空間的費用。

字串大小

字串大小按 UTF-8 編碼位元組的數目 + 1 計算。

以下均以字串形式儲存:

  • 索引鍵
  • 種類名稱
  • 命名空間名稱 (預設命名空間的大小是 0)
  • 屬性名稱
  • 字串屬性值

例如:

  • Task 種類的名稱使用 4 個位元組 + 1 個位元組,共 5 個位元組。
  • description 屬性的名稱使用 11 個位元組 + 1 個位元組,共 12 個位元組。
  • my_name_space 命名空間使用 13 個位元組 + 1 個位元組,共 14 個位元組。

索引鍵大小

索引鍵的大小是以下幾項的總和:

  • 命名空間字串大小 (如不在預設命名空間中)
  • 完整索引鍵路徑字串大小 (整數 ID 各有 8 個位元組)
  • 16 個位元組

某個索引鍵在預設命名空間中,種類是 Task,有一個數值 ID,沒有祖系:

Task id:5730082031140864

索引鍵大小是 5 + 8 + 16 = 29 個位元組:

  • Task 種類名稱佔 5 個位元組
  • 數值 ID 佔 8 個位元組
  • 索引鍵佔 16 個位元組

某個索引鍵在預設命名空間中,種類是 Task,有一個字串 ID,沒有祖系:

Task name:my_task_id

索引鍵大小是 5 + 11 + 16 = 32 個位元組:

  • Task 種類名稱佔 5 個位元組
  • my_task_id 字串 ID 佔 11 個位元組
  • 索引鍵佔 16 個位元組

Task 實體在預設命名空間中,有一個 TaskList 祖系:

TaskList id:5654313976201216 > Task id:5629499534213120

祖系使用 9 + 8 = 17 個位元組:

  • TaskList 種類名稱佔 9 個位元組
  • 數值 ID 佔 8 個位元組

因此,一個 Task 實體 (含一個 TaskList 祖系) 的索引鍵大小使用 17 + 5 + 8 + 16 = 46 個位元組。

  • 祖系佔 17 個位元組
  • Task 種類名稱佔 5 個位元組
  • 數值 ID 佔 8 個位元組
  • 索引鍵佔 16 個位元組

如果這個實體位於 my_name_space 命名空間,索引鍵大小就是 14 + 46 = 60 個位元組,因為 my_name_space 名稱使用 14 個位元組。

屬性大小

屬性的大小是以下幾項的總和:

  • 屬性名稱字串大小
  • 屬性值的大小

以下依類型顯示屬性值的大小。

類型 大小
陣列 其值的大小總和
Blob 位元組長度
布林值 1 個位元組
Double 8 個位元組
嵌入實體 實體大小
地理點 16 個位元組
整數 8 個位元組
索引鍵 索引鍵大小
Null 1 個位元組
字串 UTF-8 編碼位元組數目 + 1
時間戳記 8 個位元組

舉例來說,若屬性的名稱是 done、類型是布林值,則會使用 6 個位元組:

  • done 屬性名稱佔 5 個位元組
  • 布林值佔 1 個位元組

實體大小

實體的大小是以下幾項的總和:

此範例是在命名空間中的實體,其種類為 Task,有一個數值 ID,沒有祖系:

Task id:5730082031140864
 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Google Cloud Datastore"

屬性的總大小是 78 個位元組:

屬性名稱和值 屬性大小 (單位是位元組)
"type": "Personal" 14
5 個位元組 (屬性名稱) + 9 個位元組 (屬性字串值)
"done": false 6
5 個屬性名稱 + 1 個屬性布林值
"priority": 1 屬性名稱佔 17
9 個 + 屬性整數值佔 8 個
"description": "Learn Google Cloud Datastore" 41
屬性名稱佔 12 個 + 屬性字串值佔 29 個

因此,實體大小是 29 + 78 + 32 = 139 個位元組:

  • 索引鍵佔 29 個位元組
  • 屬性佔 78 個位元組
  • 一個實體佔 32 個位元組

索引項目大小

以下列舉內建索引和複合式索引的索引項目大小計算方式。

內建索引

內建索引項目的大小是以下幾項的總和:

  • 索引實體的索引鍵大小
  • 索引屬性名稱的總和
  • 索引屬性值的總和
  • 索引實體種類名稱的大小
  • 32 個位元組

以一個在預設命名空間中的實體為例,其種類為 Task,有一個數值 ID,沒有祖系:

Task id:5730082031140864
 - "type": "Personal"
 - "done": false
 - "priority": 1
 - "description": "Learn Google Cloud Datastore"

如果 done 是已建立索引的屬性,單一屬性 done 索引的內建索引項目就包含金鑰、done 屬性名稱和值、Task 種類名稱,以及一個索引項目使用的 32 個位元組。這個索引項目的總大小是 72 個位元組:

  • 金鑰佔 29 個
  • done 屬性名稱和布林值佔 6 個
  • Task 種類名稱佔 5 個
  • 一個索引項目佔 32 個

根據預設,Datastore 模式資料庫會自動為每一個實體種類的每一個屬性預先定義兩個單一屬性索引,一個按遞增順序排列,另一個按遞減順序排列。因此,這個屬性會包含一個在單一屬性 done 索引中按遞增順序排列且佔 72 個位元組的索引項目,還會包含一個在單一屬性 done 索引中按遞減順序排列且佔 72 個位元組的索引項目。

複合式索引

複合式索引項目的大小是以下幾項的總和:

以一個在預設命名空間中的實體為例,其種類為 Task,有一個數值 ID,沒有祖系:

indexes:
- kind: Task
  properties:
  - name: done
    direction: asc
  - name: priority
    direction: asc

假設有一個複合式索引使用 donepriority 屬性 (均按遞增順序):

此索引中的索引項目總大小是 70 個位元組:

  • 金鑰佔 29 個
  • done 屬性布林值佔 1 個
  • priority 屬性整數值佔 8 個
  • 一個索引項目佔 32 個

如果您不希望 Firestore (Datastore 模式) 留存屬性的索引,請將該屬性排除在您的索引之外。請注意,排除屬性會將該屬性自任何複合式索引移除。

後續步驟