gpt4 book ai didi

java - 从 Google Cloud Storage Java API 下载比 gsutil 慢

转载 作者:行者123 更新时间:2023-11-30 10:44:23 26 4
gpt4 key购买 nike

我在使用 Java 中的 Google Cloud Storage API 时遇到了问题。以下所有内容都发生在 GCP 实例上——所以这都在 Google 的网络中。基本上,对于下载大型 zip 文件,gsutil 速度极快,但执行类似任务的 Java 代码速度极慢,速度可能慢 10 倍。作为引用,这将是等效的 gsutil 命令。

gsutil cp gs://mybucket/myfile.zip .

非常基本,没有疯狂的选择。然而,应该做或多或少相同事情的 Java 代码要慢得多:

        FileOutputStream fos = new FileOutputStream("myfile.zip");
Storage.Objects.Get get = storageService.objects().get("mybucket", "myfile.zip");
get.setDisableGZipContent(true); //Seems to have no effect
MediaHttpDownloader downloader = get.getMediaHttpDownloader();
downloader.setDirectDownloadEnabled(true); //Seems to have no effect
get.executeMediaAndDownloadTo(fos);

我不明白为什么这么慢。作为一个解决问题的愚蠢但可悲的测试,我在另一个终端窗口中执行了 gsutil,而 Java 代码仍在运行,并且 gsutil 下载了相同的文件比 Java 代码快几秒。它只是令人尴尬地缓慢。这些是我使用的来自 Google 的库:

    <dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.21.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-storage</artifactId>
<version>v1-rev66-1.21.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
<version>1.21.0</version>
<scope>compile</scope>
</dependency>

我已经尝试更改 setDirectDownloadEnabled()setDisableGZipContent() 的选项(因为我们正在下载一个 zip,它已经被压缩)——两者都没有效果显着。

最佳答案

gsutil 会更快的主要原因有两个:

  1. MediaHttpDownloader 默认下载字节 block 32MB一次。因此,在每 32MB 之间,在客户端等待服务响应时需要额外的往返。

  2. 默认情况下,gsutil 将对象拆分为 multiple slices并并行下载每个切片。这绕过了任何单流带宽或连接限制。

由于您的代码是 GCP 的内部代码,因此网络应该不是一个重要因素(但它仍然是一个因素)。不过,我不认为这可以解释 10 倍的降级,因此澄清您所看到的确切传输速率会很有用。

关于java - 从 Google Cloud Storage Java API 下载比 gsutil 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37401300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com