課金の例

このページでは、簡単なチャットアプリの実例を使用して、Firestore の使用量と費用を計算します。これは正確な見積もりではありませんが、Firestore の使用量に対する課金の仕組みについて理解を深めるのに役立ちます。

概要: 使用レベル別の費用

一般的な費用の仕組みを説明するため、ユーザーが 2 人以上の参加者と会話できるチャットアプリの例を取り上げます。ユーザーは自分のアクティブなチャットを一覧で確認したり、メッセージを読んだり、送信したりできます。この例では、北アメリカのマルチリージョン(具体的には nam5)の料金を使用します。

前提条件

使用量とデータ ストレージについて、次の前提条件があるとします。

  • 1 日のアクティブ ユーザー(DAU)は、アプリをインストールした合計人数の 10% である: 1 日のアクティブ ユーザー(DAU)の概算見積もりを使用して、1 日分の費用を見積もることができます。DAU は、その日にアプリを開いてアクティブに使用するユーザーであり、通常はアプリをインストールした合計人数のごく一部に相当します。以下の計算では、DAU の人数をアプリをインストールした合計人数の 10% と見積もっています。
  • ドキュメント サイズは比較的小さい: タイプ別のドキュメント サイズの内訳については、以下の表をご確認ください。
  • データは 3 か月だけ保存される: サンプル チャットアプリのメッセージは 3 か月しか保存されません。以下の計算では、削除オペレーションを考慮して、1 日の書き込み量に対する 1 日の削除量を示しています。
  • これらの費用見積もりはサンプルアプリの費用の大部分を反映しているが、すべてではない: この例では、オペレーション、ユーザーとメッセージ用のストレージ、このガイドで説明している最も頻繁なユーザータスクの下り帯域幅がアプリの費用の大部分を占めていると仮定しています。しかし、アプリの構造とデータのニーズによっては、追加費用を考慮する必要があるかもしれません。この例では上記の前提に従って計算を行いますが、Firestore の費用に関する詳細については、料金ページをご覧ください。

ユーザータスク別のオペレーションの内訳については、内訳: ユーザータスク別の課金される使用量セクションをご覧ください。

小規模
(インストール数 5 万)

アプリ インストール数が 50,000(1 日のアクティブ ユーザー数が 5,000)の場合: $12.14/月

読み取り / 書き込み費用
1 か月の総費用 = $11.10
40 万点(1 日の総読み取り数) =   5 万点(無料の読み取り数)+ 35 万点(読み取り数 10 万点ごとに $0.06) =   3.5 × $0.06
$0.21(1 日あたり)× 30 = $6.30
 
10 万点(1 日の総書き込み数) =   2 万点(無料の書き込み数)+ 8 万点(書き込み数 10 万点ごとに $0.18) =   0.8 × $0.18
$0.14(1 日あたり)× 30 = $4.20
 
10 万点(1 日の総削除数) =   2 万点(無料の削除数)+ 8 万点(削除数 10 万点ごとに $0.02) =   0.8 × $0.02
$0.02(1 日あたり)× 30 = $0.60
ストレージ / ネットワーク費用
1 か月の総費用 = $1.04
1 DAU につき 20 KB(1 日の下り)× 5,000(DAU 数) =   100 MB(1 日の下り)× 30 =   3 GB(1 か月の下りネットワーク)
3 GB(無料の下り)= 無料1
 
15 KB(1 DAU あたりの 1 日のメッセージ ストレージ)+ 3 KB(インストール 1 回あたりのストレージ)2 =   45 KB(1 DAU あたりのストレージ)× 5,000(DAU 数) =   225 MB(全 DAU の 1 日のストレージ)× 30 =   6.75 GB(1 か月のストレージ使用量)
1 GB(無料ストレージ)+(5.75 * $0.18)= $1.04/月

1 Firestore では、1 か月につき 10 GB の下りネットワーク料金が無料です。
2 DAU はアプリの総インストール数の 10% と仮定しているので、この数はアプリをインストールしたユーザーの総数を表します。

中規模
(インストール数 100 万)

アプリ インストール数が 1,000,000(1 日のアクティブ ユーザー数が 100,000)の場合: $292.02/月

読み取り / 書き込み費用
1 か月の総費用 = $261.90
800 万点(1 日の総読み取り数) =   5 万点(無料の読み取り数)+ 795 万点(読み取り数 10 万点ごとに $0.06) =   79.5 × $0.06
$4.77(1 日あたり)× 30 = $143.10
 
200 万点(1 日の総書き込み数) =   2 万点(無料の書き込み数)+ 198 万(書き込み数 10 万点ごとに $0.18) =   19.8 × $0.18
$3.56(1 日あたり)× 30 = $106.80
 
200 万点(1 日の総削除数) =   2 万点(無料の削除数)+ 198 万点(削除数 10 万点ごとに $0.02) =   19.8 × $0.02
$0.40(1日あたり)× 30 = $12.00
ストレージ / ネットワーク費用
1 か月の総費用 = $30.12
1 DAU につき 20 KB(1 日の下り)× 10 万(DAU 数) =   2 GB(1 日の下り)× 30 =   60 GB(1 か月の下りネットワーク)
10 GB(無料の下り)+ (50 GB の下り × 1 GB あたり $0.12) = $6.00(1 か月あたり)
 
