Mit der Wiederherstellung zu einem bestimmten Zeitpunkt arbeiten

Auf dieser Seite wird beschrieben, wie Sie die Wiederherstellung zu einem bestimmten Zeitpunkt verwenden, um Daten in Cloud Firestore aufzubewahren und wiederherzustellen.

Informationen zu den PITR-Konzepten finden Sie unter Wiederherstellung zu einem bestimmten Zeitpunkt.

Berechtigungen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zu gewähren, in dem Sie PITR aktivieren möchten, um die Berechtigungen zu erhalten, die Sie zum Verwalten der PITR-Einstellungen benötigen:

  • Cloud Datastore-Inhaber (roles/datastore.owner)

Achten Sie bei benutzerdefinierten Rollen darauf, dass die folgenden Berechtigungen gewährt werden:

  • So aktivieren Sie die PITR beim Erstellen einer Datenbank: datastore.databases.create
  • So aktualisieren Sie die PITR-Einstellungen für eine vorhandene Datenbank: datastore.databases.update,datastore.databases.list
  • Lesen von PITR-Daten: datastore.databases.get,datastore.entities.get,datastore.entities.list
  • So exportieren Sie PITR-Daten: datastore.databases.export
  • So importieren Sie PITR-Daten: datastore.databases.import

Hinweis

Beachten Sie die folgenden Punkte, bevor Sie mit der Verwendung der PITR beginnen:

  • Du kannst nicht direkt nach der letzten sieben Tage mit dem Lesen beginnen. PITR aktivieren.
  • Wenn Sie PITR beim Erstellen einer Datenbank aktivieren möchten, müssen Sie den Befehl gcloud firestore databases create verwenden. PITR aktivieren während Das Erstellen einer Datenbank mit der Google Cloud Console wird nicht unterstützt.
  • Cloud Firestore speichert Versionen ab diesem Zeitpunkt, nachdem PITR aktiviert wurde.
  • Nach dem Deaktivieren der PITR können Sie keine PITR-Daten im PITR-Fenster lesen.
  • Wenn Sie die PITR unmittelbar nach der Deaktivierung wieder aktivieren, werden die bisherigen ist nicht mehr verfügbar. Alle vor dem Deaktivieren der PITR erstellten PITR-Daten werden nach dem PITR-Ablaufdatum gelöscht werden.
  • Wenn Sie in der letzten Stunde versehentlich Daten gelöscht haben und die PITR deaktiviert ist, haben Sie kann Ihre Daten wiederherstellen, indem Sie die Wiederherstellung zu einem bestimmten Zeitpunkt innerhalb einer Stunde nach dem Löschen aktivieren.
  • Jeder Lesevorgang, der an abgelaufenen PITR-Daten ausgeführt wird, schlägt fehl.

PITR aktivieren

Aktivieren Sie die Abrechnung für Ihr Google Cloud-Konto, bevor Sie die Wiederherstellung zu einem bestimmten Zeitpunkt verwenden. Projekt. Nur Google Cloud-Projekte mit aktivierter Abrechnung können die PITR-Funktion verwenden.

So aktivieren Sie die PITR für Ihre Datenbank:

Console

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

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.

  4. Klicken Sie auf Bearbeiten, um die Einstellungen zu bearbeiten.

  5. Klicken Sie auf das Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren und dann auf Speichern.

Für das Aktivieren der PITR fallen Speicherkosten an. Weitere Informationen finden Sie unter Preise.

Wenn Sie die Wiederherstellung zu einem bestimmten Zeitpunkt deaktivieren möchten, entfernen Sie in der Google Cloud Console auf der Seite „Notfallwiederherstellung“ das Häkchen aus dem Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren.

gcloud

Aktivieren Sie die PITR während der Datenbankerstellung mit dem Befehl gcloud firestore databases create so:

gcloud firestore databases create\
  --location=LOCATION\
  [--database=DATABASE_ID; default="(default)"]\
  [--type=TYPE; default="firestore-native"]\
  --enable-pitr

Ersetzen Sie die Werte so:

  • Location ist der Speicherort, an dem Sie die Datenbank erstellen möchten.
  • DATABASE_ID – auf die Datenbank-ID oder (Standardeinstellung) festgelegt.
  • TYPE – auf Firestore-nativ festgelegt.

Sie können die Wiederherstellung zu einem bestimmten Zeitpunkt mit dem Befehl gcloud firestore databases update so deaktivieren:

gcloud firestore databases update\
  [--database=DATABASE_ID; default="(default)"]\
  --no-enable-pitr

Ersetzen Sie die Werte so:

  • DATABASE_ID – auf die Datenbank-ID oder (Standardeinstellung) festlegen

Aufbewahrungsdauer und früheste Versionszeit abrufen

