【发布时间】:2012-10-22 19:24:22
【问题描述】:
在 AWS-SDK 中,它列出了以下形式的 ruby 代码:
s3 = AWS::S3.new
bucket = s3.buckets[bucket_name]
tree = bucket.as_tree(:prefix => 'myshop/products')
directories = tree.children.select(&:branch?).collect(&:prefix)
失败错误:“无法在 S3 列表对象响应中找到标记”
目录结构
/myshop/products/1474472/original.jpg
/myshop/products/1474472/small.jpg
/myshop/products/1474472/mini.jpg
/myshop/products/1333333/original.jpg
/myshop/products/1333333/small.jpg
/myshop/products/1333333/mini.jpg
...
超过 100 000 个对象
我想验证目录(例如“1474472”)是否已创建
我的计划:aws-s3-list-> ruby-array->在数组中查找 (array.include?)
!!!需要非常快速的方法 - 世界末日即将来临 :)
【问题讨论】:
-
我不熟悉 Ruby SDK,但 S3 只允许您一次列出 1000 个对象,因此列出 100,000 个对象将导致至少 100 个 HTTP 请求。如果您想检查特定对象是否存在,那么为该对象发送 HEAD 请求是最好的方法。听起来您想检查一个或多个文件是否与给定前缀匹配,难道您不能只调整现有的前缀搜索以包含子目录名称吗?
-
嗨,aws ping 需要 288 毫秒 - 0.3 秒 х 10000= 3000 秒 = 50 分钟,时间很长。