【问题标题】:Automatically tidying up GAE cron backups自动整理 GAE cron 备份
【发布时间】:2017-08-30 07:29:21
【问题描述】:

我正在运行标准的 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 也可以删除 Datastore Admin 中的条目。虽然它们不会花费我任何东西,但我宁愿让它们与存储桶中的内容相匹配。 (而且我不想使用 GUI :-)

谢谢 蒂姆

【问题讨论】:

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


    【解决方案1】:

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

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 2012-12-01
      相关资源
      最近更新 更多