JavaでGoogle Cloud Storage APIを使用する際に問題が発生しました。 GCPインスタンスでは次のようなことが起こるため、すべてがGoogleのネットワーク内にあります。基本的に、大きなzipファイルをダウンロードするには、gsutil
は非常に高速ですが、Javaコードも同様の作業を行うのが非常に遅く、おそらく10倍です。参考のために、これは同等のgsutilコマンドです。Google Cloud Storageからダウンロードgsutilよりも遅いJava API
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>
私は(私たちはzipファイルをダウンロードしていることから、それはすでに圧縮されます)setDirectDownloadEnabled()
とsetDisableGZipContent()
するためのオプションを変更しようとしました。
"極端に遅い"を定量できますか? 100メガバイトのオブジェクトをダウンロードするのに何秒かかりますか? gsutilはどれくらいかかりますか? –
私は500MBで70秒ほど遅く見えました。 gsutilは約2-3で終了する。 – PatrickB