Na tej stronie opisano, jak używać odzyskiwania do określonego momentu (PITR) do przechowywania i odzyskiwania danych w Cloud Firestore.
Aby dowiedzieć się więcej o odzyskiwaniu do określonego momentu, przeczytaj artykuł na temat odzyskiwania do określonego momentu.
Uprawnienia
Aby uzyskać uprawnienia potrzebne do zarządzania ustawieniami odzyskiwania do określonego momentu, poproś administratora o przyznanie Ci tych ról uprawnień w projekcie, w którym chcesz włączyć odzyskiwanie do określonego momentu:
- Właściciel Cloud Datastore (
roles/datastore.owner)
W przypadku ról niestandardowych upewnij się, że przyznane są te uprawnienia:
- Aby włączyć PITR podczas tworzenia bazy danych:
datastore.databases.create - Aby zaktualizować ustawienia odzyskiwania do określonego momentu w istniejącej bazie danych:
datastore.databases.update,datastore.databases.list - Aby odczytywać dane PITR:
datastore.databases.get,datastore.entities.get,datastore.entities.list - Aby wyeksportować dane PITR:
datastore.databases.export - Aby zaimportować dane PITR:
datastore.databases.import - Aby sklonować bazę danych:
datastore.databases.clone
Zanim zaczniesz
Zanim zaczniesz korzystać z odzyskiwania do określonego momentu, weź pod uwagę te kwestie:
- Nie możesz zacząć odczytywać danych z ostatnich 7 dni bezpośrednio po włączeniu odzyskiwania do określonego momentu.
- Jeśli chcesz włączyć odzyskiwanie do określonego momentu podczas tworzenia bazy danych, musisz użyć polecenia
gcloud firestore databases create. Włączanie odzyskiwania do określonego momentu podczas tworzenia bazy danych za pomocą konsoli Google Cloud nie jest obsługiwane. - Cloud Firestore zaczyna przechowywać wersje od momentu włączenia odzyskiwania do określonego momentu.
- Po wyłączeniu PITR nie możesz odczytywać danych PITR w oknie PITR.
- Jeśli ponownie włączysz PITR natychmiast po wyłączeniu, wcześniejsze dane PITR nie będą już dostępne. Wszystkie dane PITR utworzone przed wyłączeniem tej funkcji zostaną usunięte po dacie ważności PITR.
- Jeśli dane zostały przypadkowo usunięte w ciągu ostatniej godziny, a funkcja PITR jest wyłączona, możesz je przywrócić, włączając funkcję PITR w ciągu godziny od usunięcia.
- Każdy odczyt danych PITR, które wygasły, zakończy się niepowodzeniem.
Włącz odzyskiwanie do określonego momentu
Zanim zaczniesz korzystać z odzyskiwania do określonego momentu, włącz płatności w projekcie Google Cloud. Z funkcji PITR mogą korzystać tylko projekty Google Cloud z włączonymi płatnościami.
Aby włączyć odzyskiwanie do określonego momentu w bazie danych:
Konsola
W konsoli Google Cloud otwórz stronę Bazy danych.
Wybierz wymaganą bazę danych z listy baz danych.
W menu nawigacyjnym kliknij Odtwarzanie awaryjne.
Kliknij Edytuj, aby edytować ustawienia.
Zaznacz pole wyboru Włącz odzyskiwanie do określonego momentu, a następnie kliknij Zapisz.
Włączenie odzyskiwania do określonego momentu wiąże się z kosztami miejsca na dane. Więcej informacji znajdziesz w cenniku.
Aby wyłączyć odzyskiwanie do określonego momentu, odznacz pole wyboru Włącz odzyskiwanie do określonego momentu na stronie Odtwarzanie awaryjne w konsoli Google Cloud.
gcloud
Włącz odzyskiwanie do określonego momentu podczas tworzenia bazy danych za pomocą poleceń gcloud firestore databases create i --enable-ptir w ten sposób:
gcloud firestore databases create\
--location=LOCATION\
--database=DATABASE_ID\
--type=firestore-native\
--enable-pitr
Zastąp wartości w ten sposób:
LOCATION– lokalizacja, w której chcesz utworzyć bazę danych.DATABASE_ID– ustaw na identyfikator bazy danych.
Możesz wyłączyć odzyskiwanie do określonego momentu, używając polecenia gcloud firestore databases update w ten sposób:
gcloud firestore databases update\
--database=DATABASE_ID\
--no-enable-pitr
Zastąp wartości w ten sposób:
DATABASE_ID– ustaw na identyfikator bazy danych lub (default).
Pobieranie okresu przechowywania i czasu najwcześniejszej wersji
Konsola
W konsoli Google Cloud otwórz stronę Bazy danych.
Wybierz wymaganą bazę danych z listy baz danych.
W menu nawigacyjnym kliknij Odtwarzanie awaryjne.
W sekcji Ustawienia zwróć uwagę na Okres przechowywania i Czas najwcześniejszej wersji.
- Okres przechowywania: okres, w którym Cloud Firestore przechowuje wszystkie wersje danych bazy danych. Wartość wynosi 1 godzinę, gdy odzyskiwanie do określonego momentu jest wyłączone, i 7 dni, gdy jest włączone.
- Czas najwcześniejszej wersji: najwcześniejsza sygnatura czasowa, przy której starsze wersje danych można odczytać w oknie PITR. Ta wartość jest stale aktualizowana przez Cloud Firestore i staje się nieaktualna w momencie wysłania zapytania. Jeśli używasz tej wartości do przywracania danych, uwzględnij czas od momentu wysłania zapytania o wartość do momentu rozpoczęcia przywracania.
- Odzyskiwanie do określonego momentu: pokazuje
Enabled, jeśli odzyskiwanie do określonego momentu jest włączone. Jeśli odzyskiwanie do określonego momentu jest wyłączone, zobaczyszDisabled.
gcloud
Uruchom polecenie gcloud firestore databases describe w ten sposób:
gcloud firestore databases describe --database=DATABASE_ID
Zastąp DATABASE_ID identyfikatorem bazy danych lub '(default)'.
Oto dane wyjściowe:
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/DATABASE_ID
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: FIRESTORE_NATIVE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
gdzie:
earliestVersionTime: sygnatura czasowa najwcześniejszych przechowywanych danych PITR.pointInTimeRecoveryEnablement: pokazujePOINT_IN_TIME_RECOVERY_ENABLED, jeśli włączone jest odzyskiwanie do określonego momentu. Jeśli odzyskiwanie do określonego momentu jest wyłączone, zobaczyszPOINT_IN_TIME_RECOVERY_DISABLEDlub polepointInTimeRecoveryEnablementmoże nie być wyświetlane.versionRetentionPeriod: okres przechowywania danych PITR w milisekundach. Wartość może wynosić 1 godzinę, gdy odzyskiwanie do określonego momentu jest wyłączone, lub 7 dni, gdy jest włączone.
Odczytywanie danych PITR
Dane PITR możesz odczytywać za pomocą bibliotek klienta, metod interfejsu REST API lub oprogramowania sprzęgającego FirestoreIO Apache Beam.Biblioteki klienta
Java
Aby odczytać dane PITR, musisz użyć transakcji ReadOnly. Nie możesz bezpośrednio określić readTime w odczytach.
Więcej informacji znajdziesz w artykule Transakcje i zapisy wsadowe.
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();
Węzeł
Do odczytu danych PITR musisz użyć transakcji ReadOnly. Nie możesz bezpośrednio określić readTime w odczytach.
Więcej informacji znajdziesz w artykule Transakcje i zapisy wsadowe.
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)}
);
Interfejs API typu REST
Odczyty PITR są obsługiwane we wszystkich metodach odczytu Cloud Firestore, czyli get, list, batchGet, listCollectionIds, listDocuments, runQuery, runAggregationQuery i partitionQuery.
Aby wykonać odczyt za pomocą metod REST, wypróbuj jedną z tych opcji:
W żądaniu metody odczytu przekaż wartość
readTimejako obsługiwaną sygnaturę czasową PITR w metodziereadOptions. Sygnatura czasowa PITR może być sygnaturą czasową z dokładnością do mikrosekundy w ciągu ostatniej godziny lub sygnaturą czasową z dokładnością do minuty sprzed ostatniej godziny, ale nie wcześniejszą niżearliestVersionTime.Użyj parametru
readTimerazem z metodąBeginTransactionw ramach transakcjiReadOnly, aby wykonać wiele odczytów PITR.
Apache Beam
Użyj oprogramowania sprzęgającego Cloud Firestore Apache Beam, aby odczytywać lub zapisywać dokumenty w bazie danych Cloud Firestore na dużą skalę za pomocą Dataflow.
Odczyty PITR są obsługiwane w tej metodzie odczytu oprogramowania sprzęgającego Cloud FirestoreIO. Te metody odczytu obsługują metodę withReadTime(@Nullable Instant readTime), której możesz używać do odczytów PITR:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
Poniższy kod może być używany z przykładowym kodem potoku Dataflow do operacji zbiorczego odczytu lub zapisu. W przykładzie użyto metody withReadTime(@Nullable Instant readTime) do odczytów PITR.
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())
...
Pełną listę przykładów readTime w potoku Dataflow znajdziesz w repozytorium GitHub.
Klonowanie z bazy danych
Możesz sklonować istniejącą bazę danych z wybraną sygnaturą czasową do nowej bazy danych:
Sklonowana baza danych to nowa baza danych, która zostanie utworzona w tej samej lokalizacji co źródłowa baza danych.
Aby utworzyć klon, Cloud Firestore używa danych odzyskiwania do określonego momentu ze źródłowej bazy danych. Sklonowana baza danych zawiera wszystkie dane i indeksy.
Domyślnie sklonowana baza danych będzie szyfrowana w taki sam sposób jak źródłowa baza danych, przy użyciu domyślnego szyfrowania Google lub szyfrowania CMEK. Możesz określić inny typ szyfrowania lub użyć innego klucza do szyfrowania CMEK.
Sygnatura czasowa ma poziom szczegółowości wynoszący 1 minutę i określa moment w przeszłości w okresie zdefiniowanym przez okno odzyskiwania do określonego momentu:
- Jeśli w bazie danych jest włączone odzyskiwanie do określonego momentu, możesz wybrać dowolną minutę z ostatnich 7 dni (lub mniej, jeśli odzyskiwanie do określonego momentu zostało włączone mniej niż 7 dni temu).
- Jeśli odzyskiwanie do określonego momentu nie jest włączone, możesz wybrać dowolną minutę w ciągu ostatniej godziny.
- Najwcześniejszą sygnaturę czasową, którą możesz wybrać, znajdziesz w opisie bazy danych.
Konsola
Konsola Firebase nie obsługuje klonowania baz danych. Aby sklonować bazy danych, możesz użyć instrukcji dla Google Cloud CLI.
gcloud
Aby sklonować bazę danych, użyj polecenia gcloud firestore databases clone:
gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'
Zastąp następujące elementy:
SOURCE_DATABASE: nazwa bazy danych, którą chcesz sklonować. Nazwa ma format
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.PITR_TIMESTAMP: sygnatura czasowa odzyskiwania do określonego momentu w formacie RFC 3339 z dokładnością do minuty. Na przykład:
2025-06-01T10:20:00.00Zlub2025-06-01T10:30:00.00-07:00.DESTINATION_DATABASE_ID: identyfikator bazy danych dla nowej sklonowanej bazy danych. Ten identyfikator bazy danych nie może być powiązany z istniejącą bazą danych.
Przykład:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'
Jeśli podczas klonowania bazy danych chcesz powiązać ją z niektórymi tagami, użyj poprzedniego polecenia z flagą --tags, która jest opcjonalną listą par KLUCZ=WARTOŚĆ tagów do powiązania.
Przykład:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--tags=key1=value1,key2=value2
Domyślnie sklonowana baza danych będzie miała taką samą konfigurację szyfrowania jak źródłowa baza danych. Aby zmienić konfigurację szyfrowania, użyj argumentu --encryption-type:
- (Domyślna)
use-source-encryption: użyj tej samej konfiguracji szyfrowania co źródłowa baza danych. google-default-encryption: użyj domyślnego szyfrowania Google.customer-managed-encryption: użyj szyfrowania CMEK. W argumencie--kms-key-namepodaj identyfikator klucza.
Poniższy przykład pokazuje, jak skonfigurować szyfrowanie CMEK dla sklonowanej bazy danych:
gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'
wiersz poleceń Firebase
Aby sklonować bazę danych, użyj polecenia firebase firestore:databases:clone:
firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP'
Zastąp następujące elementy:
SOURCE_DATABASE: nazwa bazy danych, którą chcesz sklonować. Nazwa ma format
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.DESTINATION_DATABASE: nazwa bazy danych dla nowej sklonowanej bazy danych. Nazwa ma format
projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID. Ta nazwa bazy danych nie może być powiązana z istniejącą bazą danych.PITR_TIMESTAMP: sygnatura czasowa odzyskiwania do określonego momentu w formacie RFC 3339 z dokładnością do minuty. Na przykład:
2025-06-01T10:20:00.00Zlub2025-06-01T10:30:00.00-07:00. Jeśli nie zostanie określony, wybrany zostanie bieżący czas zaokrąglony w dół do minuty.
Domyślnie sklonowana baza danych będzie miała taką samą konfigurację szyfrowania jak źródłowa baza danych. Aby zmienić konfigurację szyfrowania, użyj argumentu --encryption-type:
- (Domyślna)
USE_SOURCE_ENCRYPTION: użyj tej samej konfiguracji szyfrowania co źródłowa baza danych. GOOGLE_DEFAULT_ENCRYPTION: użyj domyślnego szyfrowania Google.CUSTOMER_MANAGED_ENCRYPTION: użyj szyfrowania CMEK. W argumencie--kms-key-namepodaj identyfikator klucza.
Poniższy przykład pokazuje, jak skonfigurować szyfrowanie CMEK dla sklonowanej bazy danych:
firebase firestore:databases:clone \
'projects/example-project/databases/(default)' \
'projects/example-project/databases/example-dest-db' \
--snapshot-time 'PITR_TIMESTAMP' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION
Ograniczenia
Operacja klonowania nie klonuje danych wyszukiwania App Engine ani obiektów blob z bazy danych (default). Te dane są prawidłowe tylko w przypadku bazy danych (default) i nie będą przydatne, jeśli sklonujesz bazę danych (default) do bazy danych, która nie obsługuje takich danych, dlatego są wykluczone z klonów.
Eksportowanie i importowanie danych z odzyskiwania do określonego momentu
Możesz wyeksportować bazę danych do Cloud Storage z danych PITR za pomocą polecenia gcloud firestore export. Możesz wyeksportować dane PITR, których sygnatura czasowa jest sygnaturą czasową pełnej minuty w ciągu ostatnich 7 dni, ale nie wcześniej niż earliestVersionTime. Jeśli dane nie istnieją już w określonej sygnaturze czasowej, operacja eksportu zakończy się niepowodzeniem.
Operacja eksportu PITR obsługuje wszystkie filtry, w tym eksport wszystkich dokumentów i eksport określonych kolekcji.
Wyeksportuj bazę danych, określając parametr
snapshot-timedla wybranej sygnatury czasowej odzyskiwania.gcloud
Uruchom to polecenie, aby wyeksportować bazę danych do zasobnika.
gcloud firestore export gs://BUCKET_NAME_PATH \ --snapshot-time=PITR_TIMESTAMP \ --collection-ids=COLLECTION_IDS \ --namespace-ids=NAMESPACE_IDSGdzie:
BUCKET_NAME_PATH– prawidłowy zasobnik Cloud Storage z opcjonalnym prefiksem ścieżki, w którym przechowywane są pliki eksportu.PITR_TIMESTAMP– sygnatura czasowa odzyskiwania do określonego momentu z dokładnością do minuty, na przykład2023-05-26T10:20:00.00Zlub2023-10-19T10:30:00.00-07:00.COLLECTION_IDS– lista identyfikatorów kolekcji lub identyfikatorów grup kolekcji, np.'specific-collection-group1','specific-collection-group2'.NAMESPACE_IDS– lista identyfikatorów przestrzeni nazw, np.'customer','orders'.
Zanim wyeksportujesz dane PITR, weź pod uwagę te kwestie:
- Podaj sygnaturę czasową w formacie RFC 3339.
Na przykład
2023-05-26T10:20:00.00Zlub2023-10-19T10:30:00.00-07:00. - Upewnij się, że podany znacznik czasu jest znacznikiem czasu pełnej minuty w ciągu ostatnich 7 dni, ale nie wcześniejszym niż
earliestVersionTime. Jeśli dane nie istnieją już w określonej sygnaturze czasowej, generowany jest błąd. Sygnatura czasowa musi być pełną minutą, nawet jeśli określony czas przypada w ciągu ostatniej godziny. - Nie obciążymy Cię płatnością za nieudany eksport PITR.
importować do bazy danych,
Aby zaimportować wyeksportowaną bazę danych, wykonaj czynności opisane w sekcji Importowanie wszystkich dokumentów. Jeśli dokument już istnieje w bazie danych, zostanie zastąpiony.