Trabaje con la recuperación de un punto en el tiempo (PITR)

Esta página describe cómo utilizar la recuperación en un momento dado (PITR) para retener y recuperar datos en Cloud Firestore.

Para comprender los conceptos de PITR, consulte Recuperación en un momento dado .

Permisos

Para obtener los permisos que necesita para administrar la configuración de PITR, solicite a su administrador que le otorgue los siguientes roles de IAM en el proyecto donde desea habilitar PITR:

  • Propietario del almacén de datos en la nube ( roles/datastore.owner )

Para roles personalizados, asegúrese de que se concedan los siguientes permisos:

  • Para habilitar PITR al crear una base de datos: datastore.databases.create
  • Para actualizar la configuración de PITR en una base de datos existente: datastore.databases.update , datastore.databases.list
  • Para realizar lecturas de datos PITR: datastore.databases.get , datastore.entities.get , datastore.entities.list
  • Para exportar datos PITR: datastore.databases.export
  • Para importar datos PITR: datastore.databases.import

Antes de que empieces

Tenga en cuenta los siguientes puntos antes de comenzar a utilizar PITR:

  • No puede comenzar a leer desde hace siete días inmediatamente después de habilitar PITR.
  • Si desea habilitar PITR cuando crea una base de datos, debe usar el comando gcloud firestore databases create . No se admite habilitar PITR mientras se crea una base de datos mediante GCP Console.
  • Cloud Firestore comienza a conservar las versiones desde el momento en adelante después de habilitar PITR.
  • No puede leer datos PITR en la ventana PITR después de desactivar PITR.
  • Si vuelve a habilitar PITR inmediatamente después de deshabilitarlo, los datos de PITR anteriores ya no estarán disponibles. Todos los datos de PITR creados antes de desactivar PITR se eliminarán después de la fecha de vencimiento de PITR.
  • Si eliminó datos accidentalmente en la última hora y PITR está deshabilitado, puede restaurar sus datos habilitando PITR dentro de una hora después de la eliminación.
  • Cualquier lectura realizada sobre datos PITR caducados falla.

Habilitar PITR

Antes de usar PITR, habilita la facturación para tu proyecto de Google Cloud . Solo los proyectos de Google Cloud con facturación habilitada pueden utilizar la funcionalidad PITR.

Para habilitar PITR para su base de datos:

Consola

  1. En la consola de Google Cloud Platform, vaya a la página Bases de datos .

    Ir a Bases de Datos

  2. Seleccione la base de datos requerida de la lista de bases de datos.

  3. En el menú de navegación, haga clic en Recuperación ante desastres .

  4. Haga clic en Editar para editar la configuración.

  5. Seleccione la casilla de verificación Habilitar recuperación de un momento dado y luego haga clic en Guardar .

Habilitar PITR generaría costos de almacenamiento. Consulte Precios para obtener más información.

Para deshabilitar PITR, desmarque la casilla de verificación Habilitar recuperación a un momento dado en la página Recuperación ante desastres en GCP Console.

nube de gcloud

Habilite PITR durante la creación de la base de datos con el comando gcloud firestore databases create de la siguiente manera:

gcloud firestore databases create\
  --location=LOCATION\
  [--database=DATABASE_ID; default="(default)"]\
  [--type=TYPE; default="firestore-native"]\
  --enable-pitr

Reemplace los valores de la siguiente manera:

  • Location : ubicación donde desea crear su base de datos.
  • DATABASE_ID : establecido en el ID de la base de datos o (predeterminado).
  • TYPE : configurado como nativo de Firestore.

Puedes deshabilitar PITR usando el comando gcloud firestore databases update de la siguiente manera:

gcloud firestore databases update\
  [--database=DATABASE_ID; default="(default)"]\
  --no-enable-pitr

Reemplace los valores de la siguiente manera:

  • DATABASE_ID : establecido en el ID de la base de datos o (predeterminado).

Obtenga el período de retención y la hora de la primera versión

Consola

  1. En la consola de Google Cloud Platform, vaya a la página Bases de datos .

    Ir a Bases de Datos

  2. Seleccione la base de datos requerida de la lista de bases de datos.

  3. En el menú de navegación, haga clic en Recuperación ante desastres .

  4. En la sección Configuración , observe el Período de retención y la Hora de la versión más temprana .

    • Período de retención : el período en el que Cloud Firestore conserva todas las versiones de los datos de la base de datos. El valor es una hora cuando PITR está deshabilitado y siete días cuando PITR está habilitado.
    • Hora de versión más antigua : la marca de tiempo más antigua en la que se pueden leer versiones anteriores de los datos en la ventana PITR. Cloud Firestore actualiza continuamente este valor y queda obsoleto en el momento en que se consulta. Si está utilizando este valor para recuperar datos, asegúrese de tener en cuenta el tiempo desde el momento en que se consulta el valor hasta el momento en que inicia la recuperación.
    • Recuperación de un momento dado : muestra Enabled , si PITR está habilitado. Si PITR está deshabilitado, verá Disabled .

nube de gcloud

Ejecute el comando de descripción de bases de datos de gcloud firestore de la siguiente manera:

gcloud firestore databases describe --database=DATABASE_ID

Reemplace DATABASE_ID con el ID de la base de datos o default .

