我目前在Lambda函数中使用TransferManager下载S3存储桶中的所有文件。
// Initialize
TransferManagerBuilder txBuilder = TransferManagerBuilder.standard();
// txBuilder.setExecutorFactory(() -> Executors.newFixedThreadPool(50));
TransferManager tx = txBuilder.build();
final Path tmpDir = Files.createTempDirectory("/tmp/s3_download/");
// Download
MultipleFileDownload download = tx.downloadDirectory(bucketName,
bucketKey,
new File(tmpDir.toUri()));
download.waitForCompletion();
return Files.list(tmpDir.resolve(bucketKey)).collect(Collectors.toList());
下载 10,000 个
大小约为 20KB
的文件,大约需要 300 秒
,传输速率大约为 666 KBps
。
增加线程池大小似乎完全不影响传输速率。
S3端点和lambda函数位于同一AWS区域和AWS帐户中。
如何优化S3下载?