在数据库事务期间等待另一个进程

时间:2015-02-19 09:11:02

标签: mysql database amazon-web-services transactions

我有一个应用程序,它在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。 谢谢。

1 个答案:

答案 0 :(得分:0)

这就是我们所做的(不完全是S3和DB),而是类似的分布式提交:

  • 制作S3动作
  • 数据库交易开始
  • 执行数据库操作
    • 如果DB Action抛出异常,则还原* S3中的操作
    • 如果数据库操作成功,则提交并完成。

还原 - 可能有点牵连,具体取决于原始操作是插入还是更新。