データベースの選択: Cloud Firestore または Realtime Database

Firebase には、クライアントからアクセス可能なクラウドベースのドキュメント データベースが 2 つ用意されています。新規のお客様には、Cloud Firestore から始めることをおすすめします。

  • Cloud Firestore は、25 万人を超えるデベロッパーから信頼されており、エンタープライズ クラスの JSON 互換ドキュメント データベースとしておすすめします。クエリ可能性、拡張性、高可用性を必要とするリッチデータモデルを使用するアプリケーションに適しています。また、低レイテンシのクライアント同期とオフライン データアクセスも提供します。

  • Realtime Database は従来の Firebase JSON データベースです。シンプルなルックアップと低レイテンシの同期を必要とし、スケーラビリティに制限がある単純なデータモデルを使用するアプリケーションに適しています。

検討すべきその他の重要事項

これまでの主な考慮事項について検討すると、データベースを選択できるようになります。引き続き長所と短所を検討されている場合は、このセクションで Cloud FirestoreRealtime Database のその他の違いについてご覧ください。

データモデル

Realtime DatabaseCloud Firestore はどちらも NoSQL データベースです。

Cloud Firestore [ 優先 ] Realtime Database
データをドキュメントのコレクションとして保存します。
  • シンプルなデータはドキュメントに保存するのが簡単です。これは JSON と非常によく似ています。
  • 複雑で階層的なデータについては、ドキュメント内のサブコレクションを使用することで、大規模な整理を簡単に行うことができます。
  • 非正規化とデータの平坦化が少なくて済みます。

詳しくは、Cloud Firestore データモデルをご覧ください。

データを 1 つの大きな JSON ツリーとして保存します。
  • シンプルなデータは非常に簡単に保存できます。
  • 複雑で階層的なデータについては、大規模な整理を行うことが難しいです。

詳しくは、Realtime Database データモデルをご覧ください。

リアルタイムおよびオフライン サポート

どちらのデータベースもモバイル向けのリアルタイム SDK を備えており、オフライン対応アプリのローカルデータ ストレージに対応しています。

Cloud Firestore [ 優先 ] Realtime Database
Apple、Android、ウェブの各クライアント向けのオフライン サポート。 Apple、Android の各クライアント向けのオフライン サポート。

Presence

クライアントがオンラインかオフラインかを知るために役立ちます。Firebase Realtime Database ではクライアントの接続ステータスを記録し、クライアントの接続状態が変化するたびに更新できます。

Cloud Firestore [ 優先 ] Realtime Database
ネイティブではサポートされません。Cloud Functions を使用して Cloud FirestoreRealtime Database を同期することで、Realtime Database のプレゼンスに対するサポートを構築できます。Cloud Firestore でプレゼンスを構築するをご覧ください。 プレゼンスをサポート。

クエリ

いずれのデータベースもクエリによってデータの取得、並べ替え、フィルタリングを行うことができます。

Cloud Firestore [ 優先 ] Realtime Database
複合型の並べ替えとフィルタリング機能を備えたインデックス付きクエリ。
  • 1 つのクエリで、フィルタをつなぎ合わせたり、プロパティのフィルタリングと並べ替えを組み合わせたりすることができます。
  • 層が少ないクエリは、特定のコレクションまたはコレクション グループ内のドキュメントのみを返し、サブコレクション データを返しません。
  • クエリは常にドキュメント全体を返す必要があります。
  • クエリはデフォルトでインデックス付きになります。クエリのパフォーマンスは、データセットではなく、結果セットのサイズに比例します。
制限付きの並べ替えとフィルタリング機能を備えた多層型クエリ。
  • クエリでは、プロパティの並べ替えまたはフィルタリングを行うことはできますが、両方はできません。
  • クエリはデフォルトで多層型です。常にサブツリー全体を返します。
  • クエリは、JSON ツリー内の個々のリーフノード値まで、あらゆる粒度でデータにアクセスできます。
  • クエリはインデックスを必要としません。ただし、データセットが大きくなるにつれて、特定のクエリのパフォーマンスは低下します。

書き込みとトランザクション

Cloud Firestore [ 優先 ] Realtime Database
高度な書き込みオペレーションとトランザクション オペレーション。 基本的な書き込みオペレーションとトランザクション オペレーション。

信頼性とパフォーマンス

