参考文档,您可以指定使用分段上传器将大型文件推送到Amazon Web Services s3时的并发连接数。虽然确实说并发默认为5,但没有指定最大值,也没有指定每个块的大小是否从总文件大小/并发中得出。
我拖曳了源代码,注释与文档几乎相同:
设置上载零件时要使用的并发级别。这会影响并行上传的部分数量。当使用大于1的并发时,必须使用本地文件作为数据源
所以我的功能构建看起来像这样(通过定义方式来定义var,例如,这只是压缩的):
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分钟。如此小的差异可能只是连接而不是代码。
所以我的问题是是否有并发最大值,它是什么,以及是否可以指定块的大小或是否自动计算块大小。我的目标是尝试在5分钟内将500mb的文件传输到AWS s3,但是如果可能的话,我必须对其进行优化。
查看源代码,看起来最大并发连接数为10,000。没有基于并发连接的块大小自动计算,但是您可以根据需要自行设置这些大小。
我将块大小设置为10兆,并发连接20个,它似乎工作正常。在真实的服务器上,我得到了一个100兆的文件,要在23秒内传输。在开发环境中,这比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();
我可能需要增加最大缓存,但是到目前为止,这可以接受。关键是将处理器代码移至服务器,而不依赖于我的开发环境的弱点,无论计算机的功能多么强大或互联网连接是否高级。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句