使用通配符与发送所有命令的 aws 复制速度优势?

aws copy speed advantage of using wildcards versus sending all commands?

我正在尝试在存储桶之间复制大量文件,但每秒只能获得大约 15 个文件。那是不可用的,有 500k 个文件...

所以我想知道在 cp 语句中使用通配符是否真的有什么区别,而不是发送单独的 cp 语句?这里使用的“标准”是什么?或者两者都会导致相同的客户端和服务器负载?

举个例子,我现在已经编写了代码来根据文件的批次 ID 对文件进行分组并分组发送。 但是(从非常基本的测试中)我没有得到它更快的印象?

例如,

aws s3 cp <path>/XY.15937610001 <path_to>
aws s3 cp <path>/XY.15937610002 <path_to>
aws s3 cp <path>/XY.15937610003 <path_to>
:
aws s3 cp <path>/XY.15937615999 <path_to>

对比:

命令

aws s3 cp <path> <path_to> --recursive --exclude="*" --include="XY.159376*"

谢谢

PS 编辑 - 是使用 max_concurrent_sessions 或类似 S3DistCp (s3-dist-cp) 之类的东西(无论可能是什么)来加快速度的唯一方法吗? 我目前无法使用这两个选项...

我相信使用 --include/--exclude 标志的某些时间将用于查询具有该模式的键的任何特定对象?

你能批量处理 运行 多个前缀并指定确切的前缀吗?

每当执行查询以列出对象时,后端 API 必须检查 S3 架构中许多分布式节点的内容,以检查它们是否符合此条件。

如果您可以 运行 这些并行进行,那么您可能会看到速度有所提高,但请注意以下可能会减慢速度的因素:

  • 磁盘I/O - 如果写入磁盘,请注意磁盘可能会节流。对于 EBS 中的 GP2 卷,他们使用 burstable 学分来提高 IOP 性能。
  • 网络I/O - 服务器能否支持该吞吐量?如果您使用的是 EC2 实例,请查看 instance types.
  • EBS Optimized - 如果您使用的是 EC2,请确保您的实例已启用 EBS 优化。这有助于避免 EBS 卷上网络 I/O 和存储 I/O 之间的带宽争用。
  • VPC 端点 - 为 S3 设置一个 VPC 端点并将其应用于实例的路由 table。通过这样做,与 S3 的连接变为私有,从而减少了 API 操作和复制的延迟。