Automatisches Upgrade auf Firestore

Auf dieser Seite wird der Upgradepfad von Legacy-Cloud Datastore zu Firestore im Datastore-Modus beschrieben.

Firestore kann im Datenspeichermodus ausgeführt werden, sodass es abwärtskompatibel mit Legacy-Cloud Datastore ist. Mit Firestore im Datastore-Modus können Sie Zugriff auf die verbesserte Speicherschicht von Firestore erhalten und gleichzeitig das Systemverhalten von Datastore beibehalten. Mit Firestore im Datastore-Modus werden die folgenden Beschränkungen für Legacy-Cloud Datastore aufgehoben:

  • Abfragen haben keine Eventual Consistency mehr. Stattdessen sind sie strikt konsistent, es sei denn, Sie fordern explizit Eventual Consistency an.
  • Abfragen in Transaktionen sind nicht mehr Fallback-Abfragen.1
  • Transaktionen sind nicht mehr auf 25 Entitätengruppen beschränkt1.
  • Schreibvorgänge in einer Entitätsgruppe sind nicht mehr auf 1 pro Sekunde1 beschränkt.

Weitere Informationen zum Datastore-Modus finden Sie unter Firestore im Datastore-Modus.

Im Juni 2021 haben Migrationen von Legacy-Cloud Datastore zu Firestore im Datastore-Modus begonnen. Die Migrationen beginnen mit Datenbanken mit sehr geringem Traffic und werden in den nächsten Monaten auf Datenbanken mit höherem Traffic erweitert.

1 Datenbanken, die zum Gleichzeitigkeitsmodus „Optimistisch mit Entitätsgruppen“ migrieren, unterliegen weiterhin dem Transaktionslimit von 25 Entitätengruppen sowie dem Limit von 1 Schreibvorgang pro Sekunde in Firestore im Datastore-Modus. Abfragen in Transaktionen müssen Vorgängerabfragen sein. Weitere Informationen finden Sie im Abschnitt Optimistischer Modus mit Entitätsgruppen mit Gleichzeitigkeit.

Automatisches Upgrade auf Firestore im Datastore-Modus

Wenn Sie eine Anwendung verwalten, die Legacy-Cloud Datastore verwendet, müssen Sie Ihren Anwendungscode nicht aktualisieren. Wir informieren Sie über den Zeitplan für das Upgrade Ihrer Anwendung auf Firestore im Datastore-Modus. Bei diesem Upgrade kommt es zu keinen Ausfallzeiten.

Wenn Sie weitere Fragen zum automatischen Upgradevorgang haben, setzen Sie sich über einen unserer Supportkanäle mit uns in Verbindung.

Upgrade-Phasen

Im Allgemeinen wird dieser Vorgang ausgeführt, um Ihre Legacy-Cloud Datastore-Datenbank auf Firestore im Datastore-Modus zu aktualisieren. Für diesen Prozess ist keine Ausfallzeit der Anwendung erforderlich:

  1. Fügen Sie Ihrer vorhandenen Legacy-Cloud Datastore-Datenbank ein neues Datenreplikat von Firestore im Datastore-Modus hinzu. Duplizieren Sie asynchron Entitätenschreibvorgänge in Firestore im Datastore-Modus.

  2. Vorhandene Daten und Indexeinträge aus Legacy-Cloud Datastore in Firestore im Datastore-Modus kopieren. Prüfen Sie die Daten nach dem Kopieren.

  3. Leiten Sie die Entitäten direkt an Firestore im Datastore-Modus weiter. Leiten Sie zuerst Lesevorgänge mit Eventually Consistency und dann Lesevorgänge mit strikter Konsistenz weiter.

  4. Leiten Sie Entitätenschreibvorgänge und transaktionale Lesevorgänge direkt an Firestore im Datastore-Modus weiter.

Dieser Prozess umfasst die folgenden Phasen.

1. Schreibvorgänge synchron anwenden

In dieser Phase werden Schreibvorgänge synchron auf Legacy-Cloud Datastore angewendet: Schreibvorgänge melden erst dann Erfolg, wenn alle Änderungen an Entitäten und Indexen auf mindestens ein Replikat angewendet wurden. Dies simuliert das Verhalten von Firestore im Datastore-Modus, bei dem auch Schreibvorgänge synchron angewendet werden (und unterscheidet sich vom Standardverhalten von Legacy-Cloud Datastore, bei dem Schreibvorgänge nach dem Commit asynchron angewendet werden).

In dieser Phase sollen vor dem Upgrade Latenzauswirkungen von synchronen Firestore in Datastore-Modus angezeigt werden. Die synchrone Anwendung von Schreibvorgängen wird während und nach der Migration fortgesetzt.

Datenbanken mit sehr geringer Aktivität überspringen diese Phase. Um festzustellen, ob diese Phase in das Upgrade Ihrer Datenbank aufgenommen wurde, prüfen Sie die [logs] für die Phase APPLY_WRITES_SYNCHRONOUSLY.

2. Kopieren und verifizieren

