Na tej stronie opisujemy, jak używać funkcji odzyskiwania do określonego momentu (PITR) do przechowywania i odzyskiwania danych w Cloud Firestore.
Aby poznać pojęcia związane z odzyskiwaniem do określonego momentu, przeczytaj artykuł Odzyskiwanie do określonego momentu.
Uprawnienia
Aby uzyskać uprawnienia potrzebne do zarządzania ustawieniami PITR, poproś administratora o przypisanie Ci tych ról uprawnień w projekcie, w którym chcesz włączyć PITR:
- Właściciel Cloud Datastore (
roles/datastore.owner
)
W przypadku ról niestandardowych upewnij się, że są przyznane 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 odczytać dane z PITR:
datastore.databases.get
,datastore.entities.get
,datastore.entities.list
- Aby wyeksportować dane PITR:
datastore.databases.export
- Aby zaimportować dane PITR:
datastore.databases.import
Zanim zaczniesz
Zanim zaczniesz korzystać z PITR, weź pod uwagę te informacje:
- Po włączeniu PITR nie możesz zacząć czytać od 7 dni wstecz.
- Jeśli chcesz włączyć PITR podczas tworzenia bazy danych, musisz użyć polecenia
gcloud firestore databases create
. Włączanie PITR 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żna odczytać danych PITR w oknie PITR.
- Jeśli PITR zostanie ponownie włączony bezpośrednio po wyłączeniu, poprzednie dane PITR nie będą już dostępne. Wszystkie dane PITR utworzone przed wyłączeniem PITR zostaną usunięte po dacie wygaśnięcia PITR.
- Jeśli przypadkowo usuniesz dane w ciągu ostatniej godziny, a funkcja PITR jest wyłączona, możesz je przywrócić, włączając ją w ciągu 1 godziny od usunięcia.
- Każde odczytanie wykonane na podstawie wygasłych danych PITR kończy się niepowodzeniem.
Włączanie odzyskiwania do określonego momentu
Zanim użyjesz PITR, włącz płatności za projekt 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 Odzyskiwanie po katastrofie.
Aby edytować ustawienia, kliknij Edytuj.
Zaznacz pole wyboru Włącz punktowe przywracanie, a następnie kliknij Zapisz.
Włączenie PITR spowoduje naliczanie kosztów za miejsce na dane. Więcej informacji znajdziesz w sekcji Ceny.
Aby wyłączyć PITR, odznacz pole wyboru Włącz odzyskiwanie do określonego momentu na stronie Odzyskiwanie po awarii w konsoli Google Cloud.
gcloud
Aby włączyć PITR podczas tworzenia bazy danych, użyj polecenia gcloud firestore databases create
w ten sposób:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
Zastąp wartości w ten sposób:
LOCATION
– lokalizacja, w której chcesz utworzyć bazę danych.DATABASE_ID
– ustaw jako identyfikator bazy danych lub (domyślnie).TYPE
– ustaw na „firestore-native”.
Możesz wyłączyć PITR za pomocą polecenia gcloud firestore databases update
w ten sposób:
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
Zastąp wartości w ten sposób:
DATABASE_ID
– ustaw jako identyfikator bazy danych lub (domyślnie).
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 Odzyskiwanie po katastrofie.
W sekcji Ustawienia zwróć uwagę na okres przechowywania i najwcześniejszy czas wersji.
- 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.
- Czas najstarszej wersji: najstarsza sygnatura czasowa, w której można odczytać starsze wersje danych w oknie PITR. Ta wartość jest stale aktualizowana (Cloud Firestore) i staje się nieaktualna w momencie, gdy zostanie zapytana. Jeśli używasz tej wartości do odzyskiwania danych, uwzględnij czas od momentu zapytania o wartość do momentu zainicjowania odzyskiwania.
- Odzyskiwanie do określonego momentu: jeśli opcja PITR jest włączona, wyświetla się
Enabled
. Jeśli PITR jest wyłączony, 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 wynik:
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 najstarszych zapisanych danych PITR.pointInTimeRecoveryEnablement
: jeśli PITR jest włączony, wyświetlaPOINT_IN_TIME_RECOVERY_ENABLED
. Jeśli zasada PITR jest wyłączona, zobaczysz polePOINT_IN_TIME_RECOVERY_DISABLED
lub polepointInTimeRecoveryEnablement
może się nie wyświetlać.versionRetentionPeriod
: okres przechowywania danych PITR w milisekundach. Wartość może wynosić 1 godzinę, gdy PITR jest wyłączony, lub 7 dni, gdy jest włączony.
Odczytywanie danych PITR
Dane PITR możesz odczytać za pomocą bibliotek klienta, metod interfejsu API REST 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ślać wartości readTime
w czytaniach.
Więcej informacji znajdziesz w artykule Transakcje i zbiorowe zapisy.
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 odczytać dane PITR, musisz użyć transakcji ReadOnly
. Nie możesz bezpośrednio określać wartości readTime
w czytaniach.
Więcej informacji znajdziesz w artykule Transakcje i zbiorowe zapisy.
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ć operację odczytu za pomocą metod REST, użyj jednej z tych opcji:
W żądaniu metody odczytu prześlij wartość
readTime
jako obsługiwany sygnaturą czasu PITR 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 po ostatniej godzinie, ale nie wcześniej niżearliestVersionTime
.Aby odczytać wiele wartości PITR, użyj parametru
readTime
razem z metodąBeginTransaction
w ramach transakcjiReadOnly
.
Apache Beam
Użyj oprogramowania sprzęgającego Cloud FirestoreIO Apache Beam, aby odczytywać i zapisywać dokumenty w bazie danych Cloud Firestore na dużą skalę za pomocą Dataflow.
Czytanie PITR jest obsługiwane w ramach tej metody odczytu z interfejsu Cloud FirestoreIO. Te metody odczytu obsługują metodę withReadTime(@Nullable Instant readTime)
, której możesz używać do odczytu PITR:
- FirestoreV1.BatchGetDocuments
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocuments
- FirestoreV1.PartitionQuery
Java
Poniższy kod można używać z przykładowym kodem potoku Dataflow do operacji zbiorczego odczytu lub zapisu. W tym przykładzie do odczytu PITR użyto metody withReadTime(@Nullable Instant readTime)
.
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 przepływie danych Dataflow znajdziesz w repozytorium GitHub.
Eksportowanie i importowanie danych z PITR
Możesz wyeksportować bazę danych do pliku Cloud Storage z danych PITR za pomocą polecenia gcloud firestore export
. Dane PITR można eksportować, jeśli sygnatura czasowa jest sygnaturą minutową z ostatnich 7 dni, ale nie wcześniejszą niż earliestVersionTime
. Jeśli dane nie istnieją już w określonym stempelu czasowym, operacja eksportu kończy się niepowodzeniem.
Operacja eksportu PITR obsługuje wszystkie filtry, w tym eksport wszystkich dokumentów i określonych kolekcji.
Wyeksportuj bazę danych, podając parametr
snapshot-time
jako pożądaną sygnaturę czasową przywracania.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_IDS
Gdzie
BUCKET_NAME_PATH
– prawidłowy zasób 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, na przykład2023-05-26T10:20:00.00Z
lub2023-10-19T10:30:00.00-07:00
.COLLECTION_IDS
– lista identyfikatorów kolekcji lub 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 informacje:
- Sygnatura czasowa w formacie RFC 3339.
Na przykład
2023-05-26T10:20:00.00Z
lub2023-10-19T10:30:00.00-07:00
. - Pamiętaj, aby podany przez Ciebie znacznik czasu odpowiadał całej minucie z ostatnich 7 dni, ale nie wcześniejszej niż
earliestVersionTime
. Jeśli dane nie istnieją już w określonym punkcie czasowym, generowany jest błąd. Sygnatura czasowa musi być podawana z dokładnością do minuty, nawet jeśli podany czas przypada w ciągu ostatniej godziny. - Nie obciążamy Cię kosztem eksportu PITR, który się nie udał.
importować do bazy danych;
Aby zaimportować wyeksportowaną bazę danych, wykonaj czynności opisane w sekcji Importowanie wszystkich dokumentów. Jeśli jakiś dokument już występuje w Twojej bazie danych, zostanie zastąpiony.