Eya*_*lAr 6 amazon-s3 batch-rename
我有一个包含两种文件名的存储桶:
[Bucket]/[file]
[Bucket]/[folder]/[file]
例如,我可以:
MyBucket/bar
MyBucket/foo/bar
我想将所有[Bucket]/[folder]/[file]
文件重命名为[Bucket]/[file]
文件(从而覆盖/丢弃[Bucket]/[file]
文件).
因此,在前面的示例中,我想MyBucket/foo/bar
成为MyBucket/bar
(并覆盖原始的/ duscard MyBucket/bar
).
我尝试了两种方法:
s3cmd mv s3://MyBucket/foo/bar s3://MyBucket/bar
rename(s3://MyBucket/foo/bar, s3://MyBucket/bar)
这两种方法似乎都有效,但是 - 考虑到我必须在数千个文件上进行批处理,
我的问题是:
谢谢.
自从我大约 5 个月前问这个问题以来,我有一些时间来获得一些见解;所以我自己来回答:
据我所见,性能方面没有重大差异。我可以想象s3cmd
从 PHP 内部调用可能会很昂贵,因为每个请求都调用一个外部进程;但话又说回来 - 亚马逊的 SDK 使用 cURL 来发送它的请求,所以没有太大区别。
我注意到的一个区别是,亚马逊的 SDK 倾向于抛出 cURL 异常(似乎是随机的,而且很少),但s3cmd
根本没有崩溃。我的脚本在成千上万个文件上运行,所以我必须学习处理这些 cURL 异常的艰难方法。
我的理论是当服务器上存在通信冲突时(例如,当两个进程尝试使用相同的资源时),cURL 会崩溃。我正在开发服务器上,有时有几个进程同时使用 cURL 访问 S3;这些是 cURL 表现出这种行为的唯一情况。
结论:
使用s3cmd
可能更稳定,但使用 SDK 可以提供更多功能并与您的 PHP 代码更好地集成;只要您记得处理 SDK 抛出 cURL 异常的罕见情况(当多个进程同时运行时,我会说每 1000 个请求处理 1 个请求)。
归档时间: |
|
查看次数: |
6017 次 |
最近记录: |