15 KB(1 DAU あたりの 1 日のメッセージ ストレージ)+ 3 KB(インストール 1 回あたりのストレージ)1 =   45 KB(1 DAU あたりのストレージ)× 10 万(DAU 数) =   4.5 GB(全 DAU の 1 日のストレージ)× 30 =   135 GB(1 か月のストレージ使用量)
1 GB(無料ストレージ)+ (134 GB × 1 GB あたり $0.18) = $24.12(1 か月あたり)

1 DAU はアプリの総インストール数の 10% と仮定しているので、この数はアプリをインストールしたユーザーの総数を表します。

大規模
(インストール数 1,000 万)

アプリ インストール数が 10,000,000(1 日のアクティブ ユーザー数が 1,000,000)の場合: $2,951.52/月

読み取り / 書き込み費用
1 か月の総費用 = $2,637.90
8,000 万点(1 日の総読み取り数) =   5 万点(無料の読み取り数)+ 7,995 万点(読み取り数 10 万点ごとに $0.06) =   799.5 × $0.06
$47.97(1 日あたり) × 30 = $1,439.10
 
2,000 万点(1 日の総書き込み数) =   2 万点(無料の書き込み数)+ 1,998 万点(書き込み数 10 万点ごとに $0.18) =   199.8 × $0.18
$35.96(1 日あたり)× 30 = $1,078.80
 
2,000 万点(1 日の総削除数) =   2 万点(無料の削除数)+ 1,998 万(削除数 10 万点ごとに $0.02) =   199.8 × $0.02
$4.00(1 日あたり)× 30 = $120.00
ストレージ / ネットワーク費用
1 か月の総費用 = $313.62
1 DAU につき 20 KB(1 日の下り)× 100 万(DAU 数) =   20 GB(1 日の下り)× 30 =   600 GB(1 か月の下りネットワーク)
10 GB(無料の下り)+ (590 GB の下り × 1 GB あたり $0.12) = $70.80(1 か月あたり)
 
15 KB(1 DAU あたりの 1 日のメッセージ ストレージ)+ 3 KB(インストール 1 回あたりのストレージ)1 =   45 KB(1 DAU あたりのストレージ)× 100 万(DAU 数) =   45 GB(全 DAU の1 日のストレージ)× 30 =   1,350 GB(1 か月のストレージ使用量)
1 GB(無料ストレージ)+ (1,349 GB × 1 GB あたり $0.18) = $242.82(1 か月あたり)

1 DAU はアプリの総インストール数の 10% と仮定しているので、この数はアプリをインストールしたユーザーの総数を表します。

Firestore 課金モデルが検討に値するのは、使用した分だけ支払うという利点があるためです。つまり、料金は DAU の数に比例して増減する可能性があります。

内訳: ユーザータスク別の課金される使用量

ここで取り上げたチャットアプリの例では、データ構造は以下のとおりです。

  • users/{userId} - ユーザー レコード
  • groups/{groupId} - 2 人以上のユーザー間のチャット
    • messages/{messageId} - チャット内の各メッセージ

データ ストレージ

アプリのデータを保存するストレージ費用を計算するため、ドキュメント サイズについて次の前提条件があるとします。

コレクション ドキュメント サイズ(転送中) ドキュメント サイズ(ディスク上)*
ユーザー 1 KB 3 KB
グループ 0.5 KB 1.5 KB
メッセージ 0.25 KB 0.75 KB

*このサイズ計算にはメッセージ フィールドのインデックスが含まれますが、メッセージ コンテンツのインデックス作成は無効に設定されていると仮定します。

また、ストレージ費用を抑えるために、アプリでは作成後 3 か月までのメッセージのみを保存するものとします。

ストレージ費用の計算の詳細については、ストレージ サイズの計算をご覧ください。

運用

このアプリでは、ユーザーは通常、次の一般的なタスクを実行します。

サンプルアプリのこの 3 つの一般的なユーザータスクについて、Firestore での総オペレーション数の見積もりは次のようになります。

  • 読み取り: (5 * 10)+(30)= 80 読み取り/ユーザー/日
  • 書き込み: (10 × 2) = 20 点(1 ユーザーの 1 日あたりの書き込み数)
  • 下りネットワーク: (50 × 0.25 KB) + (30 × 0.25 KB) = 1 ユーザーにつき 20 KB(1日あたり)
  • ストレージ: (20 × 0.75 KB) = 1 ユーザーにつき 15 KB(1日あたり)

ユーザータスク別の総使用量

各ユーザータスクについて、アプリのオペレーション、ストレージ、ネットワークの費用の詳細な説明と内訳を見ていきましょう。

チャットの一覧を見る

