【发布时间】:2016-04-15 21:12:55
【问题描述】:
我是使用 aws s3 客户端的新手。我尝试使用“aws s3 cp”命令将批量文件从 s3 下载到本地文件系统,速度非常快。但我随后尝试使用 amazon java sdk API 在单线程循环中仅读取这批文件的所有内容,令人惊讶的是,它比给定的“aws s3 cp”命令慢了好几倍:
有人知道是什么原因吗?我怀疑“aws s3 cp”是多线程的
【问题讨论】:
我是使用 aws s3 客户端的新手。我尝试使用“aws s3 cp”命令将批量文件从 s3 下载到本地文件系统,速度非常快。但我随后尝试使用 amazon java sdk API 在单线程循环中仅读取这批文件的所有内容,令人惊讶的是,它比给定的“aws s3 cp”命令慢了好几倍:
有人知道是什么原因吗?我怀疑“aws s3 cp”是多线程的
【问题讨论】:
如果您查看transferconfig.py的来源,则表明默认为:
DEFAULTS = {
'multipart_threshold': 8 * (1024 ** 2),
'multipart_chunksize': 8 * (1024 ** 2),
'max_concurrent_requests': 10,
'max_queue_size': 1000,
}
这意味着它可以同时进行 10 个请求,并且当文件大于 8MB 时,它还会将传输分成 8MB 块
这是also documented on the s3 cli config 文档。
这些是您可以为 S3 设置的配置值:
max_concurrent_requests - 最大并发请求数。
max_queue_size - 任务队列中的最大任务数。 multipart_threshold - CLI 用于单个文件的多部分传输的大小阈值。
multipart_chunksize - 使用多部分传输时,这是 CLI 用于单个文件的多部分传输的块大小。
您可以将其调低,看看它是否与您的简单方法比较:
aws configure set default.s3.max_concurrent_requests 1
之后别忘了调整它,否则你的 AWS 性能会很糟糕。
【讨论】: