【发布时间】:2018-04-18 14:59:53
【问题描述】:
我目前使用 TransferManager 从 Lambda 函数下载 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());
似乎需要大约300 seconds 来下载10,000 files(大小为~20KB each),给我一个大约666 KBps 的传输率。
增加线程池大小似乎根本不会影响传输率。
S3 终端节点和 lambda 函数位于同一个 AWS 区域和同一个 AWS 账户中。
如何优化 S3 下载?
【问题讨论】:
标签: java amazon-web-services amazon-s3 io