账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    程序如何突然终止造成数据丢失
    67
    0

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

    操作如下:
    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...

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部