Diese Phase steht für den Beginn der Migration. Damit wird ein Replikat von Firestore im Datastore-Modus eingeführt und es werden die folgenden Schritte ausgeführt:

  1. Übersicht

    Entitätsschreibvorgänge in Legacy Cloud Datastore fließen auch durch einen Nebenkanal zum Replikat von Firestore im Datastore-Modus. Dies geschieht im Rahmen des bestehenden Replikationssystems von Legacy Cloud Datastore. Diese Schreibvorgänge wirken sich nicht auf die Schreiblatenz aus. Das Replikat von Firestore im Datastore-Modus puffert diese Schreibvorgänge, um sie nach dem Kopierschritt anzuwenden.

  2. Kopieren

    Erstellen Sie im Replikat von Firestore im Datastore-Modus eine Offline-Kopie Ihrer vorhandenen Daten und Indexeinträge. Der Kopierschritt hat keine Auswirkungen auf Legacy-Cloud Datastore-Vorgänge. Dieser Schritt kann mehrere Tage dauern.

  3. Drain-Übersicht

    Wenden Sie die Schreibvorgänge aus dem Übersichtsschritt auf die Daten aus der Offline-Kopie an.

  4. Daten prüfen

    Überprüfen Sie die Daten in Firestore im Datastore-Modus noch einmal, indem Sie sie mit den Daten in Legacy-Cloud Datastore vergleichen.

3. Lesevorgänge mit Eventually Consistency weiterleiten

Stellen Sie Lesevorgänge mit Eventually Consistency (Abfragen ohne Ancestor-Filter) aus Firestore im Datastore-Modus bereit. An dieser Stelle gilt weiterhin die Legacy-Cloud Datastore-Semantik für Lesevorgänge:

  • Ancestor-Abfragen haben strikte Konsistenz.
  • Nicht-Ancestor-Abfragen haben Eventual Consistency.
  • Suchvorgänge haben strikte Konsistenz (mit Ausnahme der explizit für Eventual Consistency konfigurierten Jobs).

Firestore im Datastore-Modus fungiert weiterhin als Replikat der Legacy-Cloud Datastore-Daten.

4. Lesevorgänge mit strikter Konsistenz weiterleiten

Stellen Sie strikt konsistente Lesevorgänge (nicht transaktional) aus Firestore im Datastore-Modus bereit. Beachten Sie, dass die Legacy-Cloud Datastore-Semantik für Lesevorgänge weiterhin gilt. Obwohl Lesevorgänge jetzt direkt aus Firestore stammen, greift Firestore weiterhin auf Legacy-Cloud Datastore zurück, um sicherzustellen, dass es für strikt konsistente Lesevorgänge auf dem neuesten Stand ist.

5. Schreibvorgänge weiterleiten

Leiten Sie Entitätenschreibvorgänge und transaktionale Lesevorgänge an Firestore im Datastore-Modus weiter. Gleichzeitige Änderungen an derselben Entität führen weiterhin zu Transaktionsabbrüchen. Gleichzeitige Änderungen an verschiedenen Entitäten innerhalb derselben Entitätengruppe führen nicht mehr zu Transaktionsabbrüchen.

Zu Beginn dieser Phase nutzt Firestore im Datastore-Modus weiterhin Legacy-Cloud Datastore, um die Daten vor jedem Schreibvorgang auf dem neuesten Stand zu halten. Nach dem letzten Durchlauf, der sicherstellt, dass alle vorherigen Schreibvorgänge angewendet wurden, stellt Firestore im Datastore-Modus die Beratung für Legacy-Cloud Datastore ein.

6. Migration abgeschlossen

Nun gilt die Semantik von Firestore im Datastore-Modus für Lesevorgänge: Alle Abfragen sind strikt konsistent.

Die Preise bleiben unverändert, aber Ihre Abrechnung listet jetzt Firestore-SKUs auf. Auf der Seite „App Engine-Kontingente“ wird statt der Legacy-Cloud Datastore-Nutzung die Firestore-Nutzung angezeigt.

Transaktionen

Firestore im Datastore-Modus unterstützt drei Gleichzeitigkeitsmodi:

  • Optimistisch

    Die meisten Legacy-Cloud Datastore-Datenbanken verwenden optimistische Nebenläufigkeit für Transaktionen in Firestore im Datastore-Modus. Optimistische Nebenläufigkeit behält das vorhandene Verhalten von Transaktionen im Legacy-Cloud Datastore bei.

  • Optimistisch mit Entitätsgruppen

    Datenbanken, die auf die semantische Entitätengruppe angewiesen sind, werden in diesen Gleichzeitigkeitsmodus migriert. Weitere Informationen finden Sie im Abschnitt zur Optimierung mit dem Gleichzeitigkeitsmodus für Entitätsgruppen.

  • Pessimistisch

    Einige zuvor migrierte Datenbanken mit sehr wenig Aktivität wurden mit pessimistischen Sperren für Transaktionen in Firestore im Datastore-Modus migriert.

Auf den Gleichzeitigkeitsmodus können Sie über die REST-Ressource projects.databases zugreifen:

curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases"

Den Nebenläufigkeitsmodus finden Sie auch in den Logs für die Phase PREPARE.

