优先获取最新的S3密钥
我正在开发一个应用程序,用来在S3存储桶中保存(可能有几百万个)对象。我的应用会获取最新的对象(大概是这样),处理它,然后再把它写回同一个存储桶。我需要一种方法来访问这些对象的键,并给新对象命名,这样我的应用就能轻松找到最新的对象。
我知道可以通过在SimpleDB中放置元数据来做到这一点,但我并不需要严格的一致性。如果我的应用抓取到的对象不是最新的也没关系。我只需要应用尽量获取比较新的键,而不是旧的。所以我想简单点,只用S3来实现。
有没有办法在S3的元数据上进行访问和排序?或者有没有一种命名对象的方案,可以满足我的需求(因为我知道S3是按字典顺序列出键的,而boto可以处理分页)?
1 个回答
1
S3的版本控制在这里真的很有帮助。如果这些数据实际上是同一个“东西”,你可以为你的存储桶开启版本控制,从你的键中获取数据,修改后再存回同一个键。
你需要使用boto的
bucket.get_all_versions( prefix='yourkeynamehere' )
你可以获取版本,最新的版本会排在最前面,所以虽然这个功能没有处理分页,但你只需获取第一个索引,就能拿到最新的版本。
如果你想查看更早的版本并需要分页,boto还提供了一个list_versions()的功能,它也可以接受一个前缀,这样你就可以得到一个结果集,能够遍历所有版本,而不需要担心其他问题。
如果这些对象实际上并不是“相同”的对象,那也没关系,因为S3不会存储差异——它每次都会存储完整的对象。如果你有多种“类型”的对象,你可以有多个版本集,从中提取最新的版本。
我一直在使用版本控制,感觉挺不错的。