在S3上压缩整个目录

时间:2013-05-03 21:54:13

标签: amazon-web-services amazon-s3 s3cmd

如果我在S3上有一个包含约5000个小文件的目录,有没有办法轻松压缩整个目录并将生成的zip文件留在S3上?我需要这样做,而不必亲自手动访问每个文件。

谢谢!

2 个答案:

答案 0 :(得分:5)

不,没有灵丹妙药。

(顺便说一句,你必须意识到在S3中没有“目录”这样的东西。只有路径的对象。你可以获得类似目录的列表,但是'/'字符不是魔术 - 你可以用你想要的任何角色获得前缀。)

有人指出,“预先压缩”它们可以帮助下载速度和追加速度。 (以重复存储为代价。)

如果下载是瓶颈,那么听起来就像是在连续下载。 S3可以支持1000个同时连接到同一个对象而不会出汗。您需要运行基准测试以查看最佳连接数,因为来自一个盒子的过多连接可能会被S3限制。当你每秒进行1000次连接时,你可能需要做一些TCP tuning

“解决方案”在很大程度上取决于您的数据访问模式。尝试重新安排问题。如果您的单个文件下载不常见,那么将它们一次100个分组到S3中会更有意义,然后在请求时将它们分开。如果它们是小文件,则将它们缓存在文件系统上可能是有意义的。

或者将所有5000个文件存储为S3中的一个大型zip文件可能是有意义的,并使用“智能客户端”可以下载特定范围的zip文件以便为各个文件提供服务。 (我记得S3支持字节范围。)

答案 1 :(得分:0)

我同意@BraveNewCurrency答案。
您将需要自己的服务器来有效地执行此操作,因为AWS S3实际上只是键值存储。
命令行工具无法使用,因为文件和参数太多。

但是,您确实有一些选项可能不是那么免费或易于设置。

付费选项
我实际上参与了一个廉价的商业项目。 它们既提供API,又提供启动您自己的预配置EC2拉链服务器的选项。
https://s3zipper.com/
https://docs.s3zipper.com

免费选项
您还可以使用以下免费软件包(JavaScript和Go(Golang))构建自己的服务器:
https://github.com/orangewise/s3-zip
https://github.com/DanielHindi/aws-s3-zipper
https://github.com/Teamwork/s3zipper