Auf dieser Seite wird beschrieben, wie Sie mit der Wiederherstellung zu einem bestimmten Zeitpunkt Daten in Cloud Firestore speichern und wiederherstellen.
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 darauf, dass für benutzerdefinierte Rollen die folgenden Berechtigungen gewährt werden:
- So aktivieren Sie die Wiederherstellung zu einem bestimmten Zeitpunkt beim Erstellen einer Datenbank:
datastore.databases.create
- So aktualisieren Sie die PITR-Einstellungen in einer vorhandenen 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:
- Sie können nicht sofort nach der Aktivierung der PITR-Datenwiederherstellung mit dem Lesen von Daten beginnen, die sieben Tage zurückliegen.
- Wenn Sie die PITR beim Erstellen einer Datenbank aktivieren möchten, müssen Sie den Befehl
gcloud firestore databases create
verwenden. Das Aktivieren von PITR beim Erstellen einer Datenbank über die Google Cloud Console wird nicht unterstützt. - Cloud Firestore speichert Versionen ab diesem Zeitpunkt, nachdem die PITR-Funktion aktiviert wurde.
- Nachdem Sie PITR deaktiviert haben, können Sie keine PITR-Daten im PITR-Fenster mehr lesen.
- Wenn Sie PITR sofort nach der Deaktivierung wieder aktivieren, sind die bisherigen PITR-Daten nicht mehr verfügbar. Alle PITR-Daten, die vor dem Deaktivieren von PITR erstellt wurden, werden nach dem Ablaufdatum von PITR gelöscht.
- Wenn Sie in der letzten Stunde versehentlich Daten gelöscht haben und PITR deaktiviert ist, können Sie sie wiederherstellen, indem Sie PITR innerhalb einer Stunde nach dem Löschen aktivieren.
- Alle Lesevorgänge, die auf abgelaufenen PITR-Daten ausgeführt werden, schlagen fehl.
PITR aktivieren
Bevor Sie die Wiederherstellung zu einem bestimmten Zeitpunkt verwenden, aktivieren Sie die Abrechnung für Ihr Google Cloud-Projekt. Nur Google Cloud-Projekte mit aktivierter Abrechnung können die PITR-Funktion verwenden.
So aktivieren Sie die PITR für Ihre Datenbank:
Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.
Klicken Sie auf Bearbeiten, um die Einstellungen zu bearbeiten.
Klicken Sie auf das Kästchen Wiederherstellung zu einem bestimmten Zeitpunkt aktivieren und dann auf Speichern.
Wenn Sie PITR aktivieren, fallen Speicherkosten an. Weitere Informationen finden Sie unter Preise.
Wenn Sie die PITR deaktivieren möchten, entfernen Sie in der Google Cloud Console auf der Seite „Notfallwiederherstellung“ das Häkchen aus dem Kästchen Point-in-Time-Wiederherstellung aktivieren.
gcloud
Aktivieren Sie PITR während der Datenbankerstellung mit dem Befehl gcloud firestore databases create
:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
Ersetzen Sie die Werte so:
Location
: Speicherort, an dem Sie die Datenbank erstellen möchten.DATABASE_ID
– auf die Datenbank-ID oder (Standardeinstellung) festgelegt.TYPE
– auf „firestore-native“ festgelegt.
So deaktivieren Sie PITR mit dem Befehl gcloud firestore databases update
:
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 Zeitstempel der ältesten Version abrufen
Console
Rufen Sie in der Google Cloud Console die Seite Datenbanken auf.
Wählen Sie die benötigte Datenbank aus der Liste der Datenbanken aus.
Klicken Sie im Navigationsmenü auf Notfallwiederherstellung.
Notieren Sie sich im Abschnitt Einstellungen die Aufbewahrungsdauer und den Zeitstempel der ältesten Version.
- Aufbewahrungsdauer: Der Zeitraum, in dem Cloud Firestore alle Datenversionen für die Datenbank aufbewahrt. Der Wert ist eine Stunde, wenn die PITR deaktiviert ist, und sieben Tage, wenn die PITR aktiviert ist.
- Frühester Versionszeitpunkt: 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 ist in dem Moment veraltet, in dem er abgefragt wird. Wenn Sie diesen Wert zum Wiederherstellen von Daten verwenden, achten Sie darauf, die Zeit zwischen der Abfrage des Werts und dem Start der Wiederherstellung zu berücksichtigen.
- Wiederherstellung zu einem bestimmten Zeitpunkt: Wird
Enabled
angezeigt, wenn die Wiederherstellung zu einem bestimmten Zeitpunkt aktiviert ist. Wenn PITR deaktiviert ist, wirdDisabled
angezeigt.
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
: WirdPOINT_IN_TIME_RECOVERY_ENABLED
angezeigt, 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, in dem PITR-Daten in Millisekunden aufbewahrt 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 mithilfe der Clientbibliotheken, REST API-Methoden oder des FirestoreIO Apache Beam-Connectors lesen.
Clientbibliotheken
Java
Sie müssen die 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.
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-Lesungen werden von 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:
Geben Sie in der Anfrage für die Lesemethode den Wert
readTime
als unterstützten PITR-Zeitstempel in der MethodereadOptions
an. 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 älter als derearliestVersionTime
.Verwenden Sie den Parameter
readTime
zusammen mit der MethodeBeginTransaction
als Teil einerReadOnly
-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 Methode withReadTime(@Nullable Instant readTime)
, die Sie für PITR-Lesungen verwenden können:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
Der folgende Code kann mit dem Beispielcode für Dataflow-Pipelines für Bulk-Lese- oder Schreibvorgänge verwendet werden. In diesem Beispiel wird die withReadTime(@Nullable Instant readTime)
-Methode für PITR-Lesungen 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.
Daten aus PITR exportieren und importieren
Sie können Ihre Datenbank mit dem Befehl gcloud firestore export
aus PITR-Daten nach Cloud Storage exportieren. Sie können PITR-Daten exportieren, bei denen der Zeitstempel ein ganzminütiger Zeitstempel innerhalb der letzten sieben Tage, aber nicht vor 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.
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
oder2023-10-19T10:30:00.00-07:00
.COLLECTION_IDS
: 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 Folgendes, bevor Sie PITR-Daten exportieren:
- Geben Sie den Zeitstempel im RFC 3339-Format an.
Beispiel:
2023-05-26T10:20:00.00Z
oder2023-10-19T10:30:00.00-07:00
- Der angegebene Zeitstempel muss ein Zeitstempel für eine volle Minute innerhalb der letzten sieben Tage sein, aber nicht älter als der
earliestVersionTime
. Wenn zum angegebenen Zeitstempel keine Daten mehr vorhanden sind, wird ein Fehler generiert. Der Zeitstempel muss eine volle Minute betragen, auch wenn die angegebene Uhrzeit innerhalb der letzten Stunde liegt. - Für einen fehlgeschlagenen PITR-Export werden Ihnen keine Gebühren in Rechnung gestellt.
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.