アプリのホーム画面には最新の 25 件のチャットが読み込まれ、25 回のドキュメント読み取りが発生します。アクティブ ユーザーが 1 日に 5 回アプリを開くとすると、1 日に 1 ユーザーあたり合計 125 回の読み取りが発生します。ただし、次の例のような効率的なクエリを使用すると、この読み込み回数を減らすことができます。

次の例では、アプリによって保存される、成功したフェッチごとのタイムスタンプを使用して、新しいチャットにのみクエリを実行します。

db.collection('groups')
  .where('participants', 'array-contains', 'user123')
  .where('lastUpdated', '>', lastFetchTimestamp)
  .orderBy('lastUpdated', 'desc')
  .limit(25)

ユーザーがアプリをチェックするたびに、平均 10 件の更新されたチャットがあるとします。このクエリでは、ドキュメントの読み取りは 10 回しか発生しません。

チャットでメッセージを読む

ユーザーはホーム画面でチャットのスレッドをクリックして最近のメッセージを表示します。初回読み込みで最新の 50 件のメッセージが読み込まれます。

一般的なユーザーが 1 日に 5 回(ホーム画面を開くたびに 1 回)この操作を行うとすると、1 日に 1 ユーザーあたり合計 250 回の読み取りが発生します。ここでも、前回のフェッチ以降の新しいメッセージにのみクエリを実行できます。

db.collection('groups')
  .doc('group234')
  .collection('messages')
  .where('sentTime', '>', lastFetchTimestamp)
  .orderBy('sentTime', 'desc')
  .limit(50)

1 人のユーザーがすべてのチャットで 1 日に約 30 件のメッセージを受け取るとします。クエリでフェッチする対象を新しいメッセージのみに限定したので、1 日に 30 件のメッセージのみを取得することになります。

チャットにメッセージを送信する

ユーザーはチャットに参加すると、他の参加者にメッセージを送信できます。アクティブ ユーザーが 1 日に約 10 件のメッセージを送信するとします。

送信されるメッセージごとに、2 つのドキュメント書き込みが発生します。1 つはチャットの messages サブコレクションへの書き込みです。もう 1 つは、lastUpdated タイムスタンプとその他のメタデータを更新するための、チャットの親ドキュメントへの書き込みです。

このようなメッセージの読み取り費用は他の箇所で説明しているので、以下の合計では書き込み費用のみを取り上げます。

管理者タスクの課金される使用量

アプリのオーナーや管理者は、アプリのデータからレポートを生成する必要が生じる場合があります。たとえば、ユーザーが送信したメッセージの 1 日あたりの数を記録する必要があるとします。これは、messages コレクション グループの count() 集計を使用して行うことができます。

count() などの集計クエリでは、クエリにより照合されたインデックス エントリ(1,000 個まで)のバッチごとに 1 回分のドキュメント読み取り料金が課金されます。この日次集計を実行すると、次の月額料金が発生します。

小規模
(インストール数 5 万)

アプリ インストール数が 50,000(1 日のアクティブ ユーザー数が 5,000)の場合: $0.0009 / 月

アクティブ ユーザー 5,000 人 × ユーザー 1 人につき 10 件の新しいメッセージ = 1 日あたり 50,000 件の新しいメッセージ ドキュメント

50,000 ドキュメント ÷ 1,000 インデックス マッチ(読み取り課金ごとに)= 50 点の読み取り

50 点の読み取り(1 日あたり)× 30 日 = 1,500 点の読み取り(1 か月あたり)

1,500 点の読み取り(1 か月あたり)× 0.06(100,000 点の読み取りごとの料金) = $0.0009(1 か月あたり)

中規模
(インストール数 100 万)

アプリ インストール数が 1,000,000(1 日のアクティブ ユーザー数が 100,000)の場合: $0.018/月

アクティブ ユーザー 100,000 人 × ユーザー 1 人につき 10 件の新しいメッセージ = 1 日あたり 1,000,000 件の新しいメッセージ ドキュメント

1,000,000 ドキュメント ÷ 1,000 インデックス マッチ(読み取り料金ごとに) = 1,000 点の読み取り

1,000 点の読み取り(1 日あたり)× 30 日 = 30,000 点の読み取り(1 か月あたり)

30,000 点の読み取り(1 か月あたり)× 0.06(100,000 点の読み取りごとの料金)= $0.018(1 か月あたり)

大規模
(インストール数 1,000 万)

アプリ インストール数が 10,000,000(1 日のアクティブ ユーザー数が 1,000,000)の場合: $0.018/月

アクティブ ユーザー 1,000,000 人 × ユーザー 1 人につき 10 件の新しいメッセージ = 1 日あたり 10,000,000 件の新しいメッセージ ドキュメント

10,000,000 ドキュメント ÷ 1,000 インデックス マッチ(読み取り料金ごとに)= 10,000 点の読み取り

10,000 点の読み取り(1 日あたり)× 30 日 = 300,000 点の読み取り(1 か月あたり)

300,000 回の読み取り(1 か月あたり)× 0.06 / 100000 回の読み取り料金 = $ 0.18(1 か月あたり)