2

我正在编写一个将(可能数百万个)对象存储在 S3 存储桶中的应用程序。我的应用程序将获取最新的对象(大致),对其进行处理,然后将其写回同一个存储桶。我需要一种访问键和命名新对象的方法,以便应用程序可以轻松获取最新对象。

我知道我可以通过将元数据放入 SimpleDB 来正确地做到这一点,但我不需要硬一致性。如果应用程序抓取了一个不是最新的对象,那也没关系。我只需要该应用程序倾向于获取新键而不是旧键。所以我试图通过单独使用 S3 来保持简单。

有没有办法访问和排序 S3 元数据?或者可能有一个命名对象的方案来获得我需要的东西(因为我知道 S3 按字典顺序列出键并且 boto 可以处理分页)。

4

1 回答 1

1

s3 版本控制在这里真的很有帮助。如果这些确实是相同的“东西”,您可以为您的存储桶打开版本控制,从您的密钥中获取数据,修改它并将其存储回相同的密钥。

你需要使用boto的

bucket.get_all_versions( prefix='yourkeynamehere' )

你得到版本,最新的第一个,所以虽然这个函数不处理分页,你可以得到第一个索引,你就得到了最新的版本。

如果您想进一步返回并需要分页,boto 还提供了一个 list_versions() 函数,该函数也接受一个前缀,并将为您提供一个结果集,该结果集将遍历所有版本,而您无需担心。

如果这些对象真的不是“相同”的对象,那真的没关系,因为 s3 不存储差异——它每次都存储整个东西。如果您有多种“类型”的对象,则可以有多个版本集,您可以从中提取最新的。

我一直在使用版本控制,对此我很满意。

于 2011-06-19T00:40:39.080 回答