Na tej stronie opisujemy, jak używać odzyskiwania do określonego momentu (PITR) do przechowywania i odzyskiwania danych w Cloud Firestore.
Aby poznać koncepcje PITR, 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 sprawdź, czy przyznano te uprawnienia:
- Aby włączyć odzyskiwanie do określonego momentu podczas tworzenia bazy danych:
datastore.databases.create
- Aby zaktualizować ustawienia odzyskiwania do określonego momentu w przypadku istniejącej bazy 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
Zanim zaczniesz
Zanim zaczniesz korzystać z PITR, weź pod uwagę te kwestie:
- Po włączeniu PITR nie możesz od razu zacząć odczytywać danych sprzed 7 dni.
- 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 odzyskiwania do określonego momentu nie możesz odczytywać danych PITR w oknie PITR.
- Jeśli ponownie włączysz odzyskiwanie do określonego momentu zaraz po jego wyłączeniu, wcześniejsze dane używane do odzyskiwania do określonego momentu nie będą już dostępne. Wszystkie dane PITR utworzone przed wyłączeniem tej funkcji zostaną usunięte po upływie daty ważności PITR.
- Jeśli przypadkowo usuniesz dane w ciągu ostatniej godziny, a odzyskiwanie do określonego momentu jest wyłączone, możesz przywrócić dane, włączając odzyskiwanie do określonego momentu w ciągu godziny od usunięcia.
- Każdy odczyt wykonany na wygasłych danych PITR zakończy się niepowodzeniem.
Włączanie odzyskiwania do określonego momentu
Zanim zaczniesz korzystać z 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.
Na liście baz danych wybierz odpowiednią bazę danych.
W menu nawigacyjnym kliknij Przywracanie po awarii.
Aby edytować ustawienia, kliknij Edytuj.
Zaznacz pole wyboru Włącz przywracanie do punktu w czasie, a następnie kliknij Zapisz.
Włączenie odzyskiwania do określonego momentu wiąże się z kosztami przechowywania. Więcej informacji znajdziesz w cenniku.
Aby wyłączyć odzyskiwanie do określonego momentu, usuń zaznaczenie pola wyboru Włącz odzyskiwanie do określonego momentu na stronie Przywracanie po awarii w konsoli Google Cloud.
gcloud
Włącz PITR 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ć PITR 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
– ustaw na identyfikator bazy danych lub (domyślnie).
Pobieranie okresu przechowywania i czasu 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 Przywracanie po awarii.
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. Gdy odzyskiwanie do określonego momentu jest wyłączone, wartość wynosi 1 godzinę, a gdy jest włączone – 7 dni.
- Czas najstarszej wersji: najwcześniejsza sygnatura czasowa, w której można odczytać starsze wersje danych 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 odzyskiwania danych, uwzględnij czas od momentu, w którym wartość jest wysyłana, do momentu, w którym rozpoczynasz odzyskiwanie.
- Odzyskiwanie do określonego momentu: wyświetla
Enabled
, jeśli odzyskiwanie do określonego momentu jest włączone. 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 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
: wyświetlaPOINT_IN_TIME_RECOVERY_ENABLED
, jeśli funkcja PITR jest włączona. Jeśli przywracanie do punktu w czasie jest wyłączone, zobaczyszPOINT_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 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 łącznika FirestoreIO Apache Beam.Biblioteki klienta
Java
Do odczytywania danych PITR musisz używać 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ł
Do odczytywania danych PITR musisz użyć ReadOnly
transakcji. 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 Firestoremetodach 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ść
readTime
jako obsługiwany 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 poza ostatnią godziną, ale nie wcześniejszą niżearliestVersionTime
.Używaj parametru
readTime
razem z metodąBeginTransaction
w ramachReadOnly
transakcji w przypadku wielu odczytów PITR.
Apache Beam
Użyj oprogramowania sprzęgającego Cloud FirestoreIO Apache Beam, aby odczytywać lub zapisywać dokumenty w Cloud Firestore bazie danych na dużą skalę za pomocą Dataflow.
Odczyty PITR są obsługiwane w przypadku tej metody odczytu złącza 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żna używać z przykładowym kodem potoku Dataflow do operacji odczytu lub zapisu zbiorczego. W przykładzie do odczytów PITR używana jest metoda 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 potoku Dataflow znajdziesz w repozytorium GitHub.
Eksportowanie i importowanie danych PITR
Możesz wyeksportować bazę danych do Cloud Storage z danych PITR za pomocą polecenia gcloud firestore export
. Możesz eksportować dane PITR, których sygnatura czasowa jest pełną minutą w ciągu ostatnich 7 dni, ale nie wcześniej niż earliestVersionTime
. Jeśli w określonym momencie dane już nie istnieją, eksportowanie się nie powiedzie.
Operacja eksportu PITR obsługuje wszystkie filtry, w tym eksport wszystkich dokumentów i eksport konkretnych kolekcji.
Wyeksportuj bazę danych, podając parametr
snapshot-time
dla wybranej sygnatury czasowej 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 Cloud Storage zasobnik z opcjonalnym prefiksem ścieżki, w którym są przechowywane pliki eksportu.PITR_TIMESTAMP
– sygnatura czasowa odzyskiwania do określonego momentu z dokładnością do minuty, np.2023-05-26T10:20:00.00Z
lub2023-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'
.
Przed wyeksportowaniem danych PITR weź pod uwagę te kwestie:
- Określ sygnaturę czasową w formacie RFC 3339.
Na przykład
2023-05-26T10:20:00.00Z
lub2023-10-19T10:30:00.00-07:00
. - Upewnij się, że podany znacznik czasu jest pełną minutą w ciągu ostatnich 7 dni, ale nie wcześniej niż
earliestVersionTime
. Jeśli w określonej sygnaturze czasowej nie ma już danych, zostanie wygenerowany błąd. Sygnatura czasowa musi być pełną minutą, nawet jeśli podany 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 w bazie danych istnieje już jakiś dokument, zostanie on zastąpiony.