是否可以从 GCS 异步中删除文件
Is it possible to delete files from GCS async
我正在尝试一次从 google 云存储中删除多个文件。
我正在使用以下代码:
public List<Boolean> deleteObjects(List<String> fileParams) {
List<BlobId> blobs =
fileParams.stream()
.map(
file -> {
logger.info("deleteObject: {}", file);
return BlobId.of(bucketName, file);
})
.collect(Collectors.toList());
return storage.delete(blobs);
}
这个调用耗时很长 - 我试图删除 150k 个文件,花了将近 1 小时。
我想 运行 将其作为“发射后不管”。
我在 JS example 中看到 api 本质上是异步的:
await storage.bucket(bucketName).file(fileName).delete();
我没有为 Java 找到这样的示例,无论是否有批处理。
我想我可以开始一个新线程并 运行 它,但我想知道 API 本身是否支持类似的东西。
运行 是否可以通过 api 原生地执行异步命令?
delete object API 调用是同步的(它不是 return 您必须轮询才能知道操作是否完成的 jobId)。因此,标准库无法实现异步调用,因为它是同步的。
NodeJS 最佳实践是在执行 API 调用时创建异步函数。这是一种语言设计,而不是 API 行为。你可以在 Java、Python 和 Go 中做同样的事情,但它不是开箱即用的,你需要自己创建并发性。
在技术上是正确的,因为基础 HTTP API 是同步的,听起来您正在寻找一种在代码中进行异步调用并让调用 运行在后台。
您正在使用的 com.google.cloud.storage
API 没有内置此功能。您始终可以 运行 在后台线程中调用或使用 Futures as demonstrated in the answers here .
您还可以使用 S3 的 Java 库访问 Google 云存储,does have a built in async API. Use the migration guide 以同时使用这些库。注意 GCS 不支持 S3 的多对象删除 API 所以你不能使用他们的 deleteObjects
方法。
请注意,由于底层 HTTP API 是同步的,因此当删除调用在后台线程中发生时,您的应用程序无法退出。
我正在尝试一次从 google 云存储中删除多个文件。
我正在使用以下代码:
public List<Boolean> deleteObjects(List<String> fileParams) {
List<BlobId> blobs =
fileParams.stream()
.map(
file -> {
logger.info("deleteObject: {}", file);
return BlobId.of(bucketName, file);
})
.collect(Collectors.toList());
return storage.delete(blobs);
}
这个调用耗时很长 - 我试图删除 150k 个文件,花了将近 1 小时。
我想 运行 将其作为“发射后不管”。
我在 JS example 中看到 api 本质上是异步的:
await storage.bucket(bucketName).file(fileName).delete();
我没有为 Java 找到这样的示例,无论是否有批处理。
我想我可以开始一个新线程并 运行 它,但我想知道 API 本身是否支持类似的东西。
运行 是否可以通过 api 原生地执行异步命令?
delete object API 调用是同步的(它不是 return 您必须轮询才能知道操作是否完成的 jobId)。因此,标准库无法实现异步调用,因为它是同步的。
NodeJS 最佳实践是在执行 API 调用时创建异步函数。这是一种语言设计,而不是 API 行为。你可以在 Java、Python 和 Go 中做同样的事情,但它不是开箱即用的,你需要自己创建并发性。
您正在使用的 com.google.cloud.storage
API 没有内置此功能。您始终可以 运行 在后台线程中调用或使用 Futures as demonstrated in the answers here .
您还可以使用 S3 的 Java 库访问 Google 云存储,does have a built in async API. Use the migration guide 以同时使用这些库。注意 GCS 不支持 S3 的多对象删除 API 所以你不能使用他们的 deleteObjects
方法。
请注意,由于底层 HTTP API 是同步的,因此当删除调用在后台线程中发生时,您的应用程序无法退出。