コンソールへ移動

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

Firebase は、クライアント アクセスやリアルタイムのデータ同期が可能な 2 つのクラウドベースのデータベース ソリューションを提供します。

  • Cloud Firestore は、Firebase のモバイルアプリ開発用の最新データベースです。直感的な新しいデータモデルで Realtime Database をさらに強化しています。Cloud Firestore は、Realtime Database よりも多彩で高速なクエリと高性能なスケーリングが特徴です。
  • Realtime Database は従来からある Firebase のデータベースです。リアルタイムのクライアント間同期が必要なモバイルアプリのための、効率的でレイテンシが低いソリューションです。

プロジェクトに応じたデータベースの選択

新しくプロジェクトを開始する場合、ほとんどのケースで Cloud Firestore のご利用をおすすめします。Cloud Firestore では、今後リリースされる強力な機能に対応できるよう、機能性、パフォーマンス、スケーラビリティを強化したインフラストラクチャを提供しています。Cloud Firestore は、新しいクエリの種類、より堅牢なセキュリティ ルール、拡張機能によって強化されたパフォーマンスを備えています。

Cloud Firestore と Realtime Database のどちらかを選ぶにあたっては、以下の相違点を考慮してください。

データモデル

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

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

Realtime Database データモデルの詳細をご覧ください。

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

Cloud Firestore データモデルの詳細をご覧ください。

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

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

Realtime Database Cloud Firestore
iOS と Android クライアントのオフライン サポート。 iOS、Android、ウェブ クライアント向けのオフライン サポート。

クエリ

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

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

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

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

信頼性とパフォーマンス

Realtime Database Cloud Firestore
Realtime Database は単一リージョンのソリューションです。
  • データベースは、単一リージョン内のゾーン利用可能性に制限されます。
  • レイテンシが非常に低く、頻繁な状態同期に最適です。
Realtime Database のパフォーマンスと信頼性の特性については、サービスレベル契約をご覧ください。
Cloud Firestore は自動的にスケールするマルチリージョン ソリューションです。
  • 異なるリージョンにある複数のデータセンターにデータを格納し、グローバルなスケーラビリティと信頼性を確保します。
  • 世界各地のリージョンまたはマルチリージョン構成で利用できます。
Cloud Firestore のパフォーマンスと信頼性の特性について詳しくは、サービスレベル契約をご覧ください。

スケーラビリティ

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

セキュリティ

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

料金

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

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

Realtime Database の料金プランの詳細をご覧ください。

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

Cloud Firestore は、Google App Engine プロジェクトの 1 日の支出限度額に対応しており、お客様が設定したコストを超過することはありません。

Cloud Firestore の料金プランの詳細をご覧ください。

Cloud Firestore と Realtime Database の使用

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

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