Java 从Google云存储中高效删除多个Blob

Java 从Google云存储中高效删除多个Blob,java,google-cloud-platform,google-cloud-storage,Java,Google Cloud Platform,Google Cloud Storage,如果一个容器中包含大量项目,则逐个删除容器中的多个blob的速度非常慢 public static void rmAll(Storage storage, String bucket) { Page<Blob> blobs = storage.list(bucket, Storage.BlobListOption.currentDirectory()); for(Blob blob : blobs.iterateAll()) { blob.delete

如果一个容器中包含大量项目,则逐个删除容器中的多个blob的速度非常慢

public static void rmAll(Storage storage, String bucket) {
    Page<Blob> blobs = storage.list(bucket, Storage.BlobListOption.currentDirectory());
    for(Blob blob : blobs.iterateAll()) {
        blob.delete();
    }
}
publicstaticvoidrmall(存储、字符串存储桶){
Page blobs=storage.list(bucket,storage.BlobListOption.currentDirectory());
for(Blob Blob:blobs.iterateAll()){
blob.delete();
}
}
我们可以简单地利用它高效地删除一个bucket中的多个blob

public static rmAll(Storage storage, String bucket) {
    StorageBatch batch = storage.batch();
    Page<Blob> blobs = storage.list(bucket, Storage.BlobListOption.currentDirectory());
    for(Blob blob : blobs.iterateAll()) {
        batch.delete(blob.getBlobId());
    }
    batch.submit();
}
publicstaticrmall(存储、字符串存储桶){
StorageBatch=storage.batch();
Page blobs=storage.list(bucket,storage.BlobListOption.currentDirectory());
for(Blob Blob:blobs.iterateAll()){
batch.delete(blob.getBlobId());
}
batch.submit();
}

这个答案很好。但是,您需要限制批删除中的项目数。我不记得数字了,但我想它是1000。@John,也许这个数字最近有所改变,但我把它放在一个装有5000多件物品的桶上。不过,我怀疑这是我的使命,而不是
iterateAll()
保证获取基础数据源中的所有项。我将尝试在源代码中找到它。每个API调用都有限制的不是
get
,而是
batch delete
。当我为云存储编写了一个C++ SDK时,我遇到了这个问题。我记不清确切的细节。然而,你的回答仍然是正确的。只是一个小细节让我自己弄清楚。@John,如果你想知道我的答案有什么限制,请给我回电话,这样我就可以在以后的谷歌搜索中编辑它了。:)