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