Firebase Summit のすべての発表内容に目を通し、Firebase を活用してアプリ開発を加速し、自信を持ってアプリを実行できる方法をご確認ください。 詳細

データベースを選択します:CloudFirestoreまたはRealtimeDatabase

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

  • Cloud Firestoreは、モバイルアプリ開発用の Firebase の最新データベースです。これは、Realtime Database の成功を基に、より直感的な新しいデータ モデルを使用して構築されています。 Cloud Firestore は、Realtime Database よりもリッチで高速なクエリとスケールも備えています。

  • Realtime Databaseは、Firebase のオリジナル データベースです。これは、クライアント間で状態をリアルタイムで同期する必要があるモバイル アプリ向けの効率的で低レイテンシのソリューションです。

Firebase が推奨するデータベースはどれですか?

データベース ソリューションの選択は多くの要因に左右されますが、特定の機能に関しては、どのデータベースが適切かをお勧めします。

どちらのソリューションも以下を提供します。

  • サーバーをデプロイして維持する必要のない、クライアント ファーストの SDK
  • リアルタイム更新
  • 無料利用枠、その後は使用した分だけお支払い

重要な考慮事項

両方のデータベースに共通する優れたコア機能を超えて、以下に示す考慮事項の一部またはすべてがアプリの成功にどのように影響するかを考えてください。

データベースの役割
私のアプリはデータベースを使用しています...
基本的なクエリを使用して、主にデータを同期します。
高度なクエリ、並べ替え、およびトランザクションが必要ない場合は、 Realtime Databaseをお勧めします。
高度なクエリ、並べ替え、およびトランザクション。
e コマース アプリなど、データとの複雑なやり取りが必要な場合は、 Cloud Firestoreをお勧めします。
データの操作
私のアプリのデータベースの使用状況は次のようになります...
頻繁に変更される数 GB 以下のデータ。
デジタル ホワイトボード アプリなど、アプリが小さな更新のストリームを送信する場合は、 Realtime Databaseをお勧めします。
変更されるよりもはるかに頻繁に読み取られる、数百 GB から TB のデータ。
非常に大きなデータ セットの場合、およびバッチ オペレーションが頻繁に必要な場合は、 Cloud Firestoreをお勧めします。
データ・モデル
データを次のように構造化することを好みます...
単純な JSON ツリー。
JSON の非構造化データについては、 Realtime Databaseをお勧めします。
コレクションに編成されたドキュメント。
構造化ドキュメントとコレクションについては、 Cloud Firestoreをお勧めします。
可用性
私の可用性のニーズは...
99.999% の非常に高い稼働率を保証します。
e コマース アプリなど、可用性が最も重要な場合は、 Cloud Firestoreをお勧めします。
少なくとも 99.95% のアップタイムを保証します。
非常に高いが重要ではない可用性が許容される場合は、 Cloud FirestoreまたはRealtime Databaseのいずれかをお勧めします。
ローカル データに対するオフライン クエリ
私のアプリは、接続が制限されているか接続されていないデバイスでクエリを実行する必要があります...
頻繁に。
ユーザーがオフラインのときのローカル データに対する高度なクエリ機能については、 Cloud Firestoreをお勧めします。
めったにまたはまったくない。
ユーザーが常にオンラインであることが予想される場合は、 Cloud FirestoreまたはRealtime Databaseをお勧めします。
データベース インスタンスの数
私の個々のプロジェクトでは、使用する必要があります...
主要な顧客ごとのデータベースなど、多数のデータベース。
1 つの Firebase プロジェクトに複数のデータベースを追加できるため、 Realtime Databaseをお勧めします。
単一のデータベース。
単一のデータベースが必要な場合は、 Cloud FirestoreまたはRealtime Databaseのいずれかをお勧めします。

他に考慮すべき重要な点は何ですか?

これまでの重要な考慮事項について検討した後、データベースを選択する準備が整うかもしれません。まだ長所と短所を比較検討している場合は、このセクションで Cloud Firestore と Realtime Database のその他の違いについて説明します。

データ・モデル

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

リアルタイム データベースクラウド ファイアストア
データを 1 つの大きな JSON ツリーとして格納します。
  • 単純なデータは非常に簡単に保存できます。
  • 複雑な階層データを大規模に整理するのは困難です。

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

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

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

リアルタイムとオフラインのサポート

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

リアルタイム データベースクラウド ファイアストア
Apple および Android クライアントのオフライン サポート。 Apple、Android、および Web クライアントのオフライン サポート。

面前

クライアントがオンラインかオフラインかがわかると便利です。 Firebase Realtime Database は、クライアントの接続状態を記録し、クライアントの接続状態が変化するたびに更新を提供できます。

リアルタイム データベースクラウド ファイアストア
プレゼンス対応。ネイティブではサポートされていません。 Cloud Functions を使用して Cloud Firestore と Realtime Database を同期することで、Realtime Database のプレゼンスのサポートを活用できます。 Cloud Firestore でプレゼンスを構築する を参照してください。

