优先获取最新的S3密钥

2 投票
1 回答
809 浏览
提问于 2025-04-16 19:50

我正在开发一个应用程序,用来在S3存储桶中保存(可能有几百万个)对象。我的应用会获取最新的对象(大概是这样),处理它,然后再把它写回同一个存储桶。我需要一种方法来访问这些对象的键,并给新对象命名,这样我的应用就能轻松找到最新的对象。

我知道可以通过在SimpleDB中放置元数据来做到这一点,但我并不需要严格的一致性。如果我的应用抓取到的对象不是最新的也没关系。我只需要应用尽量获取比较新的键,而不是旧的。所以我想简单点,只用S3来实现。

有没有办法在S3的元数据上进行访问和排序?或者有没有一种命名对象的方案,可以满足我的需求(因为我知道S3是按字典顺序列出键的,而boto可以处理分页)?

1 个回答

1

S3的版本控制在这里真的很有帮助。如果这些数据实际上是同一个“东西”,你可以为你的存储桶开启版本控制,从你的键中获取数据,修改后再存回同一个键。

你需要使用boto的

bucket.get_all_versions( prefix='yourkeynamehere' )

你可以获取版本,最新的版本会排在最前面,所以虽然这个功能没有处理分页,但你只需获取第一个索引,就能拿到最新的版本。

如果你想查看更早的版本并需要分页,boto还提供了一个list_versions()的功能,它也可以接受一个前缀,这样你就可以得到一个结果集,能够遍历所有版本,而不需要担心其他问题。

如果这些对象实际上并不是“相同”的对象,那也没关系,因为S3不会存储差异——它每次都会存储完整的对象。如果你有多种“类型”的对象,你可以有多个版本集,从中提取最新的版本。

我一直在使用版本控制,感觉挺不错的。

撰写回答