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
En la consola de Google Cloud Platform, vaya a la página Bases de datos .
Seleccione la base de datos requerida de la lista de bases de datos.
En el menú de navegación, haga clic en Recuperación ante desastres .
Haga clic en Editar para editar la configuración.
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
En la consola de Google Cloud Platform, vaya a la página Bases de datos .
Seleccione la base de datos requerida de la lista de bases de datos.
En el menú de navegación, haga clic en Recuperación ante desastres .
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
: muestraPOINT_IN_TIME_RECOVERY_ENABLED
, si PITR está habilitado. Si PITR está deshabilitado, veráPOINT_IN_TIME_RECOVERY_DISABLED
o es posible que el campopointInTimeRecoveryEnablement
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:
En la solicitud del método de lectura, pase el valor
readTime
como marca de tiempo PITR admitida en el métodoreadOptions
. 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 laearliestVersionTime
.Utilice el parámetro
readTime
junto con el métodoBeginTransaction
como parte de una transacciónReadOnly
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:
- FirestoreV1.BatchGetDocumentos
- FirestoreV1.ListCollectionIds
- FirestoreV1.ListDocumentos
- FirestoreV1.PartitionQuery
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.
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
o2023-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
o2023-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.
-
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á.