【问题标题】:Is there a way to get a list of keys in the google app engine blobstore?有没有办法在谷歌应用引擎 blobstore 中获取密钥列表?
【发布时间】:2013-01-17 12:22:35
【问题描述】:

我的计划是通过随机选择其中一个键并检查数据存储区中对它的引用来删除孤立的 blob(每十秒左右重复一次)。有没有办法得到那个列表?

【问题讨论】:

  • 您是否尝试过使用keys_only?类似于:q = Person.all(keys_only=True)

标签: google-app-engine blobstore


【解决方案1】:

您要查找的方法是 BlobInfoFactory 上的 queryBlobInfos() 方法。它将为您提供所有存储的 blob,您可以检查并删除孤儿。不知道为什么这不在 BlobstoreService 上。 https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/blobstore/BlobInfoFactory#queryBlobInfos()

【讨论】:

    【解决方案2】:

    当您在数据存储中有引用时,您可以获取文件名并删除孤儿。

        blob_key = # you have stored
        blob_info = blobstore.BlobInfo.get(blob_key)
        blobs = blobstore.BlobInfo.gql("WHERE filename = '%s'" %(blob_info.filename))                            
        for blob in blobs :
            if blob.key() != blob_key :    # do not delete the referenced one 
                blob.delete()
    

    当然,您也可以使用 gql 查询所有 blob 并将其与您的参考进行比较。

    【讨论】:

      【解决方案3】:

      根据 Goose 的回答,这是我在实验后清理所有开发混乱的方式:

          private BlobInfoFactory blobInfoFactory = new BlobInfoFactory();
      
      private void deleteAllBlobs() {
          Iterator<BlobInfo> blobsIterator = blobInfoFactory.queryBlobInfos();
          while (blobsIterator.hasNext()) {
              BlobInfo blobInfo = (BlobInfo) blobsIterator.next();
              LOG.info("Removing blob " + blobInfo.getFilename());
              blobstoreService.delete(blobInfo.getBlobKey());
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2014-04-04
        • 2012-01-19
        • 1970-01-01
        • 2013-08-23
        相关资源
        最近更新 更多