amazon-web-services - AWS s3 分段上传是否有最大并发数?

标签 amazon-web-services amazon-s3 file-upload concurrency

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/

相关文章:

ruby-on-rails - AWS EC2 Ubuntu 服务器上的 Rails 5 应用程序:Errno::ENOSPC:设备上没有剩余空间

ruby-on-rails - 如何随机生成文件链接?

amazon-web-services - AWS S3 存储桶策略编辑器访问被拒绝

C# - 使用 WebImage.GetImageFromRequest() 进行多次上传

java - GWT 文件上传的备用按钮

ios - 移动应用程序的视频流

node.js - 使用 chef 在 aws 上安装 node.js 的正确方法

python - 如何获得 MINIO 访问权限和 key ?

amazon-web-services - 有没有办法让多个 S3 存储桶触发 Lambda 函数?

ASP.NET 文件上传停止网站上的所有其他请求