Firestore への自動アップグレード

このページでは、Cloud Datastore から Datastore モードの Firestore へのアップグレード パスについて説明します。

Firestore は Datastore モードで動作するため、Cloud Datastore との下位互換性があります。Datastore モードの Firestore では、Datastore システムの動作を維持しながら Firestore の改善されたストレージ レイヤにアクセスできます。Datastore モードの Firestore では、Cloud Datastore の次の制限がなくなります。

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

Datastore モードの詳細については、Datastore モードの Firestore をご覧ください。

2021 年 6 月に Cloud Datastore から Datastore モードの Firestore への移行が開始されました。移行は、非常に低いトラフィック データベースから始まり、今後数か月でトラフィック量の多いデータベースに拡張する予定です。

Datastore モードの Firestore への自動アップグレード

Cloud Datastore を使用するアプリケーションを管理している場合は、アプリケーション コードの更新は必要ありません。Google から、アプリケーションを Datastore モードの Firestore にアップグレードするスケジュールをお知らせします。このアップグレードにダウンタイムは必要ありません。

自動アップグレード プロセスについてご不明な点がある場合は、各サポート窓口までお問い合わせください。

アップグレードのステージ

大まかに言うと、このプロセスに従って Cloud Datastore データベースを Datastore モードの Firestore にアップグレードします。このプロセスにアプリケーションのダウンタイムは必要ありません。

  1. 新しい Datastore モードの Firestore データレプリカを既存の Cloud Datastore データベースに追加します。Datastore モードの Firestore にエンティティの書き込みオペレーションを非同期で複製します。

  2. 既存のデータとインデックス エントリを Cloud Datastore から Datastore モードの Firestore にコピーします。コピーが完了したら、データを確認します。

  3. Datastore モードの Firestore に直接エンティティをリダイレクトします。まず、結果整合性を読み込み、強整合性の読み込みをリダイレクトします。

  4. エンティティの書き込みとトランザクション型の読み取りを Datastore モードの Firestore に直接リダイレクトします。

このプロセスでは以下のステージを使用します。

1. 書き込みを同期して適用する

このステージでは、書き込みが Cloud Datastore に同期的に適用されます。エンティティとインデックスへのすべての変更が少なくとも 1 つのレプリカに適用されるまで、書き込みは成功を報告しません。これにより、Datastore モードの Firestore の動作がシミュレートされます。これにより、書き込みも同期的に適用されます(書き込みが commit された後、非同期で適用される Cloud Datastore のデフォルトの動作とは異なります)。

このステージでは、アップグレード前に Datastore モードの Firestore での同期適用のレイテンシへの影響を明らかにします。書き込みの同期適用は、移行中と移行後も続行されます。

アクティビティがほとんどないデータベースはこのステージをスキップします。このステージがデータベースのアップグレードに含まれているかどうかを確認するには、APPLY_WRITES_SYNCHRONOUSLY ステージのログを調べます。

2. コピーして確認する

このステージは移行の開始を表します。Datastore モードの Firestore のレプリカが導入されており、次の操作を行います。

  1. ジャーナル

    Cloud Datastore へのエンティティの書き込みオペレーションも、Datastore モードの Firestore レプリカへのサイドチャネルでも開始されます。これは、Cloud Datastore の既存のレプリケーション システムの一部として行われます。これらの書き込みオペレーションは、書き込みレイテンシには影響しません。Datastore モードの Firestore レプリカは、コピー手順の後に適用する書き込みオペレーションをバッファします。

  2. コピー

    Datastore モードの Firestore レプリカで、既存のデータとインデックス エントリのオフライン コピーを作成します。コピー手順は Cloud Datastore のオペレーションに影響しません。このステップは数日続く場合があります。

  3. ジャーナルを排出する

    オフライン コピーのデータの上にジャーナル ステップによる書き込みを適用します。

  4. データを確認する

    Datastore モードの Firestore のデータを再確認するには、Cloud Datastore のデータに対して比較します。

