Firestore の料金
このドキュメントでは、Firestore の料金の詳細について説明します。
米ドル以外の通貨でお支払いの場合は、Cloud Platform SKU に記載されている該当通貨の料金が適用されます。
料金の概要
Firestore を使用すると、以下の項目に対し課金されます。
- 読み取り、書き込み、削除を行うドキュメントの数。
- クエリ条件を満たすために読み取られたインデックス エントリの数。 インデックス読み取りの詳細をご覧ください。
- データベースにより使用されるストレージの容量(メタデータとインデックスのオーバーヘッドを含む)。
- ネットワーク帯域幅の使用量。
ストレージと帯域幅の使用量はギビバイト(GiB)単位で計算されます(1 GiB は 230 バイト)。課金はすべて日単位で発生します。
この後の各セクションでは、Firestore の使用に伴う請求の仕組みについて詳しく説明します。
無料の割り当て
Firestore では、(default)
データベースを無料で使用できる無料の割り当てが用意されています。無料の割り当ての容量は以下のとおりです。
割り当てがさらに必要な場合は、Google Cloud プロジェクトに対する課金を有効にする必要があります。
割り当ては日単位で適用され、太平洋時間の午前 0 時頃にリセットされます。
無料割り当ての対象となるのは (default)
データベースのみです。
無料枠 | 割り当て |
---|---|
保存データ | 1 GiB |
ドキュメントの読み取り | 50,000/日 |
ドキュメントの書き込み | 20,000/日 |
ドキュメントの削除 | 20,000/日 |
送信データ転送 | 10 GiB/月 |
次のオペレーションと機能には、無料の使用量は含まれていません。次の機能を使用するには、課金を有効にする必要があります。
- 名前付き(デフォルト以外の)データベースの使用
- TTL の削除
- PITR データ
- データのバックアップ
- 復元オペレーション
これらの機能に対する課金の詳細については、ストレージ料金をご覧ください。
ロケーション別料金
次の表は、Firestore の利用ロケーションごとに、読み取り、書き込み、削除、保存にかかる料金を示しています。
米ドル以外の通貨でお支払いの場合は、Cloud Platform SKU に記載されている該当通貨の料金が適用されます。
名前付きデータベースの無料割り当てなし
名前付き(デフォルト以外の)データベースを作成するには、課金を有効にする必要があります。
名前付きデータベースの作成や削除に追加料金はかかりませんが、これらのデータベースは無料の割り当ての対象にはなりません。代わりに、これらの名前付きデータベースの使用量に対して課金されます。
読み取り、書き込み、削除
クエリを満たすために読み取られたドキュメントとインデックス エントリに対して課金されます。ドキュメントの書き込みと削除を行うたびに課金されます。
書き込みと削除の料金はシンプルです。書き込みの場合、set
オペレーションまたは update
オペレーションを実行するたびに書き込み 1 件としてカウントされます。
読み取りオペレーションの課金については注意すべき点があります。以下のセクションでは、これらの点について詳しく説明します。
インデックス エントリの読み取り
クエリによって読み取られた最大 1,000 個のインデックス エントリのバッチごとに 1 回の読み取りオペレーションとして課金されます。ただし、次の場合には課金されません。
K 最近傍ベクター検索クエリの場合、クエリによって読み取られた最大 100 個の kNN ベクター インデックス エントリのバッチごとに 1 回の読み取りオペレーションとして課金されます。
たとえば、
limit: 5
での次のベクター検索クエリが 5 個のドキュメントを返し、1,550 kNN ベクター インデックス エントリを読み取る場合、返されたドキュメントの 5 回の読み取りオペレーションと、インデックス エントリの 16 回の読み取りオペレーションに対して課金されます。// Requires single-field vector index const vectorQuery: VectorQuery = db.collection('cities').findNearest('embedding_field', FieldValue.vector([3.0, 1.0, 2.0]), { limit: 5, distanceMeasure: 'EUCLIDEAN' });
範囲フィールドが 1 つ以下のクエリでは、インデックス エントリの読み取りに対して課金されません。
たとえば、次のクエリには、1 つの等式フィールド(
age
)と 1 つの範囲フィールド(start_date
)が含まれており、インデックス エントリの読み取りに対して課金されません。db.collection("employees").whereEqualTo("age", 35) .whereGreaterThanOrEqualTo("start_date", new Date(2020, 1, 1))
次のクエリには 2 つの範囲フィールド(
age
とstart_date
)が含まれており、インデックス エントリの読み取りに対して課金されます。db.collection("employees").whereGreaterThanOrEqualTo("age", 35) .whereGreaterThanOrEqualTo("start_date", new Date(2020, 1, 1))
クエリ内に他の範囲フィールドが 1 つ以上ある場合、order by 句で表示されるフィールドは範囲フィールドと見なされます。したがって、次のクエリには 2 つの範囲フィールド(
age
とstart_date
)が含まれており、インデックス エントリの読み取りに対して課金されます。db.collection("employees").whereGreaterThanOrEqualTo("age", 35) .orderBy("start_date")
__name__
フィールドは、等式フィルタで唯一使用されているフィールドであっても、常に範囲フィールドと見なされます。したがって、次のクエリには 2 つの範囲フィールド(age
と__name__
)が含まれており、インデックス エントリの読み取りに対して課金されます。db.collection("employees").whereIn("__name__", Arrays.asList("/employees/Alice", "/employees/Bob")) .orderBy("age")
集約クエリ
集計クエリ(count()
、sum()
、avg()
など)の場合、上記で説明したように、クエリによるインデックス エントリの読み取りに対して課金されます。読み取るインデックス エントリが 0 個の集計クエリでも、1 回のドキュメントの読み取りの最低料金が発生します。
たとえば、0~1,000 個のインデックス エントリを読み取る count()
オペレーションは、1 回のドキュメントの読み取りとして課金されます。1,500 個のインデックス エントリを読み取る 1 回の count()
オペレーションは、2 回のドキュメントの読み取りとして課金されます。
使用するインデックスと読み取るインデックス エントリの詳細については、クエリの説明をご覧ください。
クエリ結果をリッスンする
Firestore ではクエリの結果をリッスンでき、クエリの結果が変化した時点でリアルタイムの更新を取得できます。
クエリの結果をリッスンする場合、結果セット内のドキュメントが追加または更新されるたびに、1 回の読み取りとして課金されます。また、ドキュメントに変更があったために結果セットから除外される場合も、1 回の読み取りとして課金されます(これとは対照的に、ドキュメントが削除される場合、これは読み取りとして課金されません)。
モバイル SDK とウェブ SDK のリスナーに対する課金は、オフラインの永続性が有効かどうかによっても異なります。
オフラインの永続性が有効で、リスナーが 30 分以上切断された場合(たとえばユーザーがオフラインになった場合)、新しいクエリを発行した場合と同様に、ドキュメントとインデックス エントリの読み取りに対して課金されます。
オフラインの永続性が無効になっている場合は、リスナーが切断されて再接続するたびに、新しいクエリを発行した場合と同様に、ドキュメントとインデックス エントリの読み取りに対して課金されます。
大きな結果セットを管理する
Firestore には、多数の結果を返すクエリを管理する際に役立ついくつかの機能があります。
- カーソル。長期実行クエリを再開できます。
- ページトークン。クエリ結果のページを設定できます。
- 上限。取得する結果の数を指定します。
- オフセット。一定数のドキュメントをスキップできます。
カーソル、ページトークン、および上限を使用する場合、追加コストは発生しません。これらの機能は実際に必要なドキュメントだけを読み取るので、コストを節約できます。
一方、オフセットを含むクエリを送信すると、スキップされるドキュメントごとに読み取り料金が課金されます。たとえば、クエリで 10 件分のオフセットを使用している場合、このクエリが 1 つのドキュメントを返すと、11 回の読み取りとして課金されます。このような追加コストが発生することから、可能な場合は常にオフセットではなくカーソルを使用してください。
ドキュメントの読み取り以外のクエリ
コレクション ID リストのリクエストなど、ドキュメントの読み取り以外のクエリは 1 回のドキュメント読み取りとして課金されます。完全な結果セットを取得するために複数のリクエストが必要な場合(ページ分けを使用している場合など)、リクエストごとに 1 回ずつ課金されます。
クエリの最小費用
クエリが結果を返さない場合でも、実行するクエリごとに 1 回の読み取り分の最小費用が発生します。
Firestore セキュリティ ルール
モバイル ライブラリおよびウェブ クライアント ライブラリで、Firestore セキュリティ ルールの exists()
、get()
、getAfter()
を使用して 1 つ以上のドキュメントをデータベースから読み取ると、以下のように追加の読み取り料金が課金されます。
Firestore セキュリティ ルールを評価するために必要な読み取りに対する課金が発生します。
たとえば、ルールで 3 つのドキュメントを参照しているが、Firestore がルールを評価するために読み取る必要があるドキュメントが 2 つだけの場合、2 回の従属ドキュメントの読み取りに対する課金が発生します。
ルールで従属ドキュメントを複数回参照している場合でも、従属ドキュメントごとに 1 回の読み取りとしてのみ課金されます。
ルールの評価は、リクエストごとに 1 回のみ課金されます。
その結果、ドキュメントを 1 つずつ読み取るよりも複数ドキュメントを一度に読み取る方が、必要となるリクエスト数が少なくなり、最終的なコストが低くなる可能性があります。
クエリの結果をリッスンする場合、以下のすべての状況においてルール評価に対する課金が発生します。
- クエリを発行する場合。
- クエリ結果の更新ごと。
- ユーザーのデバイスがオフラインになり、その後オンラインになる場合。
- ルールを更新する場合。
- ルールで従属ドキュメントを更新する場合。
データベース ストレージ サイズ
Firestore に保存するデータの容量(ストレージ オーバーヘッドを含む)に対して課金されます。オーバーヘッドの容量には、メタデータ、自動インデックス、および複合インデックスが含まれます。
Firestore に保存される各ドキュメントには、次のメタデータが必要です。
- ドキュメント ID(コレクション ID とドキュメント名を含む)。
- 各フィールドの名前と値。Firestore はスキーマレスなので、ドキュメント内の各フィールドの名前とフィールド値を一緒に保存しておく必要があります。
- ドキュメントを参照するすべての単一フィールドと複合インデックス。各インデックス エントリには、コレクション ID、任意の数のフィールド値(インデックスの定義によって異なる)、ドキュメント名が含まれます。
ストレージ費用は GiB/月単位で、毎日計算されます。Firestore はデータベースのサイズを毎日測定します。サンプル ポイントの1か月平均をとってデータベースのストレージ サイズを計算します。この平均値にストレージの単価(GiB-月)を掛けます。
Firestore ストレージの計算方法については、ストレージ サイズの計算をご覧ください。
PITR データ
PITR を有効にすると、PITR データのストレージに対して課金されます。ほとんどのお客様は、PiTR データ ストレージの全体的な費用がデータベースのストレージ費用と同程度になります。
PITR のストレージ費用は GiB/月単位で、毎日計算されます。Firestore はデータベースのサイズを毎日測定します。サンプル ポイントの1か月平均をとってデータベースのストレージ サイズを計算します。この平均値に PITR の単価(GiB-月)を掛けます。
たとえば、1 か月間のデータベースの平均サイズが 1 GiB で、PITR が 1 か月間有効になっている場合、課金対象の PITR データサイズも 1 GiB になります。
最低請求金額: PITR を有効にしてから 1 日以内に無効にしても、最大 1 日の PITR ストレージ料金が請求されることがあります。
データのバックアップと復元オペレーション
backupsを有効にすると、データベース バックアップのストレージに対して課金されます。バックアップのストレージ サイズは、バックアップ取得時のデータベースのストレージ サイズと同じです。
バックアップのストレージ費用は GiB/月単位で示されます。各バックアップが保持される日数も、1 か月平均をとって計算されます。各バックアップの費用は、バックアップのストレージ サイズにバックアップが保持されている月の割合を掛け、それに単価を掛けて算出されます。 請求に関する 1 日の境界は、America/Los_Angeles タイムゾーンで定義されます。
復元オペレーションを実行すると、Firestore は復元オペレーションのバックアップのサイズを測定します。バックアップのサイズに復元オペレーションの単価(GiB)を掛けます。
Query Explain
Firestore Query Explain を使用すると、費用が発生します。
クエリがデフォルト オプションで説明されると、インデックス オペレーションや読み取りオペレーションは実行されません。クエリの複雑さに関係なく、1 回の読み取りオペレーションが課金されます。
クエリが分析オプションで説明されると、インデックス オペレーションと読み取りオペレーションが実行されるため、通常のクエリに対する料金が発生します。説明と分析のアクティビティに追加料金はかからず、実行されるクエリに対する通常の料金のみがかかります。
ネットワーク帯域幅
以下のセクションで説明するように、Firestore のリクエストによって使用されるネットワーク帯域幅に対して課金が発生します。Firestore リクエストのネットワーク帯域幅の費用は、リクエストのレスポンスのサイズ、Firestore データベースのロケーション、レスポンスの送信先によって異なります。
Firestore は、シリアル化されたメッセージ形式に基づいてレスポンスのサイズを計算します。SSL オーバーヘッドなどのプロトコル オーバーヘッドは、ネットワーク帯域幅の使用量には含まれません。Firestore セキュリティ ルールによって拒否されたリクエストは、ネットワーク帯域幅の使用量にカウントされません。
これまでのネットワーク帯域幅の使用量を確認するには、Google Cloud コンソールを使用して課金データをファイルにエクスポートします。
一般的なネットワークの料金体系
Google Cloud Platform 内で発生したリクエスト(Google Compute Engine で実行中のアプリケーションからのリクエストなど)については、次の課金が発生します。
トラフィックの種類 | 料金 |
---|---|
インバウンド データ転送 | 無料 |
リージョン内のデータ転送 | 無料 |
同一マルチリージョン内のリージョン間のデータ転送 | 無料 |
米国内のリージョン間のデータ転送(GiB あたり) | $0.01(月ごとの最初の 10 GiB は無料です) |
リージョン間のデータ転送(米国のリージョン間のトラフィックは除く) | Google Cloud Platform 送信インターネット データ転送料金 |
米ドル以外の通貨でお支払いの場合は、Cloud Platform SKU に記載されている該当通貨の料金が適用されます。
インターネット データ転送速度
インターネット データ転送には以下の料金が請求されます。
- リージョン間の Google Cloud リクエスト(US リージョン間のトラフィックは除く)
- Google Cloud 外部からのリクエスト(ユーザーのモバイル デバイスからのリクエストなど)
米ドル以外の通貨でお支払いの場合は、Cloud Platform SKU に記載されている該当通貨の料金が適用されます。
使用量のモニタリング
Firestore の使用状況をモニタリングする方法については、使用状況のモニタリングをご覧ください。
費用の管理
費用を管理するには、1 か月の予算とアラートを設定します。
Google Cloud の予算とアラート
Google Cloud では、すべての Google Cloud サービスに対する 1 か月の予算を設定できます。1 か月の予算を使用して、Firestore のネットワーク帯域幅の費用を含めて、Google Cloud の費用全体をモニタリングします。予算を設定すると、アラートを設定できます。これによって、費用が予算に近づくと、メール通知が送信されるようになります。
こちらの手順に沿って 1 か月の予算を設定し、Google Cloud コンソールでアラートを作成します。
料金の例
実際のサンプルアプリで Firestore の請求額がどのように発生するかを確認するには、Firestore の請求例をご覧ください。
次のステップ
- Firestore のドキュメントを読む。
- Firestore を使ってみる。
- 料金計算ツールを試す。
- Firestore のソリューションとユースケースについて学習する。