我正在从事视频迁移(PHP、drupal 10),即将文件从一个 S3 存储桶复制到另一个存储桶。我正在使用 S3FileImport 类的 copyObject() 方法来复制文件。
问题是我有很多小文件(视频片段),迁移需要很多时间。 IE。 1 个视频可以有 500 个片段文件,复制所有这些文件大约需要 2 分钟,而且我也有很多视频。
问题:如果源文件在同一个bucket上,复制速度会提高多少?想法是使用一些批量复制首先将所有文件移动到同一个存储桶(drupal 的本地存储),然后运行迁移。这有意义吗?
如果没有,关于如何提高复制速度还有其他建议吗?
copyObject()
方法指示S3在位置之间复制对象。这完全发生在 AWS 内,不涉及下载/上传数据。对于在同一存储桶或不同存储桶中复制的对象,它将以相同的速度运行(只要存储桶位于同一区域)。
您面临的问题是每个复制请求都有开销——主要是发送请求和接收响应。要加快复制过程,您可以并行发出复制命令。即使用多线程发出更多的 Copy 命令,而无需等待响应才发出下一个 Copy 请求。这就是 AWS CLI 如此快速地复制文件的原因。
当然,最好的解决方案是如果可能的话不要复制这些文件。也许您可以找到一种方法让您的应用程序从实际源读取,而不必先复制所有对象。