Referring to the docs,您可以使用multipart上传器指定将大文件推送到Amazon Web Services s3时的并发连接数。虽然它确实说并发默认为5,但它没有指定最大值,或者每个块的大小是否来自总文件大小/并发。
我控制了源代码,评论与文档几乎相同:
设置上传部件时使用的并发级别。这影响了 并行上传了多少部分。您必须使用本地文件 使用大于1的并发时的数据源
所以我的功能构建看起来像这样(vars是通过这种方式定义的,这只是简化的例子):
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,但是如果可能的话我必须优化它。
答案 0 :(得分:1)
查看源代码,看起来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();
我可能需要提升最大缓存,但到目前为止,这可以接受。关键是将处理器代码移动到服务器而不依赖于我的开发环境的弱点,无论机器有多强大或互联网连接是高级的。
答案 1 :(得分:0)
我们可以在上传过程中中止该过程,并可以暂停所有操作并在任何实例中止上传。我们可以设置并发和最小部件大小。
$uploader = UploadBuilder::newInstance()
->setClient($client)
->setSource('/path/to/large/file.mov')
->setBucket('mybucket')
->setKey('my-object-key')
->setConcurrency(3)
->setMinPartSize(10485760)
->setOption('CacheControl', 'max-age=3600')
->build();
try {
$uploader->upload();
echo "Upload complete.\n";
} catch (MultipartUploadException $e) {
$uploader->abort();
echo "Upload failed.\n";
}