Optimistisch mit Nebenläufigkeit von Entitätsgruppen

Wenn Sie die Beschränkung für den Abfrage-, Transaktions- und Schreibdurchsatz von Entitätsgruppen entfernen möchten, ändern Sie den Gleichzeitigkeitsmodus Ihres Projekts zu Optimistisch. So stellen Sie sicher, dass diese Änderung mit Ihrem Projekt kompatibel ist:

  1. Erstellen Sie in Firestore ein Testprojekt im Datastore-Modus.

  2. Ändern Sie den Gleichzeitigkeitsmodus des Testprojekts in OPTIMISTIC. Senden Sie wie unten gezeigt eine HTTP PATCH-Anfrage.

  3. Führen Sie Tests für das Testprojekt durch, um sicherzustellen, dass die Arbeitslast ohne Entitätsgruppen wie erwartet funktioniert.

  4. Ändern Sie den Gleichzeitigkeitsmodus des Hauptprojekts von OPTIMISTIC_WITH_ENTITY_GROUPS zu OPTIMISTIC.

HTTP-PATCH-Anfrage zum Ändern des Gleichzeitigkeitsmodus der Datenbank:

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

Logging und Fortschrittsbenachrichtigungen

Beim Upgradeprozess wird Cloud Logging verwendet, um Fortschrittsaktualisierungen zu veröffentlichen. Verwenden Sie zum Aufrufen der Logs den Log-Explorer, die Cloud Logging API oder die Google Cloud CLI.

Aktualisierungen werden in zwei Logs unter dem Namen des Logging-Dienstes datastore.googleapis.com veröffentlicht:

Logname Überwachte Ressource Nutzlast
migration_state datastore_database type.googleapis.com/google.datastore.admin.v1.MigrationStateEvent
migration_progress datastore_database type.googleapis.com/google.datastore.admin.v1.MigrationProgressEvent

Das Log migrationmigration_state“ wird aktualisiert, wenn sich der Gesamtstatus des Upgrades (RUNNING und COMPLETE) ändert.

Das Log zur Migration_Progress wird jedes Mal aktualisiert, wenn das Upgrade in eine neue Phase verschoben wird (PREPARE, START, APPLY_WRITES_SYNCHRONOUSLY, COPY_AND_VERIFY, REDIRECT_EVENTUALLY_CONSISTENT_READS, REDIRECT_STRONGLY_CONSISTENT_READS und REDIRECT_WRITES).

Wenn Sie während des Upgrades Benachrichtigungen erhalten möchten, können Sie anhand der beiden Logs logbasierte Messwerte erstellen und auf der Grundlage dieser Messwerte Benachrichtigungen erstellen.

Migrationsbanner in der Google Cloud Console

Während der Migration Ihrer Legacy-Cloud Datastore-Datenbank wird auf der Seite Entitäten der Google Cloud Console ein Informationsbanner angezeigt. Dieses Banner enthält einen Link zum Öffnen von Cloud Logging und zum Filtern nach Migrationsupdates.

Zu den Datastore-Entitäten

Aktuellen Status über eine Befehlszeile aufrufen

Mit dem folgenden gcloud-Befehl können Sie den aktuellen Status einer Migration schnell abrufen:

gcloud datastore operations describe datastore-firestore-migration

Migration wird pausiert

Große Datenbankmigrationen können pausiert und fortgesetzt werden. Das Pausieren einer Migration verhindert, dass sie in die nächste Phase geht, bis sie fortgesetzt wird. Durch Pausieren einer Migration können Sie feststellen, ob eine beobachtete Änderung des Verhaltens oder der Leistung durch das Migrationsverfahren oder einen nicht relevanten Faktor verursacht wird.

Nachdem Sie die E-Mail-Benachrichtigung zur Migration Ihrer Datenbank erhalten haben, können Sie mit dem folgenden Befehl prüfen, ob sie pausiert und fortgesetzt werden kann. Wenn die Migration nicht zulässig ist, wird eine Fehlermeldung zurückgegeben, die angibt, dass die Funktion nicht verfügbar ist.

Wenn die Migration Ihrer Datenbank pausiert und fortgesetzt werden kann, funktionieren die folgenden Befehle, sobald die Migration die Phase START erreicht.

So pausieren Sie eine Migration:

curl --request POST \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{}' \
"https://datastore.googleapis.com/v1/projects/PROJECT_ID:pauseMigration"

So setzen Sie eine Migration fort:

curl --request POST \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{}' \
"https://datastore.googleapis.com/v1/projects/PROJECT_ID:resumeMigration"

Diese Befehle funktionieren nach Abschluss der Migration nicht mehr.

Wenn die Migration länger als eine Woche anhalten soll, wenden Sie sich an einen Supportkanal. Nach zwei Wochen wird die Migration möglicherweise automatisch fortgesetzt.

Cloud Monitoring-Messwerte

Die für Ihre Datastore-Datenbank verfügbaren Cloud Monitoring-Messwerte bleiben während des Upgrades erhalten, siehe verfügbare Datastore-Messwerte.