Console

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

    Zur Seite „Datenbanken“

  2. Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.

  3. Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.

  4. Notieren Sie sich im Bereich Einstellungen die Aufbewahrungsdauer und den Zeitstempel der ältesten Version.

    • Aufbewahrungsdauer: der Zeitraum, in dem Cloud Firestore alle Versionen von Daten für die Datenbank. Der Wert beträgt eine Stunde, wenn die PITR deaktiviert und 7 Tage, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert ist.
    • Frühester Versionszeitpunkt: der früheste Zeitstempel für den Zeitpunkt, zu dem ältere Versionen von können die Daten im PITR-Fenster gelesen werden. Dieser Wert wird kontinuierlich aktualisiert von Cloud Firestore und ist veraltet, sobald die Abfrage abgefragt wird. Wenn Sie diesen Wert für die Wiederherstellung von Daten verwenden, berücksichtigen Sie die Zeit vom den Moment, in dem der Wert bis zu dem Moment abgefragt wird, in dem Sie Genesung.
    • Wiederherstellung zu einem bestimmten Zeitpunkt: Bei PITR wird Enabled angezeigt. aktiviert ist. Ist die PITR deaktiviert, sehen Sie Disabled

gcloud

Führen Sie den Befehl gcloud Firestore databases describe so aus:

gcloud firestore databases describe --database=DATABASE_ID

Ersetzen Sie DATABASE_ID durch die Datenbank-ID oder default.

Hier ist die Ausgabe:

    appEngineIntegrationMode: ENABLED
    concurrencyMode: PESSIMISTIC
    createTime: '2021-03-24T17:02:35.234Z'
    deleteProtectionState: DELETE_PROTECTION_DISABLED
    earliestVersionTime: '2023-06-12T16:17:25.222474Z'
    etag: IIDayqOevv8CMNTvyNK4uv8C
    keyPrefix: s
    locationId: nam5
    name: projects/PROJECT_ID/databases/(default)
    pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
    type: FIRESTORE_NATIVE
    uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
    updateTime: '2021-11-17T17:48:22.171180Z'
    versionRetentionPeriod: 3600s

Dabei gilt:

  • earliestVersionTime: Zeitstempel der frühesten gespeicherten PITR-Daten.
  • pointInTimeRecoveryEnablement: zeigt POINT_IN_TIME_RECOVERY_ENABLED an, falls PITR aktiviert ist. Ist die Wiederherstellung zu einem bestimmten Zeitpunkt deaktiviert, sehen Sie entweder POINT_IN_TIME_RECOVERY_DISABLED oder die pointInTimeRecoveryEnablement wird möglicherweise nicht angezeigt.
  • versionRetentionPeriod: Zeitraum in Millisekunden, für den PITR-Daten gespeichert werden. Der Wert kann eine Stunde betragen, wenn die PITR deaktiviert ist, oder sieben Tage, wenn die PITR aktiviert ist.

PITR-Daten lesen

Sie können PITR-Daten mit den Clientbibliotheken, REST API-Methoden oder dem FirestoreIO Apache Beam-Connector lesen.

Clientbibliotheken

Java

Sie müssen die ReadOnly-Transaktion verwenden, um PITR-Daten zu lesen. Sie können readTime nicht direkt in Lesevorgängen angeben. Weitere Informationen finden Sie unter Transaktionen und Batch-Schreibvorgänge.

  Firestore firestore = …

  TransactionOptions options =
          TransactionOptions.createReadOnlyOptionsBuilder()
              .setReadTime(
                  com.google.protobuf.Timestamp.newBuilder()
                      .setSeconds(1684098540L)
                      .setNanos(0))
              .build();

  ApiFuture<Void> futureTransaction = firestore.runTransaction(
              transaction -> {
                // Does a snapshot read document lookup
                final DocumentSnapshot documentResult =
                    transaction.get(documentReference).get();

                // Executes a snapshot read query
                final QuerySnapshot queryResult =
                  transaction.get(query).get();
              },
              options);

  // Blocks on transaction to complete
  futureTransaction.get();

Knoten

