このページでは、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
プロパティ名とブール値に 6Task
種類名に 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
プロパティ ブール値に 1priority
プロパティ整数値に 8- 1 つのインデックス エントリにつき 32
Datastore モードの Firestore でプロパティのインデックスを維持しないようにするには、インデックスからプロパティを除外します。プロパティを除外すると、このプロパティがすべての複合インデックスから削除されることに注意してください。
次のステップ
- Datastore モードの料金について確認する。
- Datastore モードのインデックスについて学習する。