我有一个应用程序,它在AWS S3中存储文件,在MySQL中存储文件元数据。每个操作(上传,更新,删除)通常都需要更新S3和DB。
如何使这种行为成为“原子”?我可以将它包装到数据库事务中,这将等到S3操作完成吗? 例如:
DB transaction start
Make an S3 action (can take a few seconds)
Make a DB action(s)
DB transaction commit
目前我从数据库事务中调用S3操作,因为我倾向于保持数据库事务尽可能短,这样它们就不会锁定数据库,这当然会使数据库中的潜在数据不一致。数据库操作不成功。
你会推荐什么?我可以使用建议的方法还是有其他方法可以做到这一点?我正在考虑XA交易,AWS队列;我试图做一些研究,但令人惊讶的是没有找到任何有用的东西。
我的服务器端技术是php。 谢谢。
答案 0 :(得分:0)
这就是我们所做的(不完全是S3和DB),而是类似的分布式提交:
还原 - 可能有点牵连,具体取决于原始操作是插入还是更新。