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

2019-06-25  本文已影响0人  光小月

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: 若你觉得可以、还行、过得去、甚至不太差的话,可以“关注”或者“点赞”一下,就此谢过!

上一篇下一篇

猜你喜欢

热点阅读