【发布时间】:2012-01-10 22:02:50
【问题描述】:
在包含大量键的 S3 存储桶中,通过 REST api 列出键是一个非常缓慢的过程,因为
- 您一次只能列出 1000 个键。
- 确定第 5001 个键的唯一方法(据我所知)是列出前 1000 个键,根据响应中的下一个标记列出下一个键,然后递归直到到达 5001。
- S3 REST api 请求延迟非常高,请求 1000 个密钥通常需要几秒钟。
鉴于进行 100 个并发键列表 REST 请求不应减慢任何单个请求的速度,否则此过程将适合通过并行化进行优化。但是,如果我的算法是“愚蠢的”并且只是将可能的密钥空间拆分为预定义的标记(例如,'','a','b','c','d','e'...... ) 它不会真正加快在每个键都以 'images/' 开头的存储桶中列出键
所以我想知道是否有人真正体验过 S3 知道更好的方法来遍历存储桶的密钥空间,或者是否有人尝试过自适应(即“不愚蠢”)算法来改进并发密钥列表。
【问题讨论】:
-
由于 S3 返回大型 XML - 未压缩 - 您将只用几个请求淹没您的 Internet 连接,这当然取决于您的连接和程序的速度。
-
我将通过列出每个级别的键并使用线程沿着树向下移动来使用这里的机制。它也可能对你有用。 stackoverflow.com/questions/1239700/…
-
@TomAndersen 4 年后才看到这一点。我挑战你用 S3 存储桶列表请求使 ec2 实例带宽(100 mbps)饱和,哈哈。
-
我可以使连接饱和 - 限制是 #of IOP,即针对特定前缀,所有客户端每秒读取 5,500 次。您不需要超过几十个激进的 EC2 客户端,因为它们都得到 503,您必须退缩。如果您在树上行走,请在返回的路径中取光,并在潜入它们之前随机化。
标签: rest amazon-s3 concurrent-programming