我有一个系统,我收到很多消息。每条消息都有一个唯一的ID,但它也可以在其生命周期内接收更新。由于消息发送和处理之间的时间可能很长(几周),因此它们存储在S3中。对于每条消息,只需要最后一个版本。我的问题是偶尔有两个相同id的消息一起到达,但它们有两个版本(旧版本和更新版本)。
S3是否有办法让条件PutObject请求我可以声明"放置此对象,除非我在S3&#34中有更新的版本;?
答案 0 :(得分:2)
我需要一个原子操作
这不是S3的用例,最终是一致的。一些想法:
您可以尝试对邮件进行分区 - 所有以A-L开头的邮件都转到一个框,M-Z转到另一个框。然后每个框在本地检查没有重复。
你最好的选择可能是某种数据库。根据您的使用情况,您可以使用常规SQL数据库,也可以使用像Redis这样的简单RAM数据库。一次写入多个Redis DB以避免SPOF。
有SWF可以为每个项目创建一个唯一的处理队列,但这可能意味着更多的HTTP请求,而不仅仅是检查S3。
David关于启用版本控制的想法很有意思。你可以有一个守护进程,定期修剪旧版本。在阅读时,您必须执行“读取修复”,搜索寻找最新对象的版本。
答案 1 :(得分:0)
这不能通过使用标签来解决,并在使用 PutObject 时使用条件吗?请参阅此处的“示例 3:允许用户添加包含特定标签键和值的对象标签”:https://docs.aws.amazon.com/AmazonS3/latest/dev/object-tagging.html#tagging-and-policies