为了账号安全,请及时绑定邮箱和手机立即绑定

程序如何突然终止造成数据丢失

程序如何突然终止造成数据丢失

PHP
狐的传说 2019-03-10 10:08:34
每一次操作之前都会记录日志,防止中断造成数据丢失。操作如下:A 记录日志B redis 计数+1C 清除日志1、如果执行完A中断,启动之后检查日志,可以再次执行操作B,数据不丢失。2、如果执行完b就中断,那么日志恢复之后就会多执行一次b,数据虽然不丢失,但是造成重复数据。题目原本是断电,后来可能都围绕断电回答了,其实断电概率还是挺小的,主要是应用执行的时候突然被用户终止运行,或者程序崩溃等等造成的数据丢失。看评论还有人抬扛的。实际上,很多数据库都有类似的机制防止突然中止造成数据丢失。。1、比如 leveldb :log文件在LevelDb中的主要作用是系统故障恢复时,能够保证不会丢失数据。因为在将记录写入内存的Memtable之前,会先写入Log文件,这样即使系统发生故障,Memtable中的数据没有来得及Dump到磁盘的SSTable文件,LevelDB也可以根据log文件恢复内存的Memtable数据结构内容,不会造成系统丢失数据,在这点上LevelDb和Bigtable是一致的。相关文章:https://www.cnblogs.com/haipp...2、还有elasticsearch:如果没有用 fsync 把数据从文件系统缓存刷(flush)到硬盘,我们不能保证数据在断电甚至是程序正常退出之后依然存在。为了保证 Elasticsearch 的可靠性,需要确保数据变化被持久化到磁盘。相关文章:https://www.elastic.co/guide/...3、还有rabbitmq的防止丢消息和重复消费:相关文章:https://www.jianshu.com/p/5ad...
查看完整描述

3 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

思考了一夜,我发现这个问题无解。
想想为什么要考虑程序频繁挂掉的场景呢?偶尔的断电,小概率数据丢失应该都是可以忍受的。

最重要的是,防止这种事情发生。


查看完整回答
反对 回复 2019-03-10
?
慕森卡

TA贡献1806条经验 获得超8个赞

这不是单单软件该考虑的范畴,你要综合硬件去考虑,如果硬件没有提供支持,软件怎么处理都会有疏漏的,因为这是个意外情况。

通常机房都会提供断电后的临时供电来保证你有处理数据的时间,单个主机也可以通过加TPS来保证。


查看完整回答
反对 回复 2019-03-10
  • 3 回答
  • 0 关注
  • 666 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信