Cette page explique comment utiliser la récupération à un moment précis (PITR) pour conserver et récupérer des données dans Firestore en mode Datastore.
Pour comprendre les concepts de récupération à un moment précis, consultez Récupération à un moment précis.
Autorisations
Pour obtenir les autorisations nécessaires pour gérer les paramètres PITR, demandez à votre administrateur de vous accorder le rôle IAM Propriétaire de Cloud Datastore (roles/datastore.owner
) sur le projet dont vous souhaitez activer les paramètres PITR.
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Ce rôle prédéfini contient les autorisations requises pour gérer les paramètres PITR. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour gérer les paramètres de PITR:
-
Pour activer la récupération PITR lors de la création d'une base de données :
datastore.databases.create
-
Pour mettre à jour les paramètres PITR d'une base de données existante :
datastore.databases.update
,datastore.databases.list
-
Pour effectuer des lectures à partir de données PITR :
datastore.databases.get
,datastore.entities.get
,datastore.entities.list
,datastore.namespaces.get
,datastore.namespaces.list
,datastore.statistics.get
,datastore.statistics.list
-
Pour exporter des données PITR :
datastore.databases.export
-
Pour importer des données PITR :
datastore.databases.import
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Avant de commencer
Notez les points suivants avant de commencer à utiliser PITR:
- Vous ne pouvez pas commencer à lire des données remontant à sept jours en arrière immédiatement après avoir activé la récupération PITR.
- Si vous souhaitez activer PITR lorsque vous créez une base de données, vous devez utiliser la commande
gcloud firestore databases create
. L'activation de PITR lors de la création d'une base de données à l'aide de la console Google Cloud n'est pas possible. - Le mode Datastore commence à conserver les versions à partir du moment où vous activez la récupération PITR.
- Vous ne pouvez pas lire les données PITR dans la fenêtre PITR après avoir désactivé la récupération PITR.
- Si vous réactivez la récupération à un moment précis immédiatement après l'avoir désactivée, les données PITR précédentes ne sont plus disponibles. Toutes les données PITR créées avant la désactivation de la récupération PITR seront supprimées après la date d'expiration de la récupération PITR.
- Si vous avez supprimé accidentellement des données au cours de la dernière heure et que la récupération à un moment précis est désactivée, vous pouvez restaurer vos données en activant la récupération à un moment précis dans l'heure suivant la suppression.
- Toute lecture effectuée sur des données PITR expirées échoue.
Activer la récupération PITR
Avant d'utiliser PITR, activez la facturation pour votre projet Google Cloud. Seuls les projets Google Cloud pour lesquels la facturation est activée peuvent utiliser la fonctionnalité PITR.
Pour activer la récupération PITR pour votre base de données:
Console
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Reprise après sinistre.
Cliquez sur Modifier pour modifier les paramètres.
Cochez la case Activer la récupération à un moment précis, puis cliquez sur Enregistrer.
L'activation de PITR entraînerait des coûts de stockage. Reportez-vous à la page Tarifs pour plus de détails.
Pour désactiver la récupération à un moment précis, décochez la case Activer la récupération à un moment précis sur la page "Reprise après sinistre" de la console Google Cloud.
gcloud
Activez la PITR lors de la création de la base de données à l'aide de la commande gcloud firestore databases create
, comme suit:
gcloud firestore databases create\
--location=LOCATION\
[--database=DATABASE_ID; default="(default)"]\
[--type=TYPE; default="firestore-native"]\
--enable-pitr
Remplacez les valeurs comme suit :
LOCATION
: emplacement dans lequel vous souhaitez créer votre base de données.DATABASE_ID
: défini sur l'ID de la base de données ou (valeur par défaut).TYPE
: défini sur "datastore-mode".
Vous pouvez désactiver PITR à l'aide de la commande gcloud firestore databases update
comme suit:
gcloud firestore databases update\
[--database=DATABASE_ID; default="(default)"]\
--no-enable-pitr
Remplacez les valeurs comme suit :
DATABASE_ID
: défini sur l'ID de la base de données ou (valeur par défaut).
Obtenir la durée de conservation et la date de la première version
Console
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Reprise après sinistre.
Dans la section Settings (Paramètres), notez la Retention period (Durée de conservation) et la Earliest version time (Date de la première version).
- Durée de conservation: période pendant laquelle le mode Datastore conserve toutes les versions de données de la base de données. La valeur est d'une heure lorsque la récupération PITR est désactivée et de sept jours lorsqu'elle est activée.
- Heure de la première version: code temporel le plus ancien auquel les versions antérieures des données peuvent être lues dans la période de récupération à un moment précis. Cette valeur est mise à jour en continu par le mode Datastore et devient obsolète au moment où elle est interrogée. Si vous utilisez cette valeur pour récupérer des données, veillez à tenir compte du moment où la valeur est interrogée jusqu'au moment où vous lancez la récupération.
- Récupération à un moment précis: affiche
Enabled
si la récupération PITR est activée. Si la récupération PITR est désactivée, l'optionDisabled
s'affiche.
gcloud
Exécutez la commande gcloud firestore databases describe comme suit:
gcloud firestore databases describe --database=DATABASE_ID
Remplacez DATABASE_ID
par l'ID de la base de données ou par default
.
Voici le résultat :
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: DATASTORE_MODE
uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
updateTime: '2021-11-17T17:48:22.171180Z'
versionRetentionPeriod: 3600s
où :
earliestVersionTime
: code temporel des premières données PITR stockées.pointInTimeRecoveryEnablement
: affichePOINT_IN_TIME_RECOVERY_ENABLED
si PITR est activé. Si la PITR est désactivée,POINT_IN_TIME_RECOVERY_DISABLED
s'affiche ou le champpointInTimeRecoveryEnablement
n'est pas affiché.versionRetentionPeriod
: période pendant laquelle les données PITR sont conservées en millisecondes. La valeur peut être d'une heure lorsque la récupération PITR est désactivée ou de sept jours si elle est activée.
Lire les données PITR
Vous pouvez lire les données PITR à l'aide des bibliothèques clientes, des méthodes de l'API REST ou du connecteur Apache Beam FirestoreIO.
Bibliothèques clientes
Java
Vous devez utiliser la méthode readTime
de la classe ReadOption
pour lire les données PITR. Vous ne pouvez pas utiliser la transaction ReadOnly
pour effectuer des lectures.
Pour en savoir plus, consultez l'exemple de code ReadOption.
Datastore datastore = ...
Timestamp timestamp = ...
// lookup
Key key = ...
Entity entity = datastore.get(key, ReadOption.readTime(timestamp));
// runQuery
Query<Entity> query = ...
QueryResults<Entity> queryResult = datastore.run(query, ReadOption.readTime(timestamp));
// runAggregationQuery
AggregationQuery countAggregationQuery = ...
Long count = getOnlyElement(datastore.runAggregation(countAggregationQuery, ReadOption.readTime(timestamp))).get("total_count");
Pour obtenir la liste complète des exemples readTime
, consultez le dépôt GitHub.
Python
Utilisez la lecture PITR dans le SDK Python en mode Datastore à l'aide de la méthode readTime
ou utilisez la transaction ReadOnly
avec readTime
pour effectuer des lectures.
from datetime import datetime, timezone
read_time = datetime.now(tz=timezone.utc)
key = …
# read without PITR read time
entity = client.get(key)
# read with PITR read time
entity = client.get(key, read_time=read_time)
# PITR read using read_only transaction
with client.transaction(read_only=True, read_time=read_time):
entity = client.get(key)
query = client.query…
# run query without PITR read time
iterator = query.fetch()
# run query with PITR read time
iterator = query.fetch(read_time=read_time)
# PITR read query using read_only transaction
with client.transaction(read_only=True, read_time=read_time):
iterator = query.fetch()
Pour obtenir la liste complète des exemples readTime
, consultez le dépôt GitHub.
API REST
Les lectures PITR sont compatibles avec les méthodes de lecture V1 du mode Datastore, à savoir lookup, runQuery et runAggregationQuery.
Pour effectuer une lecture à l'aide des méthodes REST, essayez l'une des options suivantes:
Dans votre requête de méthode de lecture, transmettez la valeur
readTime
en tant que code temporel PITR compatible dans la méthodereadOptions
. Un code temporel PITR peut être un code temporel précis à la microseconde au cours de la dernière heure ou un code temporel précis à la minute au-delà de la dernière heure, mais pas avant l'earliestVersionTime
.Utilisez le paramètre
readTime
avec la méthodeBeginTransaction
dans le cadre d'une transactionReadOnly
pour plusieurs lectures PITR.
Apache Beam
Utilisez le connecteur Apache Beam d'E/S en mode Datastore pour lire ou écrire des entités dans une base de données en mode Datastore à grande échelle avec Dataflow.
Spécifiez la méthode withReadTime(Instant readTime)
sur l'objet DatastoreV1.Read
. Toutes les lectures ultérieures à l'aide de l'objet DatastoreV1.Read
sont lues à partir du même readTime
.
Java
Le code suivant montre comment utiliser la méthode withReadTime
pour les lectures PITR.
com.google.datastore.v1.Query query = ...
Instant readTime = Instant.ofEpochSecond(1684098540L);
DatastoreV1.Read read =
DatastoreIO.v1()
.read()
.withProjectId(project)
.withQuery(query)
.withNamespace(namespace)
.withReadTime(readTime);
PCollection<Entity> entities = pipeline.apply(read);
...
Pour obtenir la liste complète des exemples withReadTime
, consultez le dépôt GitHub.
Exporter et importer des données PITR
Vous pouvez exporter votre base de données vers Cloud Storage à partir de données PITR à l'aide de la commande gcloud firestore export
. Vous pouvez exporter des données PITR dont le code temporel correspond à une minute entière au cours des sept derniers jours, mais pas avant le earliestVersionTime
. Si les données n'existent plus à l'horodatage spécifié, l'opération d'exportation échoue.
L'opération d'exportation PITR est compatible avec tous les filtres, y compris l'exportation de toutes les entités et l'exportation de genres ou d'espaces de noms spécifiques.
Exportez la base de données en spécifiant le paramètre
snapshot-time
vers l'horodatage de récupération requis.gcloud
Exécutez la commande suivante pour exporter la base de données vers votre bucket.
gcloud firestore export gs://[BUCKET_NAME_PATH] \ --snapshot-time=[PITR_TIMESTAMP] \ --collection-ids=[COLLECTION_IDS] \ --namespace-ids=[NAMESPACE_IDS]
Où :
BUCKET_NAME_PATH
: bucket Cloud Storage valide avec un préfixe de chemin d'accès facultatif où les fichiers d'exportation sont stockés.PITR_TIMESTAMP
: code temporel PITR avec une précision de minute, par exemple2023-05-26T10:20:00.00Z
ou2023-10-19T10:30:00.00-07:00
.COLLECTION_IDS
: liste d'ID de collection ou d'ID de groupe de collections, par exemple'specific collection group1'
,'specific collection group2'
.NAMESPACE_IDS
: liste d'ID d'espaces de noms, par exemple'customer'
,'orders'
.
Vous pouvez également exporter un sous-ensemble spécifique de genres et/ou d'espaces de noms à l'aide d'un filtre d'entité.
Notez les points suivants avant d'exporter des données PITR:
- Spécifiez l'horodatage au format RFC 3339.
Par exemple,
2023-05-26T10:20:00.00Z
ou2023-10-19T10:30:00.00-07:00
. - Assurez-vous que l'horodatage que vous spécifiez est un code temporel entier de la minute au cours des sept derniers jours, mais pas antérieur à
earliestVersionTime
. Si les données n'existent plus à l'horodatage spécifié, vous obtenez une erreur. Le code temporel doit être une minute entière, même si l'heure spécifiée est dans l'heure précédente. - Aucuns frais ne vous seront facturés en cas d'échec de l'exportation PITR.
Importez-les dans une base de données.
Suivez la procédure décrite dans Importer toutes les entités pour importer votre base de données exportée. Si une entité existe déjà dans votre base de données, elle sera écrasée. L'importation d'un sous-ensemble spécifique de genres et/ou d'espaces de noms à l'aide d'un filtre d'entité est également possible.