Referring to the docs ,您可以指定使用分段 uploader 将大文件推送到 Amazon Web Services s3 时的并发连接数。虽然它确实说并发默认为 5,但它没有指定最大值,也没有指定每个 block 的大小是否来自总文件大小/并发。
我浏览了源代码,注释与文档几乎相同:
Set the concurrency level to use when uploading parts. This affects how many parts are uploaded in parallel. You must use a local file as your data source when using a concurrency greater than 1
所以我的功能构建看起来像这样(变量是按方式定义的,这只是压缩的例子):
use Aws\Common\Exception\MultipartUploadException;
use Aws\S3\Model\MultipartUpload\UploadBuilder;
$uploader = UploadBuilder::newInstance()
->setClient($client)
->setSource($file)
->setBucket($bucket)
->setKey($file)
->setConcurrency(30)
->setOption('CacheControl', 'max-age=3600')
->build();
效果很好,除了 200mb 文件需要 9 分钟才能上传...有 30 个并发连接?我觉得很可疑,所以我将并发数提高到 100,上传时间为 8.5 分钟。这么小的差异可能只是连接而不是代码。
所以我的问题是是否有并发最大值,它是什么,以及是否可以指定 block 的大小或者是否自动计算 block 大小。我的目标是尝试在 5 分钟内将 500mb 的文件传输到 AWS s3,但是如果可能的话,我必须对其进行优化。
最佳答案
看源码,貌似10000是最大并发连接数。不会根据并发连接自动计算 block 大小,但无论出于何种原因,您都可以根据需要自行设置。
我将 block 大小设置为 10 兆,20 个并发连接,它似乎工作正常。在真实的服务器上,我在 23 秒内传输了一个 100 meg 的文件。比开发环境中的 3 1/2 到 4 分钟要好得多。有趣,但他们是统计数据,如果其他人遇到同样的问题。
这就是我的构建器最终的样子:
$uploader = UploadBuilder::newInstance()
->setClient($client)
->setSource($file)
->setBucket($bicket)
->setKey($file)
->setConcurrency(20)
->setMinPartSize(10485760)
->setOption('CacheControl', 'max-age=3600')
->build();
我可能需要提高最大缓存,但到目前为止,这是可以接受的。关键是将处理器代码移至服务器,而不是依赖于我的开发环境的弱点,无论机器有多强大或互联网连接有多高级。
关于amazon-web-services - AWS s3 分段上传是否有最大并发数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35184353/