gpt4 book ai didi

amazon-s3 - 亚马逊 s3 重命名和覆盖文件、建议和风险

转载 作者:行者123 更新时间:2023-12-02 22:37:10 28 4
gpt4 key购买 nike

我有一个包含两种文件名的存储桶:

  1. [存储桶]/[文件]
  2. [存储桶]/[文件夹]/[文件]

例如,我可以:

  1. MyBucket/bar
  2. MyBucket/foo/bar

我想将所有 [Bucket]/[folder]/[file] 文件重命名为 [Bucket]/[file] 文件(从而覆盖/丢弃[Bucket]/[file] 文件)。
就像前面的例子一样,我希望 MyBucket/foo/bar 成为 MyBucket/bar (并覆盖/覆盖原来的 MyBucket/bar )。

我尝试了两种方法:

  1. 使用 s3cmd 的移动命令:s3cmd mv s3://MyBucket/foo/bar s3://MyBucket/bar
  2. 使用 Amazon 的 php SDK:rename(s3://MyBucket/foo/bar, s3://MyBucket/bar)

两种方法似乎都有效,但是 - 考虑到我必须对数千个文件进行批处理,
我的问题是:

  1. 首选哪种方法?
  2. 还有其他更好的方法吗?
  3. 我必须在移动/重命名之前删除旧文件吗?(没有它似乎也可以正常工作,但我可能不知道其中涉及的风险)

谢谢。

最佳答案

自从我大约 5 个月前提出这个问题以来,我有一些时间来获得一些见解;所以我自己来回答:

据我所知,性能方面没有重大差异。我可以想象,从 PHP 内部调用 s3cmd 的成本可能会很高,因为每个请求都会调用一个外部进程;但话又说回来 - Amazon 的 SDK 使用 cURL 发送请求,因此没有太大区别。

我确实注意到的一个区别是,Amazon 的 SDK 往往会抛出 cURL 异常(看似随机,而且很少发生),但 s3cmd 根本没有崩溃。我的脚本运行在数十个或数千个文件上,因此我必须学习处理这些 cURL 异常的困难方法。
我的理论是,当服务器上存在通信冲突时(例如,当两个进程尝试使用相同的资源时),cURL 会崩溃。我正在开发一个服务器,有时多个进程会同时使用 cURL 访问 S3;这是 cURL 表现出这种行为的唯一情况。

结论:
使用 s3cmd 可能会更稳定,但使用 SDK 可以提供更多功能并更好地与 PHP 代码集成;只要您记得处理 SDK 抛出 cURL 异常的罕见情况(当多个进程同时运行时,我认为每 1000 个请求就有 1 个)。

关于amazon-s3 - 亚马逊 s3 重命名和覆盖文件、建议和风险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10398250/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com