ネイティブ モードと Datastore モードからの選択

新しい Firestore データベースを作成するときに、データベースに Datastore との下位互換性を持たせる Datastore モードで実行されるようにデータベース インスタンスを構成できます。このページでは、Firestore の 2 つのデータベース モード(ネイティブ モードと Datastore モード)の違いについて説明します。

ネイティブ モードの Firestore

Firestore は、Datastore のリブランディングとなる次期メジャー バージョンです。Datastore と Firebase Realtime Database を最大限に活用し、自動スケーリングと高パフォーマンスを実現して、アプリケーション開発をより快適にするように構築された NoSQL ドキュメント データベースです。

Firestore には以下の機能が導入されています。

  • 強整合性のあるストレージ レイヤ
  • コレクションとドキュメントのデータモデル
  • リアルタイム アップデート
  • モバイル クライアント ライブラリとウェブ クライアント ライブラリ

Firestore は Datastore と後方互換性がありますが、新しいデータモデル、リアルタイム アップデート、モバイルおよびウェブ クライアント ライブラリの機能はありません。Firestore のすべての機能にアクセスするには、Firestore をネイティブ モードで使用する必要があります。

Datastore モードの Firestore

Datastore モードの Firestore は、Datastore システムの動作を使用しますが、Firestore のストレージ レイヤにアクセスするため以下の Datastore の制限がなくなります。

  • 結果整合性を明示的にリクエストしない限り、すべての Datastore クエリは強整合性になります。
  • トランザクション内のクエリが祖先クエリである必要がなくなります。
  • 25 エンティティ グループまでというトランザクションの制限がなくなります。
  • 1 秒あたり 1 個というエンティティ グループへの書き込み制限がなくなります。

Datastore モードでは、Datastore と互換性のない Firestore の機能が無効になります。

  • プロジェクトは Datastore API リクエストを受け入れ、Firestore API リクエストを拒否します。
  • プロジェクトでは、Firestore インデックスの代わりに Datastore インデックスが使用されます。
  • このプロジェクトで Datastore クライアント ライブラリを使用することはできますが、Firestore クライアント ライブラリは使用できません。
  • Firestore のリアルタイム機能は利用できません。
  • Google Cloud コンソールでは、データベースで Datastore ビューアが使用されます。

料金とロケーション

ネイティブ モードと Datastore モードのデータベースは同じ料金体系をとり、同じロケーションで利用できます。料金とロケーションについては、以下のページで詳しく説明しています。

ネイティブ モードの Firestore

Datastore モードの Firestore

データベース モードを選択する

新しい Firestore データベースを作成するときは、データベース モードを選択する必要があります。同じプロジェクトに Datastore モードとネイティブ モードの両方のデータベースを含めることができますが、各データベースは 1 つのタイプになります。データベース モードを選択する場合は、次のことをおすすめします。

  • 新しいサーバー プロジェクトの場合は、Datastore モードで Firestore を使用する。

    Datastore モードで Firestore を使用すると、既存の Cloud Datastore サーバー アーキテクチャを使用しながら、基本的な Datastore の制限を排除できます。Datastore モードでは、毎秒数百万回の書き込みまで自動的にスケーリングします。

  • モバイルアプリやウェブアプリの場合は、ネイティブ モードで Firestore を使用する。

    Firestore では、リアルタイムおよびオフライン機能を備えたモバイルおよびウェブ クライアント ライブラリをご利用いただけます。ネイティブ モードでは、数百万のクライアント同時実行まで自動的にスケーリングします。

機能の比較

次の表は、データベース モードのシステム動作を比較したものです。

ネイティブ モードの
Firestore
Datastore モードの
Firestore
データモデル ドキュメントとコレクションに分類されたドキュメント データベース 種類とエンティティのグループに分類されたエンティティ
ストレージ レイヤ 強整合性のあるストレージ レイヤ。 強整合性のあるストレージ レイヤ。
クエリとトランザクション
  • データベース全体での強整合性を確保したクエリ
  • Datastore の以前の整合性の制限を排除
  • データベース全体での強整合性を確保したクエリ
  • トランザクションでは任意の数のエンティティ グループにアクセス可能
