同时写文件和数据库,如何保证数据一致性?

1.计算文件 md5 ;
2.记日志(比如某张表中插入一条记录包含 md5, filepath ;或者日志文件 -> md5 为文件名,内容 filepath );

  1. 写文件;
  2. 写文件成功后写表;
  3. 如果 2 个写都成功或者任意一个不成功则删除日志。
  4. 系统恢复或者重启后检查日志,如果文件 md5 值不匹配认为则删除脏数据,若匹配则跳转到第 4 步或者跳转到第 5 步。

----优化

  1. 计算文件的md5
  2. 记录操作日志,比如这条记录的信息,包括文件的md5, filename, filePath, meta信息
  3. 开始写入数据库,先记录入库的日志,写入数据库中,利用数据库的事物保证写入成功,失败记录失败日志
  4. 开始写入文件,先记录写文件日志,在写入文件,更具md5值,从mongodb中查询对应的数据,如果有删除,排除中断上传的问题,重新上传, 失败重试,记录写入重试次数,败次数超过5次,写入失败日志
  5. 成功之后,返回主程序,记录日志。

思考:
考虑到zookeeper的数据一致性原理,有个机制是3PC, paxos算法
leader 选举,server 接受leader 的 事务请求,给予响应,leader 接收到大多数的成功响应,再次给server发送事物提交请求,同时告诉client,事物ok

这是对多节点的一个事物操作,而题目是对单节点的一个事物的操作,事物分为多个步骤。

PS: 若你觉得可以、还行、过得去、甚至不太差的话,可以“关注”或者“点赞”一下,就此谢过!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容