Praca z odzyskiwaniem do określonego momentu (PITR)

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

  1. W konsoli Google Cloud otwórz stronę Bazy danych.

    Otwórz Bazy danych

  2. Na liście baz danych wybierz odpowiednią bazę danych.

  3. W menu nawigacyjnym kliknij Przywracanie po awarii.

  4. Aby edytować ustawienia, kliknij Edytuj.

  5. 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--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

  1. W konsoli Google Cloud otwórz stronę Bazy danych.

    Otwórz Bazy danych

  2. Na liście baz danych wybierz odpowiednią bazę danych.

  3. W menu nawigacyjnym kliknij Przywracanie po awarii.

  4. 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, zobaczysz Disabled.

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świetla POINT_IN_TIME_RECOVERY_ENABLED, jeśli funkcja PITR jest włączona. Jeśli przywracanie do punktu w czasie jest wyłączone, zobaczysz POINT_IN_TIME_RECOVERY_DISABLED lub pole pointInTimeRecoveryEnablement 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ć ReadOnlytransakcji. 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, runAggregationQuerypartitionQuery.

Aby wykonać odczyt za pomocą metod REST, wypróbuj jedną z tych opcji:

  1. W żądaniu metody odczytu przekaż wartość readTime jako obsługiwany sygnaturę czasową PITR w metodzie readOptions. 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.

  2. Używaj parametru readTime razem z metodą BeginTransaction w ramach ReadOnly 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:

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.

  1. 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 lub 2023-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 lub 2023-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.
  2. 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.