我正在寻找收集存储在云端存储中的特定数据存储* .backup_info文件的最佳策略,并将其复制为"最新的"每种类型的backup_info文件,所以我有一个每种类型的修复位置,其中找到了最新的backup_info文件,例如
gs://MY-PROJECT.appspot.com/latest/Comment.backup_info
基本上,我有一个Google App Engine应用程序(Python标准),其中包含Cloud Datastore中的数据。我可以运行一个cron-job来自动和定期执行备份,如文档Scheduled Backups中所述,我还可以编写一些Python代码来执行备份任务,这些任务由described in this SO answer手动触发。我打算编写一个小的Python cron-job,它将执行任务以查找给定类型的最新backup_info文件,并将其复制/重命名为所需位置。
无论哪种方式,原始备份位置在一天内都会挤满大量文件和文件夹,特别是如果某种备份有多个备份。例如,在gs://MY-PROJECT.appspot.com/
我会找到:
VeryLoooooongRandomLookingString.backup_info
OtherStringForSecondBackup.backup_info
OtherStringForThirdBackup.backup_info
字符串似乎是每次备份执行的唯一标识符。我假设它包含一个* .backup_info文件列表,每个文件对应一种备份。
VeryLoooooongRandomLookingString.Comment.backup_info
OtherStringForSecondBackup.Comment.backup_info
OtherStringForThirdBackup.Comment.backup_info
对于备份中的每种类型,例如"注释&#34 ;.它似乎包含此类和此备份的实际备份数据列表。
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/
每个备份和种类的数据文件夹。这里是善待"评论",在9月20日备份了三次。
我的问题与数据存储和/或存储有关:
/_ah/datastore_admin/backup.create
时是否可以将自定义UID显式指定为查询参数(或在HTTP标头中)?答案 0 :(得分:0)
我找到了两个问题的解决方案,一个是GA,一个是Beta。
答案简短:
GA Datastore Export & Import service允许自定义和可预测的备份路径
及其long-running operations的API允许获取备份作业的输出网址(例如,对于带有时间戳的路径)。
由云存储事件触发的云功能只允许在将特定[KIND].backup_info
文件添加到存储桶时处理它们,而不是每次都对存储桶中的数千个文件进行分页。 / p>
此新服务具有用于运行导出作业的API(manually或scheduled)。该作业允许指定路径并产生可预测的完整路径,因此如果在任何时候只需要最新的备份,则可以覆盖现有的备份文件,例如:
gs://[YOUR_BUCKET]/[PATH]/[NAMESPACE]/[KIND]/[NAMESPACE]_[KIND].export_metadata
对于cron-jobs,App Engine处理程序URL为/cloud-datastore-export
(而不是旧/_ah/datastore_admin/backup.create
)。此外,导出的格式与旧导出的格式不同。它也可以导入BigQuery,就像旧的[KIND].backup_info
文件一样。
部署由备份存储桶中的任何更改触发的云功能(JavaScript / Node.js),如果该文件存在(file.resourceState === 'not_exists'
),则为新(file.metageneration === '1'
),实际上是我们想要的[KIND].backup_info
文件之一,它将被复制到另一个桶(" latest_backups"左右)。副本上的自定义元数据可用于在以后的函数执行中比较timeCreated
(因此我们不会意外地用较旧的文件覆盖更新的备份文件)。复制或移动实际的备份有效负载会破坏[KINDNAME].backup_info
文件中的引用。