whatisnew
V2EX  ›  问与答

如何保证内存里的数据永不丢失?

  •  
  •   whatisnew · May 2, 2018 · 10740 views
    This topic created in 3108 days ago, the information mentioned may be changed or developed.

    看到有 v 友分享面试经历,我想起来几年面试的时候遇到的一个问题,至今还没有解答:

    面试官:如何保证内存里的数据永不丢失,包括断电的时候。

    我:数据持久化、分布式,配合硬件上的灾备支持。

    面试官:不对

    我:那有什么好方法分享一下吗

    面试官:我就不跟你多说了,你回去了解一下

    我:一脸懵 b 的走了

    至今还是没有明白这个问题到底是啥情况,真的有更优雅的解决方案吗。。。

    82 replies  •  2018-05-03 09:51:27 +08:00
    ballshapesdsd
    ballshapesdsd
    May 2, 2018
    1
    ups
    windfarer
    windfarer
    May 2, 2018❤️2
    2
    刻在石头上
    whatisnew
    whatisnew
    OP
    May 2, 2018
    3
    @ballshapesdsd 硬件上的灾备支持就包括 ups 啊
    Yanickkk
    Yanickkk
    May 2, 2018
    4
    我猜是想问 Redis 的 aof 和 rdb
    whatisnew
    whatisnew
    OP
    May 2, 2018
    5
    @yannxia aof 和 rdb 不就是数据持久化吗
    BOYPT
    BOYPT
    May 2, 2018
    6
    只要保证电源永远不断就可以
    SuperMild
    SuperMild
    May 2, 2018
    7
    内存,一般是指断电就丢失数据的快速存储器,根据定义可见要使内存数据不丢失,只有防止断电才能做到。莫非这个面试官说的内存不是这种内存?
    realityone
    realityone
    May 2, 2018
    8
    你和他讨论 ROM 算不算内存
    lance7in
    lance7in
    May 2, 2018
    9
    只要断电的时间足够段,电源里电容存的电还是可以撑过去的
    7654
    7654
    May 2, 2018❤️3
    10
    我们机房的 UPS 可以保证所有服务器及空调满负荷工作 4 小时,楼顶还有 3 台 120KW 柴油发电机,还有地底的油库

    而我们只是一个小公司
    whatisnew
    whatisnew
    OP
    May 2, 2018
    11
    @lance7in 硬件上的灾备支持就包括使用超级电容
    sbbeta
    sbbeta
    May 2, 2018 via Android
    12
    @realityone 哈哈!想起以前有人说手机有 64G 内存
    RHFS
    RHFS
    May 2, 2018 via iPhone
    13
    @sbbeta 叫 64g 内存也没什么不对 存储内存也是内存
    WispZhan
    WispZhan
    May 2, 2018
    14
    你要反问面试官,Flash 闪存分哪几类。
    RHFS
    RHFS
    May 2, 2018 via iPhone
    15
    我猜面试官 想告诉你 用网盘
    fffflyfish
    fffflyfish
    May 2, 2018❤️1
    16
    换那种非易失存储的内存,比如 MRAM 这种用磁性介质存储的内存条呗
    jason19659
    jason19659
    May 2, 2018
    17
    用硬盘当内存
    MonoLogueChi
    MonoLogueChi
    May 2, 2018 via Android
    18
    感觉应该是保证不断电吧,内存数据要和硬盘同步的话,就失去了速度优势了。难道现在真的有这种技术了吗
    Shura
    Shura
    May 2, 2018
    19
    用相变内存啊,非易失 RAM。
    otakustay
    otakustay
    May 2, 2018
    20
    我也想知道,这样我就弄个好主板插 256G 内存不买硬盘了
    phpdever
    phpdever
    May 2, 2018❤️2
    21
    常见数据库有 wal 这种 log 保证先刷 log 顺序到磁盘,然后数据到内存,保证数据不会丢。

    内存数据 dump 磁盘在删除 log。但是实际工作经验显示,wal 可能不一定有效,因为你刷 wal log 可能为了吞吐而让刷 log 做那种批量之类的刷,数据也会内存有,掉电的话还是会丢数据,除非你愿意牺牲吞吐(也有业务这么做)。

    还有一种就是你拿钱去换数据可靠性,直接数据写 nvme 介质。

    这种介质内部有一个自己的电源的东西保证数据不易失,但是这个没有用过,也就是论文里面看过,有学术界玩过。

    仅供参考。
    zn
    zn
    May 2, 2018 via iPhone❤️1
    22
    说不断电就可以的,死机了解一下?
    myliyifei
    myliyifei
    May 2, 2018 via Android❤️1
    23
    @phpdever sap hana 属于哪种 wal
    angles6645
    angles6645
    May 2, 2018 via Android
    24
    UPS 还可以失火导致自动断电保护呢😂😂😂也不靠谱
    herozhang
    herozhang
    May 2, 2018
    25
    @zst 上 UPS 的 UPS
    Felvrek
    Felvrek
    May 2, 2018
    26
    液氮
    mengyaoss77
    mengyaoss77
    May 2, 2018 via Android
    27
    面试官都好有趣啊。
    logOo
    logOo
    May 2, 2018❤️7
    28
    估计面试官刚被女朋友问过:你会永远爱我么。什么是永远,宇宙毁灭么?
    KgM4gLtF0shViDH3
    KgM4gLtF0shViDH3
    May 2, 2018
    29
    以前遇到过好几个这种问了问题请教下都不回答的。。一般都是向 hr 和同事炫耀自己能问倒面试的人,好像很厉害的样子,呵呵。
    l30n
    l30n
    May 2, 2018 via Android
    30
    内存计算
    ByteRan
    ByteRan
    May 2, 2018
    31
    @7654 膜拜,膜拜,这个月的膝盖献上
    YanSep
    YanSep
    May 2, 2018 via Android
    32
    存区块链上吧
    odirus
    odirus
    May 2, 2018
    33
    如果不钻牛角尖的话,所有内容都先写入磁盘(持久化),读取的时候刷新到内存中,即使断电了,重启的时候程序也能自动刷新最新内容到内存中。

    不知道是不是想要的方案。
    Navee
    Navee
    May 2, 2018
    34
    先写入磁盘再加载到内存
    jianzong
    jianzong
    May 2, 2018
    35
    mmap
    momo1999
    momo1999
    May 2, 2018
    36
    傲腾内存?
    judeng
    judeng
    May 2, 2018
    37
    mram 了解一下?
    qf19910623
    qf19910623
    May 2, 2018
    38
    @odirus 这样已经失去了内存的意义了,直接可以把内存去掉了
    sgissb1
    sgissb1
    May 2, 2018
    39
    傲疼了解一下,热数据永不丢失,冷数据万年找不回(前提是硬盘上没回写)。

    内存上数据还不想丢失的话也有一种办法,就是内存和硬盘一起写数据。貌似 n 年前有一些对数据可靠性要求高的在做,比如"事务"这个功能。
    lixile
    lixile
    May 2, 2018
    40
    硬件灾备喽 有自带电容和固态的那种内存 断电自动写入。。
    sampeng
    sampeng
    May 2, 2018
    41
    除了硬件容灾,真想不到有什么着了。所以的一切都是建立在物理介质上备份的。压根和内存的本身定义就没有什么关系。不管是断电自动写入还是 log flush 到某个地方防止断电丢失。

    难道面试官的 G 点是 mmap ?也不像啊。。。。只能说。很有趣的面试官
    recordnow
    recordnow
    May 2, 2018❤️1
    42
    对面试官使用激将法
    脸上略带嘲讽:哦,原来你也不知道。不错喔,你很因脆丝汀。
    eurokingbai2
    eurokingbai2
    May 2, 2018
    43
    不就是 nvm 么。。
    limbo0
    limbo0
    May 2, 2018
    44
    这个面试官有点叼, 我去买橘子
    chentydev
    chentydev
    May 2, 2018
    45
    这题目本身就有问题。
    根本不存在“永不丢失”的数据。最极端的情况,宇宙炸了,数据还能不丢失吗?实际能做到的只能是尽可能减小数据丢失的可能性。
    从这个角度来看,要么就承认 LZ “数据持久化、分布式,配合硬件上的灾备支持”的答案是合格的,要么就只能承认自己提的问题本身无解了。
    sumu
    sumu
    May 2, 2018
    46
    在一个不完美的基础上构建一个,比如 5 个 9,或者 6 个 9 系统,是可以的,但构建一个 100%可靠的?我估计他没学过概率
    cabing
    cabing
    May 2, 2018
    47
    哪有绝对的不丢失。。一般的都是磁盘持久化,分布式,多机房备份~~
    whatisnew
    whatisnew
    OP
    May 2, 2018
    48
    @chentydev 我当时就想跟面试官说这世界上没有 100%保证的事,但是我看他好像并不想知道。。。
    whatisnew
    whatisnew
    OP
    May 2, 2018
    49
    @chentydev 而且还想引用支付宝机房停电的事例,但是从面试官的表情上感觉他好像并不想知道。。。
    360045
    360045
    May 2, 2018
    50
    根据能量守恒定律,这些数据本身就不会消失啊,就算上面说的炸了也不会消失,只是换了另外一种形式存在,手动滑稽
    swulling
    swulling
    May 2, 2018
    51
    @7654 那也不能保证永不丢失,机房进水了解下,机房爆炸了解下,机房被雷劈了了解下。
    leeg810312
    leeg810312
    May 2, 2018 via Android
    52
    遇到这种装 b 面试官,直接嘲讽怼,反正肯定不会要你了,不要让自己不爽
    GjriFeu
    GjriFeu
    May 2, 2018
    53
    persistent memory 了解一下
    zj299792458
    zj299792458
    May 2, 2018 via iPhone
    54
    @7654 在美国?
    yufz
    yufz
    May 2, 2018
    55
    nvram?
    iceheart
    iceheart
    May 2, 2018 via Android
    56
    他是想问 filemapping 吧?
    jetyang
    jetyang
    May 2, 2018
    57
    有时候就这样,面试官想要的点候选人总是 get 不到,只能说这个问题设计的不好。启发式的发问最好,有个背景有个一般的方案,候选人在面试官的引导下逐步优化,再考察一下边界情况。题主说的这个题,双方没想到一起就尴尬了,面试官也不好据此判断候选人的能力,只好换题
    pkookp8
    pkookp8
    May 2, 2018 via Android
    58
    硬盘读写多了费硬盘费时间
    硬盘读少了丢数据

    看取舍吧,像 word 这种 1 分钟保存一次也没事
    内存又叫易失性存储器,不易失请用 rom
    murmur
    murmur
    May 2, 2018
    59
    @7654 什么机房的 ups 能撑 4 个小时
    nov11
    nov11
    May 2, 2018
    60
    non-volatile memory?
    metrotiger
    metrotiger
    May 2, 2018
    61
    Sir, PLS define internal memory.
    amai
    amai
    May 2, 2018
    62
    非易失内存, 铁电,还是有不少选择的
    nvram,fram
    注意咬字,内存和掉电,上面说 ups,后背什么的,异地什么的,都咬的不紧 ups 哪么还是没掉电,后背也是,异地 哪么内存数据还是丢了。
    办法很多,选择也很多,问这问题的得看什么样的人和什么样的事,关乎底层和硬件的还说的过去
    如果不是,几句话答回去就把天聊死了,面试聊天是门学问,答上来还得把台阶给上。
    amai
    amai
    May 2, 2018
    63
    其实 x - p 也可以,这个在用法上天然有优势
    还有面试问 coms 工艺的呢,这你怎么回答?不知道哪想出来的,回答完基本上都挺尴尬的
    yangqi
    yangqi
    May 2, 2018
    64
    @qf19910623 #38 并没完全失去意义,这种情况内存相当于缓存
    saybye
    saybye
    May 2, 2018
    65
    ups 撑四个小时?
    lalala121
    lalala121
    May 2, 2018
    66
    哈哈哈哈,你这么一说我想起来刚工作的时候面试,那人问我知道什么 http 方法,我说 get,post,head,然后就不知道了,那时候还不知道 put,delete 这些,然后面试官跟我说,你说的这些我们线上都没法用,安全性太差,后来我也是想了好久,应该用啥呢
    yangqi
    yangqi
    May 2, 2018
    67
    这种面试官“我就不和你多说了”,一般潜台词要么是他也不知道,要么他这个问题问的不严谨,经不起推敲,所以含糊其辞。
    wdlth
    wdlth
    May 2, 2018
    68
    接下来还有问:
    包括内存坏的时候?
    包括持久化存储坏的时候?
    包括脑子不好使的时候?
    twl007
    twl007
    May 2, 2018 via iPhone
    70
    前几年 Google 机房断电 也丢了数据了,怎么可能不丢……
    prolic
    prolic
    May 2, 2018 via Android
    71
    怕不是脑筋急转弯
    Marble
    Marble
    May 2, 2018 via Android
    72
    never say never
    roychan
    roychan
    May 3, 2018
    73
    非易失存储器了解一下
    SuperMild
    SuperMild
    May 3, 2018
    74
    非易失存储器是方案之一,但面试官遮遮掩掩是什么意思,就一句话的事情装什么高深呢,很不尊重人啊。而且,非易失存储器只是方案之一,有很多缺点,并不见得就一定比 ups 好,凭什么搞得好像标准答案似的。
    watzds
    watzds
    May 3, 2018 via Android
    75
    只存 NULL 就可以做到,write NULLl , read NULL.
    zlhsvc
    zlhsvc
    May 3, 2018
    76
    面试官会告诉你保存在硬盘上
    eric227
    eric227
    May 3, 2018
    77
    永不丢失?那就是在无穷多的地方备份呗
    mydns
    mydns
    May 3, 2018
    78
    你猜猜猜
    ihjk
    ihjk
    May 3, 2018
    79
    区块链 无耻滑稽
    fiht
    fiht
    May 3, 2018
    80
    我觉得,遇到这种问题不要慌,具体到具体问题的话就好解决了,比如说:
    “如何保证内存里的数据永不丢失,包括断电的时候。” 我觉得这个用 Redis 最好表述了。
    “呀,您这个问题问得好,我们之前考虑过,我们之前用的是 Redis 做的 xxxx,这个 Redis 就是完全 in-memory 的,也就是说掉电之后就会消失,Redis 官方的解决方案是定期把内存中的数据持久化到硬盘上去。但是这个还是有问题滴,比如讲来没来得及持久化就 Duang 机的话数据也存不下来,我们是搞了一个 Redis 集群,master 挂了 slave 变成 slave,单机 Duang 机我们的数据也是不丢失的,如果要再加强的话,可以在多个地方起 slave 做备份节点,保证数据安全。”
    xman99
    xman99
    May 3, 2018
    81
    把数据多写几份, 先保证把固态写入后再写入内存, 然后固态做几份备份。这种方式可以吗
    extreme
    extreme
    May 3, 2018
    82
    @xman99 问题是,你调用 write()写到硬盘,难道可以跳过内存?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1388 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 225ms · UTC 20:18 · PVG 04:18 · LAX 12:18 · JFK 15:18
    ♥ Do have faith in what you're doing.