Dav*_*itz 6 conditional amazon-s3 amazon-web-services
我有一个系统,可以在其中收到很多消息。每条消息都有一个唯一的 ID,但它也可以在其生命周期内接收更新。由于消息发送和处理之间的时间可能很长(数周),因此它们存储在 S3 中。对于每条消息,只需要最后一个版本。我的问题是,有时同一 id 的两条消息会一起到达,但它们有两个版本(旧的和新的)。
有没有办法让 S3 有一个有条件的 PutObject 请求,我可以在其中声明“除非我在 S3 中有更新版本,否则放置这个对象”?
我这里需要一个原子操作
这不是 S3 的用例,S3 是最终一致的。一些想法:
您可以尝试对消息进行分区 - 所有以 AL 开头的消息都会发送到一个盒子,MZ 会发送到另一个盒子。然后每个框在本地检查是否没有重复项。
您最好的选择可能是某种数据库。根据您的使用案例,您可以使用常规 SQL 数据库,也可以使用简单的仅 RAM 数据库(例如 Redis)。一次写入多个 Redis 数据库以避免 SPOF。
SWF可以为每个项目创建一个唯一的处理队列,但这可能意味着比仅在 S3 中签入更多的 HTTP 请求。
David 关于打开版本控制的想法很有趣。您可以有一个守护进程来定期删除旧版本。阅读时,您必须执行“读取修复”,在其中搜索版本以查找最新对象。
| 归档时间: |
|
| 查看次数: |
4675 次 |
| 最近记录: |