Datastore v1 API のサポート なし。リクエストが拒否される あり
Firestore v1 API のサポート あり なし。リクエストが拒否される
リアルタイム アップデート

リアルタイム更新のための、ドキュメントまたは一連のドキュメントをリッスンする機能をサポート

ドキュメントまたは一連のドキュメントをリッスンしながら、クライアントにデータの変更を通知し、最新のデータセットを送信

サポート対象外
オフライン データの永続性 モバイル クライアント ライブラリとウェブ クライアント ライブラリでオフライン データの永続性をサポート サポート対象外
クライアント ライブラリ Firestore クライアント ライブラリ:
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • Android
  • iOS+
  • ウェブ
  • C++
  • Unity
Datastore クライアント ライブラリ:
  • Java
  • Python
  • PHP
  • Go
  • Ruby
  • C#
  • Node.js
  • C++
セキュリティ
  • Identity and Access Management(IAM)でデータベース アクセスを管理
  • Firestore のセキュリティ ルールは、モバイルおよびウェブ クライアント ライブラリのサーバーレス認証および承認をサポート
IAM でデータベース アクセスを管理
パフォーマンス 数百万のクライアント同時実行まで自動的にスケーリング 毎秒数百万回の書き込みまで自動的にスケーリング
SLA Firestore SLA Firestore SLA
ロケーション

どちらのモードも同じロケーションをサポートしています。ロケーションの詳細なリストについては、次のページをご覧ください。

料金

どちらのモードでも、エンティティとドキュメントの操作に同じ料金体系が適用されます。

Datastore モードの Firestore では、小規模なオペレーションについては課金されません。

どちらのモードでも、保存データとネットワーク帯域幅に同じ料金体系が適用されます。

料金の詳細については、以下のページをご覧ください。

コンソール Firebase コンソールおよび Google Cloud コンソール Firestore Viewer Google Cloud コンソール Datastore Viewer
名前空間 サポート対象外 名前空間に対応
App Engine クライアント ライブラリの統合

App Engine スタンダード環境の Python 2.7 および PHP 5.5 ランタイムではサポートされない

App Engine スタンダード環境のその他すべてのランタイムでサポート

App Engine フレキシブル環境のすべてのランタイムでサポート

すべてのランタイムでサポート

新しいデータベースを作成する

新しい Firestore データベースは、ネイティブ モードまたは Datastore モードで作成できます。この選択は、プロジェクト内の既存のデータベースのモードには依存しません。

詳細については、データベースの作成と管理をご覧ください。

ネイティブ モードと Datastore モードを切り替える

データベースが空の場合は、ネイティブ モードと Datastore モードを切り替えることができます。

データベースをネイティブ モードに変更します。

gcloud

gcloud firestore databases update コマンドを使用して、データベースをネイティブ モードに変更します。

gcloud firestore databases update --type=firestore-native --database='DATABASE_ID'

DATABASE_ID は、データベースの ID に置き換えます。

rest

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"type":"FIRESTORE_NATIVE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/DATABASE_ID?updateMask=type"

以下を置き換えます。

  • PROJECT_ID: プロジェクト ID
  • DATABASE_ID: データベース ID

データベースを Datastore モードに変更します。

gcloud

gcloud firestore databases update コマンドを使用して、データベースを Datastore モードに変更します。

 gcloud firestore databases update --type=datastore-mode --database='DATABASE_ID'

DATABASE_ID は、データベースの ID に置き換えます。

rest

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"type":"DATASTORE_MODE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/DATABASE_ID?updateMask=type"

以下を置き換えます。

  • PROJECT_ID: プロジェクト ID
  • DATABASE_ID: データベース ID