在数据库事务期间等待另一个进程
Waiting for another process during a DB transaction
我有一个应用程序,它在 AWS S3 中存储文件,在 MySQL 中存储文件元数据。每个操作(上传、更新、删除)通常都需要更新 S3 和数据库。
如何让这样的动作“原子化”?我可以将它包装到数据库事务中,等待 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。
谢谢。
这就是我们所做的(不完全是 S3 和 DB)但是类似的分布式提交:
- 执行 S3 操作
- 数据库事务开始
- 执行数据库操作
- 如果 DB 操作抛出异常,还原* S3 中的操作
- 如果数据库操作成功,提交并完成。
还原 - 可能会涉及一些内容,具体取决于原始操作是插入还是更新。
我有一个应用程序,它在 AWS S3 中存储文件,在 MySQL 中存储文件元数据。每个操作(上传、更新、删除)通常都需要更新 S3 和数据库。
如何让这样的动作“原子化”?我可以将它包装到数据库事务中,等待 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。 谢谢。
这就是我们所做的(不完全是 S3 和 DB)但是类似的分布式提交:
- 执行 S3 操作
- 数据库事务开始
- 执行数据库操作
- 如果 DB 操作抛出异常,还原* S3 中的操作
- 如果数据库操作成功,提交并完成。
还原 - 可能会涉及一些内容,具体取决于原始操作是插入还是更新。