Auf dieser Seite wird beschrieben, wie Sie Point-in-Time Recovery (PITR) verwenden, um Daten in Cloud Firestore aufzubewahren und wiederherzustellen.
Informationen zum Verständnis der PITR-Konzepte finden Sie unter Point-in-Time Recovery .
Berechtigungen
Um die Berechtigungen zu erhalten, die Sie zum Verwalten von PITR-Einstellungen benötigen, bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zu erteilen, in dem Sie PITR aktivieren möchten:
- Besitzer des Cloud-Datenspeichers (
roles/datastore.owner
)
Stellen Sie für benutzerdefinierte Rollen sicher, dass die folgenden Berechtigungen gewährt werden:
- So aktivieren Sie PITR beim Erstellen einer Datenbank:
datastore.databases.create
- So aktualisieren Sie PITR-Einstellungen für eine vorhandene Datenbank:
datastore.databases.update
,datastore.databases.list
- So führen Sie Lesevorgänge aus PITR-Daten durch:
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
Bevor Sie beginnen
Beachten Sie die folgenden Punkte, bevor Sie PITR verwenden:
- Sie können nicht unmittelbar nach der Aktivierung von PITR mit dem Lesen von sieben Tagen in der Vergangenheit beginnen.
- Wenn Sie PITR beim Erstellen einer Datenbank aktivieren möchten, müssen Sie den Befehl
gcloud firestore databases create
verwenden. Die Aktivierung von PITR beim Erstellen einer Datenbank mit der GCP Console wird nicht unterstützt. - Cloud Firestore beginnt mit der Aufbewahrung von Versionen ab dem Zeitpunkt nach der Aktivierung von PITR.
- Sie können PITR-Daten nicht im PITR-Fenster lesen, nachdem Sie PITR deaktiviert haben.
- Wenn Sie PITR unmittelbar nach der Deaktivierung wieder aktivieren, sind die früheren PITR-Daten nicht mehr verfügbar. Alle PITR-Daten, die vor der Deaktivierung von PITR erstellt wurden, werden nach dem PITR-Ablaufdatum gelöscht.
- Wenn Sie in der letzten Stunde versehentlich Daten gelöscht haben und PITR deaktiviert ist, können Sie Ihre Daten wiederherstellen, indem Sie PITR innerhalb einer Stunde nach dem Löschen aktivieren.
- Jeder Lesevorgang für abgelaufene PITR-Daten schlägt fehl.
Aktivieren Sie PITR
Aktivieren Sie vor der Verwendung von PITR die Abrechnung für Ihr Google Cloud-Projekt . Nur Google Cloud-Projekte mit aktivierter Abrechnung können die PITR-Funktionalität nutzen.
So aktivieren Sie PITR für Ihre Datenbank:
Konsole
Gehen Sie in der Google Cloud Platform Console zur Seite „Datenbanken“ .
Wählen Sie aus der Liste der Datenbanken die gewünschte Datenbank aus.
Klicken Sie im Navigationsmenü auf Disaster Recovery .
Klicken Sie auf Bearbeiten , um die Einstellungen zu bearbeiten.
Aktivieren Sie das Kontrollkästchen Point-in-Time-Wiederherstellung aktivieren und klicken Sie dann auf Speichern .
Durch die Aktivierung von PITR würden Speicherkosten anfallen. Weitere Informationen finden Sie unter Preise .
Um PITR zu deaktivieren, deaktivieren Sie das Kontrollkästchen Point-in-Time-Wiederherstellung aktivieren auf der Seite Notfallwiederherstellung in der GCP-Konsole.
gcloud
Aktivieren Sie PITR während der Datenbankerstellung mit dem gcloud firestore databases create
-Befehl wie folgt:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
Ersetzen Sie die Werte wie folgt:
-
Location
– Standort, an dem Sie Ihre Datenbank erstellen möchten. -
DATABASE_ID
– auf die Datenbank-ID oder (Standard) eingestellt. -
TYPE
– auf Firestore-nativ eingestellt.
Sie können PITR mit dem gcloud firestore databases update
Befehl wie folgt deaktivieren:
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
Ersetzen Sie die Werte wie folgt:
-
DATABASE_ID
– auf die Datenbank-ID oder (Standard) eingestellt.
Erhalten Sie den Aufbewahrungszeitraum und die früheste Versionszeit
Konsole
Gehen Sie in der Google Cloud Platform Console zur Seite „Datenbanken“ .
Wählen Sie aus der Liste der Datenbanken die gewünschte Datenbank aus.
Klicken Sie im Navigationsmenü auf Disaster Recovery .
Beachten Sie im Abschnitt „Einstellungen“ den Aufbewahrungszeitraum und die Zeit der frühesten Version .
- Aufbewahrungszeitraum : Der Zeitraum, in dem Cloud Firestore alle Datenversionen für die Datenbank aufbewahrt. Der Wert beträgt eine Stunde, wenn PITR deaktiviert ist, und sieben Tage, wenn PITR aktiviert ist.
- Früheste Versionszeit : Der früheste Zeitstempel, zu dem ältere Versionen der Daten im PITR-Fenster gelesen werden können. Dieser Wert wird von Cloud Firestore kontinuierlich aktualisiert und veraltet, sobald er abgefragt wird. Wenn Sie diesen Wert zum Wiederherstellen von Daten verwenden, berücksichtigen Sie unbedingt die Zeit von der Abfrage des Werts bis zu dem Zeitpunkt, an dem Sie die Wiederherstellung starten.
- Wiederherstellung zu einem bestimmten Zeitpunkt : Zeigt
Enabled
an, wenn PITR aktiviert ist. Wenn PITR deaktiviert ist, wirdDisabled
angezeigt.
gcloud
Führen Sie den Befehl „gcloud firestore Databases beschreiben“ wie folgt 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
Wo,
-
earliestVersionTime
– Zeitstempel der frühesten gespeicherten PITR-Daten. -
pointInTimeRecoveryEnablement
: zeigtPOINT_IN_TIME_RECOVERY_ENABLED
an, wenn PITR aktiviert ist. Wenn PITR deaktiviert ist, wird entwederPOINT_IN_TIME_RECOVERY_DISABLED
angezeigt oder das FeldpointInTimeRecoveryEnablement
wird möglicherweise nicht angezeigt. -
versionRetentionPeriod
– Zeitraum, für den PITR-Daten aufbewahrt werden, in Millisekunden. Der Wert kann eine Stunde betragen, wenn PITR deaktiviert ist, oder sieben Tage, wenn PITR aktiviert ist.
PITR-Daten lesen
Sie können PITR-Daten mithilfe der Clientbibliotheken, REST-API-Methoden oder des FirestoreIO Apache Beam-Connectors lesen.
Client-Bibliotheken
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
nicht direkt in Lesevorgängen 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 .
Um einen Lesevorgang mit den REST-Methoden durchzuführen, probieren Sie eine der folgenden Optionen aus:
Übergeben Sie in Ihrer Lesemethodenanforderung den
readTime
Wert als unterstützten PITR-Zeitstempel in derreadOptions
Methode. Ein PITR-Zeitstempel kann entweder ein Zeitstempel mit Mikrosekundengenauigkeit innerhalb der letzten Stunde oder ein Zeitstempel mit einer ganzen Minute nach der letzten Stunde sein, jedoch nicht früher als dieearliestVersionTime
.Verwenden Sie den Parameter
readTime
zusammen mit der MethodeBeginTransaction
als Teil einerReadOnly
Transaktion für mehrere PITR-Lesevorgänge.
Apache Beam
Verwenden Sie den Cloud FirestoreIO Apache Beam-Connector, um mit Dataflow in großem Umfang Dokumente in einer Cloud Firestore-Datenbank zu lesen oder zu schreiben.
PITR-Lesevorgänge werden in der folgenden Lesemethode des Cloud FirestoreIO-Connectors unterstützt. Diese Lesemethoden unterstützen die Methode withReadTime(@Nullable Instant readTime)
, die Sie für PITR-Lesevorgänge verwenden können:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
Der folgende Code kann mit dem Beispiel-Dataflow-Pipeline-Code für Massenlese- oder -schreibvorgänge verwendet werden. Das Beispiel verwendet die Methode withReadTime(@Nullable Instant readTime)
für PITR-Lesevorgänge.
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 von PITR-Daten
Mit dem Befehl gcloud firestore export
können Sie Ihre Datenbank aus PITR-Daten in Cloud Storage exportieren. Sie können PITR-Daten exportieren, bei denen der Zeitstempel ein ganzer Minutenzeitstempel innerhalb der letzten sieben Tage ist, jedoch nicht früher als die earliestVersionTime
. 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.
Exportieren Sie die Datenbank und geben Sie dabei als 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]
Wo,
-
BUCKET_NAME_PATH
– ein gültiger Cloud Storage-Bucket mit einem optionalen Pfadpräfix, in dem Exportdateien gespeichert werden. -
PITR_TIMESTAMP
– ein PITR-Zeitstempel in Minutenauflösung, zum Beispiel2023-05-26T10:20:00.00Z
oder2023-10-19T10:30:00.00-07:00
. -
COLLECTION_IDS
– eine Liste von Sammlungs-IDs oder Sammlungsgruppen-IDs, zum Beispiel'specific collection group1'
,'specific collection group2'
. -
NAMESPACE_IDS
– eine Liste von Namespace-IDs, zum Beispiel'customer'
,'orders'
.
Beachten Sie die folgenden Punkte, bevor Sie PITR-Daten exportieren:
- Geben Sie den Zeitstempel im RFC 3339-Format an. Zum Beispiel
2023-05-26T10:20:00.00Z
oder2023-10-19T10:30:00.00-07:00
. - Stellen Sie sicher, dass der von Ihnen angegebene Zeitstempel ein ganzer Minutenzeitstempel der letzten sieben Tage ist, jedoch nicht früher als die
earliestVersionTime
. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, wird ein Fehler generiert. Der Zeitstempel muss eine ganze Minute betragen, auch wenn die angegebene Zeit innerhalb der letzten Stunde liegt. - Für einen fehlgeschlagenen PITR-Export werden Ihnen keine Kosten berechnet.
-
In eine Datenbank importieren.
Führen Sie die Schritte unter „Alle Dokumente importieren“ aus, um Ihre exportierte Datenbank zu importieren. Wenn in Ihrer Datenbank bereits ein Dokument vorhanden ist, wird es überschrieben.