ストレージ サイズの計算

このページでは、MongoDB 互換の Firestore のドキュメント、フィールド、インデックス エントリのストレージ サイズについて説明します。

このストレージの費用については、料金ページをご覧ください。

文字列のサイズ

文字列のサイズは、UTF-8 でエンコードされたバイト数 + 1 の値として計算されます。

以下は、文字列として保存されます。

  • コレクション名
  • フィールド名
  • 文字列フィールドの値(_id を含む)

例:

  • コレクション名 tasks には、5 バイト + 1 バイト、合計 6 バイトが使用されます。
  • フィールド名 description には 11 バイト + 1 バイト、合計 12 バイトが使用されます。

フィールド値のサイズ

次の表に、フィールド値のサイズを型別に示します。

タイプ サイズ
配列 各値のサイズの合計
ブール値 1 バイト
バイナリデータ 汎用でない(0 以外)サブタイプの場合はバイト長 + 1
日付 8 バイト
Double 8 バイト
Double128 16 バイト
32 ビット整数 4 バイト
64 ビット整数(long) 8 バイト
オブジェクト 各フィールド名の文字列サイズと、埋め込みオブジェクト内の各フィールド値のサイズの合計
Min Key 1 バイト
Max Key 1 バイト
Null 1 バイト
正規表現 (パターンの長さ + 1)+(オプションの長さ + 1)
タイムスタンプ 8 バイト
文字列 UTF-8 でエンコードされたバイト数 + 1

たとえば、done という名前のブール値フィールドは 6 バイトを使用します。

  • done フィールド名に 5 バイト
  • ブール値に 1 バイト

ドキュメントのサイズ

ドキュメントのサイズは以下の合計値となります。

コレクション tasks 内のドキュメントの例を次に示します。

{
  "_id": "my_task_id",
  "type": "Personal",
  "done": false,
  "priority": 1,
  "description": "Learn Cloud Firestore"
}

フィールドの合計サイズは 78 バイトです。

フィールド名と値 フィールドのサイズ(バイト)
"_id": "my_task_id" フィールドの文字列値 11
"type": "Personal" 14
フィールド名 5 + フィールドの文字列値 9
"done": false 6
フィールド名 5 + フィールドのブール値 1
"priority": 1 17
フィールド名 9 + フィールドの 32 ビット整数値 4
"description": "Learn Cloud Firestore" 34
フィールド名 12 + フィールドの文字列値 22

この結果、ドキュメントのサイズは 6 + 78 + 48 = 132 バイトとなります。

  • コレクション名に 6
  • フィールドに 71 バイト
  • 追加の 48 バイト

インデックス エントリのサイズ

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

tasks コレクション内のドキュメントについて考えてみましょう。

{
  "_id": "my_task_id",
  "type": "Personal",
  "done": false,
  "priority": 1,
  "description": "Learn Cloud Firestore"
}

done フィールドと priority フィールド(どちらも昇順)のインデックスの場合、このインデックスのエントリの合計サイズは 70 バイトになります。

  • コレクション名 tasks に 6 バイト
  • _id フィールドの値に 11 バイト
  • ブール値フィールドの値に 1 バイト
  • 32 ビット整数フィールドの値に 4 バイト
  • 追加の 48 バイト

スパース インデックスの場合、ドキュメントにフィールドが含まれていないと、インデックス エントリは作成されません。ドキュメントにインデックス付きフィールドが 1 つ以上含まれている場合、存在しないインデックス付きフィールドが NULL に設定されたインデックス エントリが作成されます。

変更ストリーム イベント エントリのサイズ

変更ストリーム イベントのサイズは、次の合計です。

  • コレクション名の文字列サイズの合計(x2)。
  • ドキュメントの挿入イベントと更新イベントの場合:
    • 文字列サイズの合計( fullDocument または updateDescription 内の各フィールド名の合計(_id を除く)。
    • フィールド値 のサイズの合計 fullDocument または updateDescription。 (_id を含む)。
  • 複数のドキュメント トランザクションに適用される場合は、lsidtxnNumber に追加の 24 バイト。
  • 追加の 92 バイト

tasks コレクション内のドキュメントの挿入イベントの例を考えてみましょう。

{
  "_id": { <Resume Token> },
  "operationType": "insert",
  "clusterTime": <Timestamp>,
  "wallTime": <ISODate>,
  "ns": {
     "db": "db",
     "coll": "tasks"
  },
  "documentKey": {
     "_id": "my_task_id"
  },
  "fullDocument": {
     "_id": "my_task_id",
     "description": "Learn Cloud Firestore"
  },
}

変更ストリーム イベントの合計サイズは 149 バイトです。

  • 一般的なメタデータに 92 バイト
  • コレクション名 tasks に基づく 12 バイト(6 バイト)* 2
  • _id フィールドの値に 11 バイト
  • description フィールド名に 12 バイト
  • description フィールドの値に 22 バイト

テキスト検索インデックス エントリのサイズ

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

  • コレクション名の文字列サイズ
  • _id 値のサイズ
  • インデックス付きフィールド値のバイト数の合計(x2)
  • 一般的なメタデータに追加の 48 バイト

tasks コレクション内の _id my_task_id を持つドキュメントの挿入イベントの例を考えてみましょう。

{
    "_id": "my_place",
     "type": "Restaurant",
     "visited": false,
     "priority": 1,
     "location": GeoPoint(longitude, latitude)
}

description のテキスト検索インデックス エントリの合計サイズは、次の理由により 105 バイトです。

  • コレクション名 tasks に 6 バイト
  • _id 値に 11 バイト
  • description フィールド x2 に 22 バイトに基づく 44 バイト
  • 一般的なメタデータに追加の 48 バイト

地理空間インデックス エントリのサイズ

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

  • コレクション名の文字列サイズ
  • _id 値のサイズ
  • インデックス付きの地理空間ポイントごとに 128 バイト
  • 一般的なメタデータに追加の 48 バイト

places コレクション内の _id my_place を持つドキュメントの挿入イベントの例を考えてみましょう。

{
    "_id": "my_place",
     "type": "Restaurant",
     "visited": false,
     "priority": 1,
     "location": GeoPoint(longitude, latitude)
}

location の地理空間インデックス エントリの合計サイズは、次の理由により 192 バイトです。

  • コレクション名 places に 7 バイト
  • ドキュメント ID に 9 バイト
  • location フィールドに 128 バイト
  • 一般的なメタデータに追加の 48 バイト

次のステップ

料金の詳細について学ぶ。