3. 結果整合性読み取りをリダイレクトする

Datastore モードの Firestore から結果整合性読み取り(祖先フィルタのないクエリ)が提供されます。この時点では、読み取りのための Cloud Datastore セマンティクスは引き続き適用されます。

  • 祖先クエリは強整合性を持ちます。
  • 非祖先クエリは結果整合性になります。
  • ルックアップは強整合性を持ちます(結果整合性向けに明示的に構成されているものを除く)。

Datastore モードの Firestore は、引き続き Cloud Datastore データのレプリカとして動作します。

4. 強整合性読み取りをリダイレクトする

Datastore モードの Firestore から強整合性読み取り(トランザクション以外)が提供されます。読み取りのための Cloud Datastore セマンティクスは引き続き適用されます。Firestore から直接読み取りを行うようになった場合でも、Firestore は、強整合性読み取りのために最新であることを Cloud Datastore に依存して保証します。

5. 書き込みをリダイレクトする

エンティティの書き込みとトランザクション型の読み取りを Datastore モードの Firestore にリダイレクトします。同じエンティティを同時に変更すると、トランザクションが中止されます。 同じエンティティ グループ内の異なるエンティティを同時に変更しても、トランザクションが中止されることはありません。

この段階の初期でも、Datastore モードの Firestore は、それぞれの書き込みが行われる前に最新であることが保証されるよう Cloud Datastore に依存しています。先に実行されたすべての書き込みが確実に適用される最終パスが終了すると、Datastore モードの Firestore は Cloud Datastore のコンサルティングを停止します。

6 移行完了

読み取りのための Datastore モードの Firestore のセマンティクスが適用され、すべてのクエリが強整合性になります。

料金はこれまでと同じですが、料金には Firestore SKU が表示されます。[App Engine の割り当て] ページには、Cloud Datastore の使用量の代わりに Firestore の使用量が表示されます。

履歴

Cloud Datastore データベースは、Datastore モードの Firestore のトランザクションでオプティミスティック同時実行を使用します。オプティミスティック同時実行では、Cloud Datastore 内のトランザクションの既存の動作が維持されます。

アクティビティが少ない、以前の移行された一部のデータベースは、オプティミスティック同時実行ではなく、Datastore モードの Firestore のトランザクションのペシミスティック ロックを使用して移行されました。

移行中または移行後にデータベースの同時実行モードを確認するには、PREPARE ステージのログを調べます。

ログと進捗状況の通知

アップグレード プロセスでは、Cloud Logging を使用して進捗状況のアップデートを公開します。ログを表示するには、Logs ExplorerCloud Logging API、または Cloud SDK を使用します。

アップデートは、datastore.googleapis.com ロギング サービス名の下にある 2 つのログに公開されます。

ログ名 モニタリング対象リソース ペイロード
migration_state datastore_database type.googleapis.com/google.datastore.admin.v1.MigrationStateEvent
migration_progress datastore_database type.googleapis.com/google.datastore.admin.v1.MigrationProgressEvent

migration_state ログは、アップグレードの全体的な状態(RUNNINGCOMPLETE)が変更されると更新されます。

migration_progress ログは、アップグレードが新しいステージ(PREPARESTARTAPPLY_WRITES_SYNCHRONOUSLYCOPY_AND_VERIFYREDIRECT_EVENTUALLY_CONSISTENT_READSREDIRECT_STRONGLY_CONSISTENT_READSREDIRECT_WRITES)に移行するたびに更新されます。

アップグレードの進行中に通知を受け取るには、2 つのログに基づいてログベースの指標を作成し、これらの指標に基づいてアラートを作成します。

Cloud Monitoring の指標

Datastore データベースで使用できる Cloud Monitoring 指標は、アップグレード プロセス中も変わりません。利用可能な Datastore の指標をご覧ください