1

Je recherche la meilleure stratégie pour collecter des fichiers de banque de données spécifiques * .backup_info stockés dans Cloud Storage et les copier en tant que "derniers" fichiers backup_info par type, j'ai donc un emplacement fixe pour chaque type , où le fichier backup_info le plus récent est trouvé, par exemple Fondamentalement, j'ai une application Google App Engine (standard Python) avec des données dans le Cloud Datastore. Je peux exécuter un travail cron pour effectuer des sauvegardes automatiquement et régulièrement comme décrit dans les documents Scheduled Backups et je peux aussi écrire un peu de code Python pour exécuter des tâches de sauvegarde qui est déclenché manuellement comme described in this SO answer. J'ai l'intention d'écrire un petit cron-job Python qui exécuterait la tâche pour trouver le fichier backup_info le plus récent d'un type donné et le copier/le renommer à l'emplacement désiré. De toute façon, l'emplacement de sauvegarde d'origine sera encombré de nombreux fichiers et dossiers au cours d'une journée, en particulier s'il existe plusieurs sauvegardes pour un certain type. Par exemple, dans gs://MY-PROJECT.appspot.com/ je trouverai:Conserver automatiquement la dernière sauvegarde de banque de données

VeryLoooooongRandomLookingString.backup_info 
OtherStringForSecondBackup.backup_info 
OtherStringForThirdBackup.backup_info 

La chaîne semble être un identifiant unique pour chaque exécution de sauvegarde. Je suppose qu'il contient une liste de fichiers * .backup_info, un pour chaque type dans la sauvegarde.

VeryLoooooongRandomLookingString.Comment.backup_info 
OtherStringForSecondBackup.Comment.backup_info 
OtherStringForThirdBackup.Comment.backup_info 

Pour chaque type dans la sauvegarde, par ex. "Commentaire". Il semble qu'il contient une liste de données de sauvegarde réelles pour ce type et cette sauvegarde.

datastore_backup_CUSTOM_PREFIX_2017_09_20_Comment/ 
datastore_backup_CUSTOM_PREFIX_2017_09_20_1_Comment/ 
datastore_backup_CUSTOM_PREFIX_2017_09_20_2_Comment/ 

Dossier de données pour chaque sauvegarde et type. Ici pour genre "Comment", sauvegardé trois fois sur 9/20.

Mes questions sont liées à Datastore et/ou Stockage:

  1. Est-il possible de spécifier explicitement un UID personnalisé en tant que paramètre de requête (ou l'en-tête HTTP) lorsque vous appelez /_ah/datastore_admin/backup.create?
  2. Si non, est-il possible d'envoyer un message avec l'UID à un crochet ou quelque chose, après la sauvegarde a été achevée?
  3. Si (1) et (2) n'est pas possible: Quelle approche serait la meilleure dans Stockage pour trouver le dernier fichier * .backup_info pour un type donné? Il semble que listbucket() n'autorise pas le filtrage, et je ne pense pas que l'itération à travers des centaines ou des milliers de fichiers à la recherche de certains modèles de noms serait efficace.

Répondre

0

J'ai trouvé deux solutions au problème, les deux sont basées sur des fonctionnalités qui sont actuellement en version bêta.

Les réponses en bref:

  1. Nouveau Datastore Export & Import service permet des chemins personnalisés et prévisibles à la sauvegarde

  2. et son API pour long-running operations permet d'obtenir l'URL de sortie d'une tâche de sauvegarde (par exemple pour les chemins avec horodatage).Une fonction Cloud déclenchée par les événements Cloud Storage permettrait de gérer des fichiers spécifiques [KIND].backup_info dès qu'ils sont ajoutés à un compartiment, au lieu de pagayer à travers des milliers de fichiers dans le compartiment à chaque fois.

Datastore Export & importation

Ce nouveau service a une API pour exécuter des travaux d'exportation (manually ou scheduled). Le travail permet de spécifier le chemin et produit des chemins complets prévisibles, de sorte que les fichiers de sauvegarde existants pourrait être écrasé si seule la dernière sauvegarde est nécessaire à tout moment, par exemple:

gs://[YOUR_BUCKET]/[PATH]/[NAMESPACE]/[KIND]/[NAMESPACE]_[KIND].export_metadata 

Cron-emploi, l'URL du gestionnaire App Engine est /cloud-datastore-export (au lieu de l'ancien /_ah/datastore_admin/backup.create). Le format de l'exportation est également différent de l'ancienne exportation. Il peut également être importé dans BigQuery, tout comme les anciens fichiers [KIND].backup_info.

Nuage Fonction

déployer une fonction Cloud (JavaScript/Node.js) qui est déclenchée par un changement dans le seau de sauvegarde et si ce fichier existe (file.resourceState === 'not_exists'), est nouveau (file.metageneration === '1') et en fait un des fichiers [KIND].backup_info que nous voulons, il sera copié dans un autre compartiment ("latest_backups" ou plus). Les métadonnées personnalisées sur la copie peuvent être utilisées pour comparer timeCreated dans les exécutions ultérieures de la fonction (pour ne pas écraser accidentellement un fichier de sauvegarde plus récent avec un fichier plus ancien). La copie ou le déplacement de données utiles de sauvegarde cassera les références dans les fichiers [KINDNAME].backup_info.