Как я могу загрузить каталог с S3 параллельно

Я пытаюсь загрузить один каталог с S3, используя transferManager.downloadDirectory(). В этом каталоге у меня около 9000 небольших файлов.

Я установил 50 фиксированных пулов потоков, но не почувствовал, что производительность изменилась. Я думаю, это только для загрузки файла MultiPart.

Есть ли простой способ загрузить каталог параллельно?

    TransferManagerBuilder transferManagerBuilder = TransferManagerBuilder.standard();
    transferManagerBuilder.setS3Client(s3client);
    transferManagerBuilder.setExecutorFactory(() -> Executors.newFixedThreadPool(50));
    TransferManager transferManager = transferManagerBuilder.build();

    File tempDir = tempDirPath.toFile();
    MultipleFileDownload download =  transferManager.downloadDirectory("REGRESSION_TEST", fromPath, tempDir);
    try {
        download.waitForCompletion();
    } catch (AmazonClientException | InterruptedException e) {
        logger.debug("failed to download S3 files", e);
        return null;
    }

С уважением,

Эрик Чжан


person Eric Zhang    schedule 08.04.2018    source источник
comment
Удалось ли вам разобраться в этом вопросе?   -  person Sharanya    schedule 26.09.2020


Ответы (1)


Я предполагаю, что работает только один поток. Вам нужно будет составить список всех ключей, а затем загрузить их с помощью Download, а не DownloadDirectory.

person Buffalo    schedule 13.03.2019