我正在编写一个在 S3 存储桶中存储(可能有数百万个)对象的应用程序。我的应用程序将(粗略地)获取最近的对象,对其进行处理,然后将其写回同一个存储桶。我需要一种访问 key 和命名新对象的方法,以便应用程序可以轻松获取最新的对象。
我知道我可以通过将元数据放入 SimpleDB 来正确地做到这一点,但我不需要硬一致性。如果应用程序抓取不是最新的对象也没关系。我只需要该应用程序倾向于获取新 key 而不是旧 key 。所以我试图通过单独使用 S3 来保持简单。
有没有办法访问和排序 S3 元数据?或者可能有一种命名对象的方案可以满足我的需要(因为我知道 S3 按字典顺序列出键,而 boto 可以处理分页)。
最佳答案
s3 版本控制在这里真的很有帮助。如果这些真的是相同的“东西”,您可以为您的存储桶启用版本控制,从您的 key 中获取数据,修改它并将其存储回相同的 key 。
你需要使用boto的
bucket.get_all_versions( prefix='yourkeynamehere' )
你得到版本,最新的第一个,所以虽然这个函数不处理分页,你可以只得到第一个索引,你就得到了最新的版本。
如果您想进一步返回并需要分页,boto 还提供了一个 list_versions() 函数,该函数也带有一个前缀,并将为您提供一个结果集,该结果集将遍历所有版本,而您无需担心。
如果这些对象真的不是“同一个”对象,那也没关系,因为 s3 不存储差异——它每次都存储整个对象。如果您有多个“类型”的对象,您可以有多个版本集,您可以从中提取最新的版本集。
我一直在使用版本控制,我对它非常满意。
关于python - 首先获取最新的 S3 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399612/