22

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

谢谢!

4

2 回答 2

9

不,没有灵丹妙药。

(顺便说一句,您必须意识到在 S3 中没有“目录”之类的东西。只有带有路径的对象。您可以获得类似目录的列表,但 '/' 字符并不神奇 - 你可以获取任何你想要的字符的前缀。)

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

如果下载是瓶颈,听起来您正在连续下载。S3 可以支持 1000 多个同时连接到同一个对象,而不费吹灰之力。您需要运行基准测试以查看最佳连接数,因为来自一个盒子的太多连接可能会受到 S3 的限制。在每秒进行 1000 个连接时,您可能需要进行一些TCP 调整。

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

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

于 2013-05-03T22:12:42.577 回答
8

我同意@BraveNewCurrency 的回答。
您需要自己的服务器才能有效地执行此操作,因为 AWS S3 只是真正意义上的键值存储。
命令行工具不起作用,因为文件和参数太多。

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

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

大型迁移(TB->PB 级)
AWS Snowball

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

于 2018-10-22T03:25:56.817 回答