【问题标题】:Set Max Age for GAE Datastore Entries设置 GAE 数据存储条目的最长期限
【发布时间】:2014-08-20 13:37:38
【问题描述】:

我正在使用 Java Google App Engine 编写程序。我希望某些类型的实体在达到特定年龄后自动从数据存储中删除,以防止使用不必要的内存。这是我创建实体的非常令人兴奋的方式:

    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Entity entity = new Entity("thingamabob","special_thingamabob");
    datastore.put(entity);

在这种情况下,我希望 special_thingamabob 在 12 小时后自动离开数据存储区。我知道我可以给每个实体一个时间戳,然后使用 cron 每小时查询一次超时实体,但是有没有更简单的方法?

【问题讨论】:

  • 使任务定时在 X 小时内执行,在创建模型的同时删除模型。

标签: java google-app-engine


【解决方案1】:

看起来background-threads 可能有效:

    Thread thread = ThreadManager.createBackgroundThread(new Runnable() {
 private volatile boolean isRunning = true;
  public void run() {
    try {
      while (isRunning) {
        Thread.sleep(12*60*60); // sleep for 12 hours
        datastore.delete(key); //then delete key
        isRunning=false;
      }
    } catch (InterruptedException ex) {
      throw new RuntimeException("Interrupted in loop:", ex);
    }
  }
});
thread.start();

【讨论】:

  • GAE好像不允许Timer。
  • 这将无缘无故地花费大量的实例时间......为什么不推/拉任务队列?还是 cron 计划的作业来检查整个数据存储并删除“旧”实体?
猜你喜欢
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
相关资源
最近更新 更多