Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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 データベースです。

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

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

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

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

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

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

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

プレゼンス

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

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

クエリ

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

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

セキュリティ

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

料金

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

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

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

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

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

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

Cloud Firestore と Realtime Database の使用

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

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

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

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