Cloud Firestore [ 優先 ] Realtime Database
Cloud Firestore は、自動的にスケーリングするリージョンおよびマルチリージョンのソリューションです。
  • 通常の応答時間が 30 ミリ秒以下の低レイテンシ ソリューション。
  • 異なるリージョンにある複数のデータセンターにデータを格納し、グローバルなスケーラビリティと信頼性を確保します。
  • 世界各地のリージョンまたはマルチリージョン構成で利用できます。
Cloud Firestore のパフォーマンスと信頼性の特性について詳しくは、サービスレベル契約をご覧ください。
Realtime Database はリージョナル ソリューションです。
  • リージョン構成で使用できます。データベースは、リージョン内のゾーンの可用性によって制約を受けます。
  • レイテンシが非常に低く、通常の応答時間が 10 ミリ秒以下です。頻繁な状態同期に理想的なオプションです。
Realtime Database のパフォーマンスと信頼性の特性について詳しくは、サービスレベル契約をご覧ください。

Uptime

Cloud Firestore [ 優先 ] Realtime Database
非常に高い稼働時間パフォーマンス。
  • 通常の稼働時間パフォーマンスは 99.999% です。
  • e コマースアプリなどで可用性が最も重要な場合は、Cloud Firestore を使用します。
高い稼働時間パフォーマンス。
  • 通常の稼働時間パフォーマンスは 99.95% です。

スケーラビリティ

Cloud Firestore [ 優先 ] Realtime Database
スケーリングは自動で行われます。
  • 完全な自動スケーリングに対応しています。約 100 万件の同時接続と、毎秒 10,000 回の書き込みまでのスケーリング制限があります。将来的には、これらの制限を引き上げる予定です。
  • 個々のドキュメントまたはインデックスへの書き込みレートに対する制限があります。
スケーリングにはシャーディングが必要です。
  • 1 つのデータベースで、約 200,000 件の同時接続と、毎秒 1,000 回の書き込みまでスケーリングが可能です。それ以上スケーリングするには、複数のデータベースにまたがるデータのシャーディングが必要になります。
  • 個々のデータへの書き込みレートに対するローカルな制限はありません。

セキュリティ

Cloud Firestore [ 優先 ] Realtime Database
承認と検証を組み合わせた非カスケード ルール。
  • Cloud Firestore Security Rules で保護されたモバイル SDK からの読み取りと書き込み。
  • Identity and Access Management(IAM)で保護されたサーバー SDK からの読み取りと書き込み。
  • ワイルドカードを使用する場合を除き、ルールがカスケード式に適用されることはありません。
  • ルールでクエリを制約できます。クエリの結果にユーザーがアクセスできないデータが含まれている場合、クエリ全体が失敗します。
承認と検証を分離するカスケード ルール。
  • Realtime Database Security Rules で保護されたモバイル SDK からの読み取りと書き込み。
  • 読み取りルールと書き込みルールはカスケード式に適用されます。
  • validate ルールを使用して個別にデータを検証します。

料金

どちらのソリューションも Spark と Blaze の料金プランで利用可能です。

Cloud Firestore [ 優先 ] Realtime Database
主な課金対象は、データベースで実行されているオペレーション(読み取り、書き込み、削除)、帯域幅、ストレージです。帯域幅とストレージへの課金レートは低く設定されています。

Cloud Firestore は、App Engine プロジェクトの 1 日の費用上限をサポートしており、お客様が設定したコストを超過することはありません。

詳しくは、Cloud Firestore のお支払いプランをご覧ください。

帯域幅とストレージにのみ課金されますが、課金レートは高くなります。

詳しくは、Realtime Database のお支払いプランをご覧ください。

Cloud FirestoreRealtime Database の使用

単一の Firebase アプリまたはプロジェクト内で両データベースを並行して使用することができます。いずれの NoSQL データベースも保存できるデータタイプは同じであり、クライアント ライブラリの動作もほぼ同じです。アプリで両方のデータベースを使用する場合には、前述の相違点に注意してください。

Realtime DatabaseCloud Firestore の両方で利用可能な機能について詳細をご確認ください。

データベースを選択する準備

この比較が Firebase データベース ソリューションの決定に役立てば幸いです。これで Firebase プロジェクトにデータベースを追加する方法を学習できます。