このページでは、簡単なチャットアプリの実例を使用して、Cloud Firestore の使用量と費用を計算します。これは正確な見積もりではありませんが、Cloud Firestore の使用量に対する課金の仕組みをよりよく理解するのに役立ちます。
概要: 使用レベル別の費用
一般的な費用の仕組みを説明するため、ユーザーが 2 人以上の参加者と会話できるチャットアプリの例を取り上げます。ユーザーは自分のアクティブなチャットを一覧で確認したり、メッセージを読んだり、送信したりできます。この例では、北アメリカのマルチリージョン(具体的には nam5
)の料金を使用します。
前提条件
使用量とデータ ストレージについて、次の前提条件があるとします。
- 1 日のアクティブ ユーザー(DAU)は、アプリのインストール全体の 10% である。1 日のアクティブ ユーザー(DAU)の概算見積もりを使用して、1 日分の費用を見積もることができます。DAU は、毎日アプリを開いてアクティブに使用するユーザーであり、通常はアプリの総インストール数のごく一部に相当します。以下の計算では、DAU の人数をアプリの総インストール数の 10% と見積もっています。
- ドキュメント サイズは比較的小さい。タイプ別のドキュメント サイズの内訳については、以下の表をご確認ください。
- データは 3 か月だけ保存される。サンプル チャットアプリのメッセージは 3 か月しか保存されません。以下の計算では、削除オペレーションを考慮して、1 日の書き込み量に対する 1 日の削除量を示しています。
- これらの費用見積もりはサンプルアプリの費用の大部分を反映しているが、すべてではない。この例では、オペレーション、ユーザーとメッセージ用のストレージ、このガイドで説明している最も頻繁なユーザータスクの下り帯域幅がアプリの費用の大部分を占めていると仮定しています。しかし、アプリの構造とデータのニーズによっては、追加費用を考慮する必要があるかもしれません。この例では上記の前提に沿って計算を行いますが、Cloud Firestore の費用に関する詳細については、料金ページをご覧ください。
ユーザータスク別のオペレーションの内訳については、内訳: ユーザータスク別の課金される使用量セクションをご覧ください。
小規模
(インストール数 5 万)
アプリ インストール数 50,000(1 日のアクティブ ユーザー数 5,000)の場合: $12.14/月
読み取り / 書き込み費用 | |||||
---|---|---|---|---|---|
1 か月の総費用 = $11.10/月 | |||||
40 万(1 日の総読み取り数) | = | 5 万(無料の読み取り数)+ 35 万($0.06/10 万の読み取り数) | = | 3.5 * $0.06 | |
$0.21/日 * 30 = $6.30 | |||||
10 万(1 日の総書き込み数) | = | 2 万(無料の書き込み数)+ 8 万($0.18/10 万の書き込み数) | = | 0.8 * $0.18 | |
$0.14/日 * 30 = $4.20 | |||||
10 万(1 日の総削除数) | = | 2 万(無料の削除数)+ 8 万($0.02/10 万の削除数) | = | 0.8 * $0.02 | |
$0.02/日 * 30 = $0.60 |
ストレージ / ネットワーク費用 | |||||||
---|---|---|---|---|---|---|---|
1 か月の総費用 = $1.04/月 | |||||||
20 KB/DAU(1 日の下り)* 5,000(DAU 数) | = | 100 MB(1 日の下り)* 30 | = | 3 GB(1 か月の下りネットワーク) | |||
3 GB(無料の下り)= 無料1 | |||||||
15 KB(1 日のメッセージ ストレージ/DAU)+ 3 KB(ストレージ/インストール)2 | = | 45 KB(ストレージ/DAU)* 5,000(DAU 数) | = | 225 MB(1 日のストレージ/DAU)* 30 | = | 6.75 GB(1 か月のストレージ使用量) | |
1 GB(無料ストレージ)+(5.75 * $0.18)= $1.04/月 |
1 Cloud Firestore では、1 か月につき 10 GB の下りネットワーク料金が無料です。
2 DAU はアプリの総インストール数の 10% と仮定しているので、この数はアプリをインストールしたユーザーの総数を表します。
中規模
(インストール数 100 万)
アプリ インストール数 1,000,000(1 日のアクティブ ユーザー数 100,000)の場合: $292.02/月
読み取り / 書き込み費用 | |||||
---|---|---|---|---|---|
1 か月の総費用 = $261.90/月 | |||||
800 万(1 日の総読み取り数) | = | 5 万(無料の読み取り数)+ 795 万($0.06/10 万の読み取り数) | = | 79.5 * $0.06 | |
$4.77/日 * 30 = $143.10 | |||||
200 万(1 日の総書き込み数) | = | 2 万(無料の書き込み数)+ 198 万($0.18/10 万の書き込み数) | = | 19.8 * $0.18 | |
$3.56/日 * 30 = $106.80 | |||||
200 万(1 日の総削除数) | = | 2 万(無料の削除数)+ 198 万($0.02/10 万の削除数) | = | 19.8 * $0.02 | |
$0.40/日 * 30 = $12.00 |
ストレージ / ネットワーク費用 | |||||||
---|---|---|---|---|---|---|---|
1 か月の総費用 = $30.12/月 | |||||||
20 KB/DAU(1 日の下り)* 10 万(DAU 数) | = | 2 GB(1 日の下り)* 30 | = | 60 GB(1 か月の下りネットワーク) | |||
10 GB(無料の下り)+(50 GB の下り * $0.12/GB)= $6.00/月 | |||||||
15 KB(1 日のメッセージ ストレージ/DAU)+ 3 KB(ストレージ/インストール)1 | = | 45 KB(ストレージ/DAU)* 10 万(DAU 数) | = | 4.5 GB(1 日のストレージ/DAU)* 30 | = | 135 GB(1 か月のストレージ使用量) | |
1 GB(無料ストレージ)+(134 GB * $0.18/GB)= $24.12/月 |
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 万($0.06/10 万の読み取り数) | = | 799.5 * $0.06 | |
$47.97/日 * 30 = $1,439.10 | |||||
2,000 万(1 日の総書き込み数) | = | 2 万(無料の書き込み数)+ 1,998 万($0.18/10 万の書き込み数) | = | 199.8 * $0.18 | |
$35.96/日 * 30 = $1,078.80 | |||||
2,000 万(1 日の総削除数) | = | 2 万(無料の削除数)+ 1,998 万($0.02/10 万の削除数) | = | 199.8 * $0.02 | |
$4.00/日 * 30 = $120.00 |
ストレージ / ネットワーク費用 | |||||||
---|---|---|---|---|---|---|---|
1 か月の総費用 = $313.62/月 | |||||||
20 KB/DAU(1 日の下り)* 100 万(DAU 数) | = | 20 GB(1 日の下り)* 30 | = | 600 GB(1 か月の下りネットワーク) | |||
10 GB(無料の下り)+(590 GB の下り * $0.12/GB)= $70.80/月 | |||||||
15 KB(1 日のメッセージ ストレージ/DAU)+ 3 KB(ストレージ/インストール)1 | = | 45 KB(ストレージ/DAU)* 100 万(DAU 数) | = | 45 GB(1 日のストレージ/DAU)* 30 | = | 1,350 GB(1 か月のストレージ使用量) | |
1 GB(無料ストレージ)+(1,349 GB * $0.18/GB)= $242.82/月 |
1 DAU はアプリの総インストール数の 10% と仮定しているので、この数はアプリをインストールしたユーザーの総数を表します。
Cloud 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 つの一般的なユーザータスクについて、Cloud Firestore での総オペレーション数の見積もりは次のとおりです。
- 読み取り: (5 * 10)+(30)= 80 読み取り/ユーザー/日
- 書き込み: (10 * 2)= 20 書き込み/ユーザー/日
- 下りネットワーク: (50 * 0.25 KB)+(30 * 0.25 KB)= 20 KB/ユーザー/日
- ストレージ: (20 * 0.75 KB)= 15 KB/ユーザー/日
ユーザータスク別の総使用量
各ユーザータスクについて、アプリのオペレーション、ストレージ、ネットワークの費用の詳細な説明と内訳を見ていきましょう。
チャットの一覧を見る
アプリのホーム画面には最新の 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
タイムスタンプとその他のメタデータを更新するための、チャットの親ドキュメントへの書き込みです。
このようなメッセージの読み取り費用は他の箇所で説明しているので、以下の合計では書き込み費用のみを取り上げます。
利用できるメリット: アプリの無料サービス
Cloud Firestore のオペレーション、ストレージ、ネットワーク帯域幅の使用はすべて課金対象と見なされますが、さまざまな追加料金なしのメリットを利用できます。Cloud Firestore と他のデータベース オプションを比較するときに、以下の無料のサービスを考慮してください。
- 直接クライアント アクセス: Cloud Firestore へのアクセスは、Google のネイティブ SDK を使用してお客様のクライアント コードから直接行われます。つまり、お客様のモバイル クライアントをデータベースに接続するために API サーバーをビルドして実行する必要がありません。
- 負荷分散: Cloud Firestore はデータベースへのトラフィックに対応できるように自動スケーリングを行うので、ロードバランサを実行する必要がありません。
- サーバーの稼働時間: Cloud Firestore データベースは Google Cloud サーバー上で動作し、毎月 99% を超える稼働時間を実現します。
- 認証: Firebase Authentication を使用して、人数制限なしでユーザーを簡単かつ安全に認証できます。Firebase Authentication は Cloud Firestore と直接統合されているので、お客様自身で認証サービスを実行する必要がありません。
- プッシュ通知: Cloud Messaging でメッセージと通知を送信できます。
- 他の Firebase プロダクト: A/B Testing、アナリティクス、Crashlytics、Performance Monitoring、Remote Config など、他の料金のかからない Firebase プロダクトが統合されています。他の Firebase プロダクトと Firebase の料金をご覧ください。