自动整理GAE cron备份

时间:2017-08-29 11:50:33

标签: java google-app-engine google-cloud-datastore

我正在运行标准的cron作业,每晚将我的GAE数据存储区备份到Google存储桶。我添加了代码来整理它并删除存储桶中的旧备份,因为我只需要上周的备份:

    GcsService gcsService = GcsServiceFactory.createGcsService();

    // Today, and 3 days before date
    Date today = new Date();
    Date Lastweek = new Date();
    Long LastweekMS = today.getTime() - (7*24*60*60*1000);
    Lastweek.setTime(LastweekMS);

    try{
        ListResult list = gcsService.list(bucket, new ListOptions.Builder().setRecursive(true).build());

        while(list.hasNext()){
            ListItem item = list.next();
            if(item.getLastModified().after(Lastweek) == false)
            {
                gcsService.delete(new GcsFilename(bucket, item.getName()));
            }
        }
    }

这很好用。但是,是否有API也可以删除数据存储区管理中的条目。虽然它们不会让我付出任何代价,但我宁愿让它们与存储桶中的内容相匹配。 (我不想使用GUI: - )

由于 添

1 个答案:

答案 0 :(得分:2)

数据存储备份的状态信息存储在数据存储区本身的实体中。

对于已完成的作业,您可以删除与查询匹配的实体:

SELECT * FROM _AE_DatastoreAdmin_Operation
WHERE status = "Completed"
AND last_updated < DATETIME("YYYY-MM-DDThh:mm:ss.SSSSSS+zz:ZZ")

请注意,为了运行查询,您需要首先在类型上创建索引:

indexes:
- kind: _AE_DatastoreAdmin_Operation
  ancestor: no
  properties:
  - name: status
  - name: last_updated
    direction: desc

而且,作为使用AE cron的替代方法,您可以使用GCS的生命周期管理来自动删除超过N天的对象:https://cloud.google.com/storage/docs/lifecycle