Automatisches Upgrade auf Firestore

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

Firestore kann im Datastore-Modus ausgeführt werden und ist damit abwärtskompatibel mit Legacy-Cloud Datastore. 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 Einschrä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 müssen nicht mehr Ancestor-Abfragen sein.1
  • Transaktionen sind nicht mehr auf 25 Entitätsgruppen beschränkt.1
  • Schreibvorgänge in eine Entitätsgruppe sind nicht mehr auf einen pro Sekunde beschränkt.1

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

Ab 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 mit Optimismus mit Entitätsgruppen migrieren, unterliegen weiterhin dem Transaktionslimit von 25 Entitätsgruppen sowie dem Limit von 1 Schreibvorgang pro Sekunde in Firestore im Datastore-Modus. Abfragen in Transaktionen müssen Ancestor-Abfragen sein. Weitere Informationen finden Sie im Abschnitt „Optimierung der Nebenläufigkeit von Entitätengruppen“.

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.

Datenbanktyp ansehen

Mit dem Befehl gcloud alpha firestore databases describe können Sie Ihren Datenbanktyp aufrufen. Suchen Sie in der Ausgabe nach dem Feld type:

  • type: DATASTORE_MODE

    Der Datenbanktyp ist Firestore im Datastore-Modus. Ein Upgrade ist nicht erforderlich oder das Upgrade ist bereits abgeschlossen.

  • type ist in der Ausgabe nicht vorhanden

    Der Datenbanktyp ist Legacy-Cloud Datastore. Die Datenbank wird auf Firestore im Datastore-Modus aktualisiert.

  • type: FIRESTORE_NATIVE

    Der Datenbanktyp ist Firestore im Modus „Native“.

Upgrade-Phasen

Grundsätzlich folgen Sie diesem Vorgang, 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 Firestore-in- Datastore-Datenreplikat 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

Während 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 Schreibvorgänge auch synchron angewendet werden (und unterscheidet sich vom Standardverhalten von Legacy-Cloud Datastore, in 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. In den [logs] der Phase APPLY_WRITES_SYNCHRONOUSLY sehen Sie, ob diese Phase beim Upgrade Ihrer Datenbank berücksichtigt wurde.

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 ebenfalls über einen Nebenkanal zum Replikat von Firestore im Datastore-Modus. Dies geschieht im Rahmen des vorhandenen 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 wirkt sich nicht auf Legacy-Cloud Datastore-Vorgänge aus. 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. Vergleichen Sie dazu die Daten in Legacy-Cloud Datastore.

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 alte 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. Die semantische Cloud Datastore-Semantik für Lesevorgänge gilt weiterhin. Obwohl Lesevorgänge jetzt direkt aus Firestore stammen, ist Firestore weiterhin auf Legacy-Cloud Datastore angewiesen, um die strikte Aktualität der Lesevorgänge sicherzustellen.

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 verwendet Firestore im Datastore-Modus weiterhin Legacy-Cloud Datastore, um sicherzustellen, dass es vor jedem Schreibvorgang auf dem neuesten Stand ist. Nachdem eine letzte Karte / ein letzter Durchlauf sichergestellt wurde, dass alle vorherigen Schreibvorgänge angewendet wurden, beendet Firestore im Datastore-Modus die Beratung an Legacy-Cloud Datastore.

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 jetzt die Firestore-Nutzung anstelle der Legacy-Cloud Datastore-Nutzung angezeigt.

Transaktionen

Firestore im Datastore-Modus unterstützt drei Nebenläufigkeitsmodi:

  • Optimistisch

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

  • Optimistisch mit Entitätsgruppen

    Datenbanken, die von der semantischen Entitätsgruppe abhängen, werden in diesen Nebenläufigmodus migriert. Weitere Informationen

  • Pessimistisch

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

Auf den Nebenläufigmodus kann über die REST-Ressource projects.databases zugegriffen werden:

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

Sie können den Nebenläufigkeitsmodus auch in den Logs der Stufe PREPARE ermitteln.

Optimistisch mit dem Gleichzeitigkeitsmodus für Entitätsgruppen

Wenn Sie die Optimierungseinschränkungen bei Abfrage-, Transaktions- und Schreibdurchsatz von Entitätsgruppen entfernen möchten, ändern Sie den Nebenläufigkeitsmodus Ihres Projekts in Optimistic. So sorgen Sie dafür, dass diese Änderung mit Ihrem Projekt kompatibel ist:

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

  2. Ändern Sie den Nebenläufigkeitsmodus des Testprojekts in OPTIMISTIC. Senden Sie eine HTTP PATCH-Anfrage, wie unten dargestellt.

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

  4. Ändern Sie den Nebenläufigkeitsmodus des Hauptprojekts von OPTIMISTIC_WITH_ENTITY_GROUPS zu OPTIMISTIC.

HTTP-PATCH-Anfrage zum Ändern des Datenbanknebenläufigkeitsmodus:

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 datastore.googleapis.comLogging-Dienstes 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 benachrichtigt werden möchten, können Sie auf der Grundlage dieser beiden Logs logbasierte Messwerte und auf der Grundlage dieser Messwerte Benachrichtigungen erstellen.

Migrationsbanner in der Google Cloud Console

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

  1. Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.

    Zu den Datenbanken

  2. Wählen Sie die erforderliche Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Entitäten.

Aktuellen Status über eine Befehlszeile aufrufen

Verwenden Sie den folgenden Befehl, um schnell den aktuellen Status einer Migration anzusehen:gcloud

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 die nächste Phase fortgesetzt wird, bis sie fortgesetzt wird. Das Pausieren einer Migration kann Ihnen helfen zu bestimmen, ob eine beobachtete Verhaltens- oder Leistungsänderung das Ergebnis des Migrationsprozesses oder eines nicht relevanten Faktors ist.

Nachdem Sie die E-Mail-Benachrichtigung über die 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 angezeigt, die darauf hinweist, 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 hat.

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 Ihre Migration länger als eine Woche pausiert werden muss, wenden Sie sich an einen Supportkanal. Nach zwei Wochen kann die Migration automatisch fortgesetzt werden.

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.