クエリ

クエリを使用して、いずれかのデータベースからデータを取得、並べ替え、およびフィルター処理します。

リアルタイム データベースクラウド ファイアストア
並べ替えとフィルタリングの機能が制限された詳細なクエリ。
  • クエリは、プロパティの並べ替えまたはフィルター処理を行うことができますが、両方を行うことはできません。
  • クエリはデフォルトで深いです: 常にサブツリー全体を返します。
  • クエリは、JSON ツリーの個々のリーフ ノード値に至るまで、あらゆる粒度でデータにアクセスできます。
  • クエリにはインデックスは必要ありません。ただし、データ セットが大きくなるにつれて、特定のクエリのパフォーマンスが低下します。
複合並べ替えとフィルタリングを使用したインデックス付きクエリ。
  • 1 つのクエリでフィルターを連鎖させ、プロパティのフィルター処理と並べ替えを組み合わせることができます。
  • クエリは浅いものです。特定のコレクションまたはコレクション グループ内のドキュメントのみを返し、サブコレクション データは返しません。
  • クエリは常にドキュメント全体を返す必要があります。
  • クエリはデフォルトでインデックス化されます: クエリのパフォーマンスは、データ セットではなく、結果セットのサイズに比例します。

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

リアルタイム データベースクラウド ファイアストア
基本的な書き込みおよびトランザクション操作。高度な書き込みおよびトランザクション操作。
  • 設定操作と更新操作、および配列演算子や数値演算子などの高度な変換によるデータ操作を記述します。
  • トランザクションは、データベースの任意の部分からアトミックにデータを読み書きできます。

信頼性と性能

リアルタイム データベースクラウド ファイアストア
Realtime Database は地域的なソリューションです。
  • 地域構成で利用可能。データベースは、リージョン内のゾーンの可用性に制限されています。
  • レイテンシが非常に低く、頻繁な状態同期に最適なオプションです。
Realtime Database のパフォーマンスと信頼性の特性については、サービス レベル アグリーメントを参照してください。
Cloud Firestore は、自動的にスケーリングするリージョンおよびマルチリージョン ソリューションです。
  • 異なる地域の複数のデータ センターにデータを格納し、グローバルなスケーラビリティと強力な信頼性を確保します。
  • 世界中の地域または複数地域の構成で利用できます。
サービス レベル アグリーメントで、Cloud Firestore のパフォーマンスと信頼性の特性の詳細を確認してください。

スケーラビリティ

リアルタイム データベースクラウド ファイアストア
スケーリングにはシャーディングが必要です。
  • 1 つのデータベースで約 200,000 の同時接続と 1,000 書き込み/秒にスケーリングします。それを超えるスケーリングには、複数のデータベース間でデータをシャーディングする必要があります。
  • 個々のデータへの書き込み速度にローカルな制限はありません。
スケーリングは自動です。
  • 完全に自動的にスケーリングします。現在、スケーリングの制限は、約 100 万の同時接続と毎秒 10,000 書き込みです。今後、これらの制限を引き上げる予定です。
  • 個々のドキュメントまたはインデックスへの書き込み速度に制限があります。

安全

リアルタイム データベースクラウド ファイアストア
承認と検証を分離するカスケード ルール言語。
  • Realtime Database Rulesによって保護されたモバイル SDK からの読み取りと書き込み。
  • 読み取りおよび書き込みルールのカスケード。
  • validateルールを使用して、データを個別に検証します。
承認と検証を組み合わせた非カスケード ルール。
  • Cloud Firestore セキュリティ ルールによって保護されたモバイル SDK からの読み取りと書き込み。
  • Identity and Access Management (IAM)によって保護されたサーバー SDK からの読み取りと書き込み。
  • ワイルドカードを使用しない限り、ルールはカスケードしません。
  • ルールはクエリを制限できます: クエリの結果にユーザーがアクセスできないデータが含まれている可能性がある場合、クエリ全体が失敗します。

価格

どちらのソリューションも、 Spark および Blaze の料金プランで利用できます。

リアルタイム データベースクラウド ファイアストア
帯域幅とストレージに対してのみ課金されますが、料金は高くなります。

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

主にデータベースで実行される操作 (読み取り、書き込み、削除) に対して課金され、帯域幅とストレージに対してはより低いレートで課金されます。

Cloud Firestore は、App Engine プロジェクトの 1 日あたりの支出制限をサポートしているため、満足できるコストを超えないようにできます。

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

Cloud Firestore と Realtime Database の使用

同じ Firebase アプリまたはプロジェクト内で両方のデータベースを使用できます。どちらの NoSQL データベースも同じタイプのデータを格納でき、クライアント ライブラリは同様の方法で動作します。アプリで両方のデータベースを使用する場合は、上記の違いに注意してください。

Realtime DatabaseCloud Firestoreの両方で利用できる機能の詳細をご覧ください。

データベースを選択する準備はできましたか?

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