У меня возникла проблема с использованием API облачных хранилищ Google на Java. Все это происходит на экземпляре GCP, поэтому все это входит в сеть Google. В принципе, для загрузки больших zip-файлов, gsutil
работает очень быстро, но Java-код выполняет аналогичную задачу очень медленно, возможно, в 10 раз. Для справки это будет эквивалентная команда gsutil.Загрузить с Google Cloud Storage Java API медленнее, чем gsutil
gsutil cp gs://mybucket/myfile.zip .
Pretty basic, no crazy options. Тем не менее, код 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()
(так как мы скачивание почтового индекса, это уже сжато) - ни как-либо заметный эффект.
Можете ли вы количественно определить «очень медленно»? Сколько секунд требуется для загрузки объекта, скажем, 100 мегабайт? Сколько времени занимает gsutil? –
Я видел как медленный, как 70-х для 500 МБ. gsutil заканчивается примерно в 2-3 раза. – PatrickB