ストレージ サイズの計算

このページでは、Datastore モードの Firestore でのエンティティ、キー、プロパティ、インデックス エントリのストレージ サイズについて説明します。このストレージの費用については、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 バイト
  • 1 つのキーにつき 16 バイト

種類 Task、デフォルトの名前空間、文字列 ID を持ち、祖先を持たないキーの場合:

Task name:my_task_id

キーサイズは 5 + 11 + 16 = 32 バイトとなります。

  • Task 種類名に 5 バイト
  • my_task_id 文字列 ID に 11 バイト
  • 1 つのキーにつき 16 バイト

デフォルトの名前空間で TaskList 祖先を持つ Task エンティティの場合:

TaskList id:5654313976201216 > Task id:5629499534213120

祖先には 9 + 8 = 17 バイトが使用されます。

  • TaskList 種類名に 9 バイト
  • 数値 ID に 8 バイト

この結果、TaskList 祖先を持つ Task エンティティのキーサイズは 17 + 5 + 8 + 16 = 46 バイトとなります。

  • 先祖に 17 バイト
  • Task 種類名に 5 バイト
  • 数値 ID に 8 バイト
  • 1 つのキーにつき 16 バイト

このエンティティが my_name_space 名前空間にある場合、my_name_space 名に 14 バイトが使用されるため、キーサイズは 14 + 46 = 60 バイトになります。

プロパティのサイズ

プロパティのサイズは、以下の合計値となります。

  • プロパティ名の文字列サイズ
  • プロパティ値のサイズ

型ごとのプロパティ値のサイズは次のとおりです。

タイプ サイズ
配列 各値のサイズの合計
Blob バイト長
ブール値 1 バイト
倍精度 8 バイト
埋め込みエンティティ エンティティ サイズ
地理的座標 16 バイト
整数 8 バイト
キー キーサイズ
Null 1 バイト
文字列 UTF-8 でエンコードされたバイト数 + 1
タイムスタンプ 8 バイト

たとえば、型がブール値の done という名前のプロパティには 6 バイトが使用されます。

  • done プロパティ名に 5 バイト
  • ブール値に 1 バイト

エンティティのサイズ

エンティティのサイズは、以下の合計値となります。

たとえば、デフォルトの名前空間にあり、数値 ID を持ち、祖先を持たない種類 Task があるとします。

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 バイト

たとえば、デフォルトの名前空間にあり、数値 ID を持ち祖先を持たない種類 Task のエンティティがあるとします。

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
  • 1 つのインデックス エントリにつき 32

デフォルトでは、Datastore モードのデータベースではエンティティの個々の種類に対し、1 つのプロパティにつき 2 つの単一プロパティ インデックス(昇順用と降順用)が自動的に事前定義されます。したがってこのエンティティの場合、単一プロパティ done の、昇順用インデックスに対するサイズ 72 バイトのインデックス エントリと、単一プロパティ done の、降順用インデックスに対するサイズ 72 バイトのインデックス エントリとが定義されます。

複合インデックス

複合インデックス エントリのサイズは、以下の合計値となります。

たとえば、デフォルトの名前空間にあり、数値 ID を持ち祖先を持たない種類 Task のエンティティがあるとします。

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

done プロパティと priority プロパティ(どちらも昇順)を使用する複合インデックスについて考えてみます。

このインデックス内のインデックス エントリの合計サイズは、70 バイトとなります。

  • キーに 29
  • done プロパティ ブール値に 1
  • priority プロパティ整数値に 8
  • 1 つのインデックス エントリにつき 32

Datastore モードの Firestore でプロパティのインデックスを維持しないようにするには、インデックスからプロパティを除外します。プロパティを除外すると、このプロパティがすべての複合インデックスから削除されることに注意してください。

次のステップ