Sie müssen eine ReadOnly-Transaktion verwenden, um PITR-Daten zu lesen. Sie können readTime in Lesevorgängen nicht direkt angeben. Weitere Informationen finden Sie unter Transaktionen und Batch-Schreibvorgänge.

  const documentSnapshot = await firestore.runTransaction(
    updateFunction => updateFunction.get(documentRef),
    {readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);

  const querySnapshot = await firestore.runTransaction(
    updateFunction => updateFunction.get(query),
    {readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
  )

REST API

PITR-Lesevorgänge werden in allen Cloud Firestore-Lesemethoden unterstützt: get, list, batchGet, listCollectionIds, listDocuments runQuery, runAggregationQuery und partitionQuery.

Sie haben folgende Möglichkeiten, eine Leseoperation mit den REST-Methoden auszuführen:

  1. Übergeben Sie in der Anfrage für die Lesemethode den Wert readTime als unterstützten PITR-Zeitstempel in der Methode readOptions. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit Mikrosekundengenauigkeit innerhalb der letzten Stunde oder ein Zeitstempel einer ganzen Minute nach der letzten Stunde sein, aber nicht vor dem earliestVersionTime.

  2. Verwenden Sie den Parameter readTime zusammen mit der Methode BeginTransaction als Teil einer ReadOnly-Transaktion für mehrere PITR-Lesungen.

Apache Beam

Mit dem Cloud FirestoreIO Apache Beam-Connector können Sie Dokumente in einer Cloud Firestore-Datenbank im großen Maßstab mit Dataflow lesen oder schreiben.

PITR-Lesungen werden von der folgenden Lesemethode des Cloud FirestoreIO-Connectors unterstützt. Diese Lesemethoden unterstützen die Die Methode withReadTime(@Nullable Instant readTime), die Sie für die PITR verwenden können lautet:

Java

Der folgende Code kann mit dem Beispielcode für die Dataflow-Pipeline für Bulk-Lese- oder Schreibvorgänge verwendet werden. In diesem Beispiel wird die Methode withReadTime(@Nullable Instant readTime) für PITR-Lesevorgänge verwendet.

  Instant readTime = Instant.ofEpochSecond(1684098540L);

  PCollection<Document> documents =
      pipeline
          .apply(Create.of(collectionId))
          .apply(
              new FilterDocumentsQuery(
                  firestoreOptions.getProjectId(), firestoreOptions.getDatabaseId()))
          .apply(FirestoreIO.v1().read().runQuery().withReadTime(readTime).withRpcQosOptions(rpcQosOptions).build())
  ...

Eine vollständige Liste der readTime-Beispiele in der Dataflow-Pipeline finden Sie im GitHub-Repository.

Export und Import aus PITR-Daten

Sie können Ihre Datenbank aus PITR-Daten nach Cloud Storage exportieren mit dem Befehl gcloud firestore export. Sie können PITR-Daten exportieren, deren Zeitstempel auf eine volle Minute innerhalb der letzten sieben Tage festgelegt ist, aber nicht älter als der earliestVersionTime ist. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, schlägt der Exportvorgang fehl.

Der PITR-Exportvorgang unterstützt alle Filter, einschließlich des Exports aller Dokumente und des Exports bestimmter Sammlungen.

  1. Exportieren Sie die Datenbank und geben Sie für den Parameter snapshot-time den gewünschten Wiederherstellungszeitstempel an.

    gcloud

    Führen Sie den folgenden Befehl aus, um die Datenbank in Ihren Bucket zu exportieren.

    gcloud firestore export gs://[BUCKET_NAME_PATH] \
        --snapshot-time=[PITR_TIMESTAMP] \
        --collection-ids=[COLLECTION_IDS] \
        --namespace-ids=[NAMESPACE_IDS]
    

    Dabei gilt:

    • BUCKET_NAME_PATH: ein gültiger Cloud Storage-Bucket mit einem optionalen Pfadpräfix, in dem Exportdateien gespeichert werden.
    • PITR_TIMESTAMP: ein PITR-Zeitstempel mit minutengenauem Detaillierungsgrad, z. B. 2023-05-26T10:20:00.00Z oder 2023-10-19T10:30:00.00-07:00.
    • COLLECTION_IDS: eine Liste von Sammlungs-IDs oder Sammlungsgruppen-IDs, z. B. 'specific collection group1','specific collection group2'
    • NAMESPACE_IDS: eine Liste von Namespace-IDs, z. B. 'customer','orders'

    Beachten Sie die folgenden Punkte, bevor Sie PITR-Daten exportieren:

    • Zeitstempel in RFC 3339 angeben Format. Beispiel: 2023-05-26T10:20:00.00Zoder 2023-10-19T10:30:00.00-07:00
    • Der angegebene Zeitstempel muss eine ganze Minute sein innerhalb der letzten sieben Tage, aber nicht vor dem earliestVersionTime Wenn am angegebenen Ort keine Daten mehr vorhanden sind, wird ein Fehler generiert. Der Zeitstempel muss eine ganze Minute sein, auch wenn die angegebene Zeit innerhalb der letzten Stunde liegt.
    • Für einen fehlgeschlagenen PITR-Export werden Ihnen keine Gebühren in Rechnung gestellt.
  2. Import in eine Datenbank

    Folgen Sie der Anleitung unter Alle Dokumente importieren, um Ihre exportierten Datenbank. Wenn ein Dokument bereits in Ihrer Datenbank vorhanden ist, überschrieben werden.