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

每一次操作之前都会记录日志,防止中断造成数据丢失。

操作如下:
A 记录日志
B redis 计数+1
C 清除日志

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...


aluckdog
浏览 653回答 2
2回答

哆啦的时光机

思考了一夜,我发现这个问题无解。想想为什么要考虑程序频繁挂掉的场景呢?偶尔的断电,小概率数据丢失应该都是可以忍受的。最重要的是,防止这种事情发生。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Node.js