Z tej strony dowiesz się, jak używać odzyskiwania do określonego momentu (PITR) do przechowywania i odzyskiwania danych w Cloud Firestore.
Aby zrozumieć koncepcje PITR, przeczytaj artykuł Odzyskiwanie do określonego momentu.
Uprawnienia
Aby uzyskać uprawnienia potrzebne do zarządzania ustawieniami PITR, poproś administratora o przypisanie Ci w projekcie, w którym chcesz włączyć PITR, tych ról uprawnień:
- Właściciel Cloud Datastore (
roles/datastore.owner)
W przypadku ról niestandardowych upewnij się, że przyznano te uprawnienia:
- Aby włączyć PITR podczas tworzenia bazy danych:
datastore.databases.create - Aby zaktualizować ustawienia PITR 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 eksportować dane PITR:
datastore.databases.export - Aby importować dane PITR:
datastore.databases.import - Aby sklonować bazę danych:
datastore.databases.clone
Zanim zaczniesz
Zanim zaczniesz korzystać z odzyskiwania do określonego momentu, zwróć uwagę na te kwestie:
- Nie możesz zacząć odczytywać danych sprzed 7 dni od razu po włączeniu PITR.
- Jeśli chcesz włączyć PITR podczas tworzenia bazy danych, musisz użyć polecenia
gcloud firestore databases create. Włączenie PITR podczas tworzenia bazy danych za pomocą konsoli Google Cloud nie jest obsługiwane. - Cloud Firestore zaczyna przechowywać wersje od momentu włączenia PITR.
- Po wyłączeniu PITR nie możesz odczytywać danych PITR w oknie PITR.
- Jeśli ponownie włączysz PITR od razu po jego wyłączeniu, wcześniejsze dane PITR nie będą już dostępne. Wszystkie dane PITR utworzone przed wyłączeniem PITR zostaną usunięte po upływie daty ważności PITR.
- Jeśli przypadkowo usuniesz dane w ciągu ostatniej godziny, a PITR jest wyłączone, możesz przywrócić dane, włączając PITR w ciągu godziny od usunięcia.
- Każda próba odczytu wygasłych danych PITR nie powiedzie się.
Włączanie PITR
Zanim zaczniesz korzystać z PITR, włącz płatności w projekcie Google Cloud project. Z funkcji PITR mogą korzystać tylko projekty Google Cloud z włączonymi płatnościami.
Aby włączyć PITR w bazie danych:
Konsola
W konsoli Google Cloud otwórz stronę Bazy danych.
Na liście baz danych wybierz odpowiednią bazę danych.
W menu nawigacyjnym kliknij Odtwarzanie awaryjne.
Aby edytować ustawienia, kliknij Edytuj.
Zaznacz pole wyboru Włącz odzyskiwanie do określonego momentu i kliknij Zapisz.
Włączenie PITR wiąże się z kosztami przechowywania. Więcej informacji znajdziesz w cenniku.
Aby wyłączyć PITR, odznacz pole wyboru Włącz odzyskiwanie do określonego momentu na stronie Odtwarzanie awaryjne w konsoli Google Cloud.
gcloud
Włącz PITR podczas tworzenia bazy danych za pomocą gcloud firestore databases create i polecenia --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– identyfikator bazy danych.
PITR możesz wyłączyć za pomocą 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– identyfikator bazy danych lub ` (default)`.
Pobieranie okresu przechowywania i najwcześniejszej wersji
Konsola
W konsoli Google Cloud otwórz stronę Bazy danych.
Na liście baz danych wybierz odpowiednią bazę danych.
W menu nawigacyjnym kliknij Odtwarzanie awaryjne.
W sekcji Ustawienia zanotuj Okres przechowywania i Najwcześniejsza wersja.
- Okres przechowywania: okres, w którym Cloud Firestore przechowuje wszystkie wersje danych bazy danych. Gdy PITR jest wyłączone, wartość wynosi 1 godzinę, a gdy jest włączone – 7 dni.
- Najwcześniejsza wersja: najwcześniejsza sygnatura czasowa, w której można odczytać starsze wersje danych w oknie odzyskiwania do określonego momentu. 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 odzyskiwania danych, uwzględnij czas od momentu wysłania zapytania do momentu rozpoczęcia odzyskiwania.
- Odzyskiwanie do określonego momentu: jeśli PITR
jest włączone, wyświetla się wartość
Enabled. Jeśli PITR 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: jeśli PITR jest włączone, wyświetla się wartośćPOINT_IN_TIME_RECOVERY_ENABLED. Jeśli PITR jest wyłączone, zobaczyszPOINT_IN_TIME_RECOVERY_DISABLEDlub polepointInTimeRecoveryEnablementmoże się nie wyświetlać.versionRetentionPeriod: okres, przez który dane PITR są przechowywane w milisekundach. Wartość może wynosić 1 godzinę, gdy PITR jest wyłączone, lub 7 dni, gdy PITR jest włączone.
Odczytywanie danych PITR
Dane PITR możesz odczytywać za pomocą bibliotek klienta, metod interfejsu API typu REST lub oprogramowania sprzęgającego FirestoreIO Apache Beam.Biblioteki klienta
Java
Aby odczytywać 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 zapisywanie zbiorcze.
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ł
Aby odczytywać 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 zapisywanie zbiorcze.
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 Cloud Firestore metodach odczytu, 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ą odzyskiwania do określonego momentu w metodziereadOptions. Sygnatura czasowa PITR może być sygnaturą czasową z dokładnością do mikrosekund w ciągu ostatniej godziny lub sygnaturą czasową z dokładnością do minuty poza ostatnią godziną, ale nie wcześniejszą niżearliestVersionTime.Użyj parametru
readTimerazem z metodąBeginTransactionw ramach transakcjiReadOnlyw przypadku wielu odczytów PITR.
Apache Beam
Użyj oprogramowania sprzęgającego Cloud FirestoreIO 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
Ten kod może być używany z przykładowym kodem potoku Dataflow do operacji odczytu lub zapisu zbiorczego. W przykładzie używana jest metoda 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 w wybranej sygnaturze czasowej 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 (PITR) źródłowej bazy danych. Sklonowana baza danych zawiera wszystkie dane i indeksy.
Domyślnie sklonowana baza danych będzie szyfrowana w ten sam sposób co źródłowa baza danych, czyli za pomocą 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 dokładność do minuty i określa punkt w czasie w przeszłości, w okresie zdefiniowanym przez okno PITR:
- Jeśli PITR jest włączone w Twojej bazie danych, możesz wybrać dowolną minutę z ostatnich 7 dni (lub krócej, jeśli PITR zostało włączone mniej niż 7 dni temu).
- Jeśli PITR nie jest włączone, możesz wybrać dowolną minutę z ostatniej godziny.
- Najwcześniejszą sygnaturę czasową, którą możesz wybrać znajdziesz w opisie bazy danych.
Konsola
Firebase konsola nie obsługuje klonowania baz danych. Do klonowania baz danych możesz użyć instrukcji dotyczących 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 istniejącej bazy danych, którą chcesz sklonować. Nazwa ma format
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.PITR_TIMESTAMP: sygnatura czasowa PITR 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 tagami, użyj poprzedniego polecenia z flagą --tags, która jest opcjonalną listą tagów w postaci par KLUCZ=WARTOŚĆ.
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ślnie)
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. Określ identyfikator klucza w argumencie--kms-key-name.
Ten 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 istniejącej 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 PITR 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 określisz sygnatury czasowej, wybrany snapshot będzie odpowiadał bieżącej godzinie zaokrąglonej 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ślnie)
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. Określ identyfikator klucza w argumencie--kms-key-name.
Ten 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 App Engine danych wyszukiwania ani encji blob z bazy danych (default). Te dane są ważne 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ą one wykluczone z klonów.
Eksportowanie i importowanie danych PITR
Za pomocą polecenia gcloud firestore export możesz wyeksportować bazę danych do Cloud Storage z danych PITR. Możesz wyeksportować dane PITR, których sygnatura czasowa jest sygnaturą czasową z dokładnością do minuty w ciągu ostatnich 7 dni, ale nie wcześniejszą niż earliestVersionTime. Jeśli dane nie istnieją już w określonej sygnaturze czasowej, operacja eksportu nie powiedzie się.
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-timejako wybraną sygnaturę czasową odzyskiwania.gcloud
Aby wyeksportować bazę danych do zasobnika, uruchom to polecenie.
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 są przechowywane pliki eksportu.PITR_TIMESTAMP– sygnatura czasowa PITR z dokładnością do minuty, np.2023-05-26T10:20:00.00Zlub2023-10-19T10:30:00.00-07:00.COLLECTION_IDS– lista identyfikatorów kolekcji lub identyfikatorów grupy kolekcji, np.'specific-collection-group1','specific-collection-group2'.NAMESPACE_IDS– lista identyfikatorów przestrzeni nazw, np.'customer','orders'.
Zanim wyeksportujesz dane odzyskiwania do określonego momentu, zwróć uwagę na te kwestie:
- Określ 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 określona sygnatura czasowa jest sygnaturą czasową z dokładnością do minuty w ciągu ostatnich 7 dni, ale nie wcześniejszą niż
earliestVersionTime. Jeśli dane nie istnieją już w określonej sygnaturze czasowej, zostanie wygenerowany błąd. Sygnatura czasowa musi być sygnaturą czasową z dokładnością do minuty, nawet jeśli określony czas przypada w ciągu ostatniej godziny. - Nie ponosisz opłat za nieudany eksport PITR.
Zaimportuj do bazy danych.
Aby zaimportować wyeksportowaną bazę danych, wykonaj czynności opisane w sekcji Importowanie wszystkich dokumentów. Jeśli w bazie danych istnieją już jakieś dokumenty, zostaną one zastąpione.