保存文件和提交数据库的问题

需要将文件保存到本地,并把这条文件记录提交到数据库

假设因为某种情况代码未执行完,比如断电了,而文件已经保存到本地,文件记录却未提交到数据库,这样保存的文件就是作废的了。如何解决这种问题?

阅读 2.5k
3 个回答

把文件操作放在事务的最后面,如果数据操作失败,文件操作自然不执行,如果文件操作失败,抛异常,回滚事务. 还有,断电是什么操作。

保存数据到文件保存数据到数据库是两个操作, 这两个操作在同一个事务中: 保存数据. 这里涉及到事务中的故障恢复的概念. 手动实现的话, 需要将事务执行状态持久化, 例如:

  1. 保存数据到文件成功
  2. 保存数据到数据库成功

这个状态必须能够在掉电后恢复. 可以选择将状态存到某个文件中.

如果只执行了1, 而2未执行, 那么需要把文件中的数据读出来, 继续执行2.

数据库可以创建两张表记录两个状态:
第一张表记录将文件保存到本地的状态
第二张表记录录将文件记录上传到数据库状态
再定期去对比一下两个表,有不一致的情况继续下一步处理

推荐问题