Aquí está el resultado:

    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/(default)
    pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
    type: FIRESTORE_NATIVE
    uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
    updateTime: '2021-11-17T17:48:22.171180Z'
    versionRetentionPeriod: 3600s

dónde,

  • earliestVersionTime : marca de tiempo de los primeros datos PITR almacenados.
  • pointInTimeRecoveryEnablement : muestra POINT_IN_TIME_RECOVERY_ENABLED , si PITR está habilitado. Si PITR está deshabilitado, verá POINT_IN_TIME_RECOVERY_DISABLED o es posible que el campo pointInTimeRecoveryEnablement no se muestre.
  • versionRetentionPeriod : período de tiempo durante el cual se retienen los datos PITR en milisegundos. El valor puede ser una hora cuando PITR está deshabilitado o siete días si PITR está habilitado.

Leer datos PITR

Puede leer datos PITR utilizando las bibliotecas cliente, los métodos API REST o el conector FirestoreIO Apache Beam.

Bibliotecas cliente

Java

Debe utilizar la transacción ReadOnly para leer datos PITR. No puede especificar readTime directamente en lecturas. Consulte Transacciones y escrituras por lotes para obtener más información.

  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();

Nodo

Debe utilizar una transacción ReadOnly para leer datos PITR. No puede especificar readTime directamente en lecturas. Consulte Transacciones y escrituras por lotes para obtener más información.

  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)}
  )

API DESCANSO

Las lecturas PITR se admiten en todos los métodos de lectura de Cloud Firestore, que son get , list , batchGet , listCollectionIds , listDocuments , runQuery , runAggregationQuery y particionQuery .

Para realizar una lectura utilizando los métodos REST, pruebe una de las siguientes opciones:

  1. En la solicitud del método de lectura, pase el valor readTime como marca de tiempo PITR admitida en el método readOptions . Una marca de tiempo PITR puede ser una marca de tiempo con precisión de microsegundos dentro de la última hora o una marca de tiempo de un minuto completo más allá de la última hora, pero no antes de la earliestVersionTime .

  2. Utilice el parámetro readTime junto con el método BeginTransaction como parte de una transacción ReadOnly para múltiples lecturas PITR.

Haz Apache

Utilice el conector Apache Beam de Cloud FirestoreIO para leer o escribir documentos en una base de datos de Cloud Firestore a gran escala con Dataflow.

Las lecturas PITR se admiten en el siguiente método de lectura del conector Cloud FirestoreIO. Estos métodos de lectura admiten el método withReadTime(@Nullable Instant readTime) que puede utilizar para lecturas PITR:

Java

El siguiente código se puede utilizar con el código de canalización de Dataflow de ejemplo para operaciones de lectura o escritura masiva. El ejemplo utiliza el método withReadTime(@Nullable Instant readTime) para lecturas 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())
  ...

Para obtener una lista completa de ejemplos readTime en la canalización de Dataflow, consulte el repositorio de Github .

Exportar e importar desde datos PITR

Puedes exportar tu base de datos a Cloud Storage desde datos PITR usando el comando gcloud firestore export . Puede exportar datos PITR donde la marca de tiempo sea una marca de tiempo de un minuto completo dentro de los últimos siete días, pero no antes de la earliestVersionTime . Si los datos ya no existen en la marca de tiempo especificada, la operación de exportación falla.

La operación de exportación PITR admite todos los filtros, incluida la exportación de todos los documentos y la exportación de colecciones específicas.

  1. Exporte la base de datos, especificando el parámetro snapshot-time a la marca de tiempo de recuperación deseada.

    nube de gcloud

    Ejecute el siguiente comando para exportar la base de datos a su depósito.

    gcloud firestore export gs://[BUCKET_NAME_PATH] \
        --snapshot-time=[PITR_TIMESTAMP] \
        --collection-ids=[COLLECTION_IDS] \
        --namespace-ids=[NAMESPACE_IDS]
    

    Dónde,

    • BUCKET_NAME_PATH : un depósito de Cloud Storage válido con un prefijo de ruta opcional donde se almacenan los archivos de exportación.
    • PITR_TIMESTAMP : una marca de tiempo PITR con granularidad de minutos, por ejemplo, 2023-05-26T10:20:00.00Z o 2023-10-19T10:30:00.00-07:00 .
    • COLLECTION_IDS : una lista de ID de colección o ID de grupo de colección, por ejemplo 'specific collection group1' , 'specific collection group2' .
    • NAMESPACE_IDS : una lista de ID de espacios de nombres, por ejemplo 'customer' , 'orders' .

    Tenga en cuenta los siguientes puntos antes de exportar datos PITR:

    • Especifique la marca de tiempo en formato RFC 3339 . Por ejemplo, 2023-05-26T10:20:00.00Z o 2023-10-19T10:30:00.00-07:00 .
    • Asegúrese de que la marca de tiempo que especifique sea una marca de tiempo de un minuto completo dentro de los últimos siete días, pero no antes del earliestVersionTime . Si los datos ya no existen en la marca de tiempo especificada, se genera un error. La marca de tiempo debe ser un minuto completo, incluso si la hora especificada es dentro de la última hora.
    • No se le cobrará por una exportación PITR fallida.
  2. Importar a una base de datos.

    Utilice los pasos en Importar todos los documentos para importar su base de datos exportada. Si algún documento ya existe en su base de datos, se sobrescribirá.