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

2018-05-02 11:02:17 +08:00
 whatisnew

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

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

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

面试官:不对

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

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

我:一脸懵 b 的走了

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

9074 次点击
所在节点    问与答
82 条回复
phpdever
2018-05-02 12:23:48 +08:00
常见数据库有 wal 这种 log 保证先刷 log 顺序到磁盘,然后数据到内存,保证数据不会丢。

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

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

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

仅供参考。
zn
2018-05-02 12:47:13 +08:00
说不断电就可以的,死机了解一下?
myliyifei
2018-05-02 12:51:41 +08:00
@phpdever sap hana 属于哪种 wal
zst
2018-05-02 13:06:08 +08:00
UPS 还可以失火导致自动断电保护呢😂😂😂也不靠谱
herozhang
2018-05-02 13:14:37 +08:00
@zst 上 UPS 的 UPS
ender049
2018-05-02 13:25:35 +08:00
液氮
mengyaoss77
2018-05-02 13:29:28 +08:00
面试官都好有趣啊。
logOo
2018-05-02 13:33:18 +08:00
估计面试官刚被女朋友问过:你会永远爱我么。什么是永远,宇宙毁灭么?
KgM4gLtF0shViDH3
2018-05-02 14:00:48 +08:00
以前遇到过好几个这种问了问题请教下都不回答的。。一般都是向 hr 和同事炫耀自己能问倒面试的人,好像很厉害的样子,呵呵。
l30n
2018-05-02 14:09:40 +08:00
内存计算
tanranran
2018-05-02 14:14:54 +08:00
@7654 膜拜,膜拜,这个月的膝盖献上
Flobit
2018-05-02 14:28:07 +08:00
存区块链上吧
odirus
2018-05-02 14:33:41 +08:00
如果不钻牛角尖的话,所有内容都先写入磁盘(持久化),读取的时候刷新到内存中,即使断电了,重启的时候程序也能自动刷新最新内容到内存中。

不知道是不是想要的方案。
Navee
2018-05-02 15:12:53 +08:00
先写入磁盘再加载到内存
jianzong
2018-05-02 15:17:57 +08:00
mmap
shuax
2018-05-02 15:24:55 +08:00
傲腾内存?
judeng
2018-05-02 15:54:05 +08:00
mram 了解一下?
qf19910623
2018-05-02 15:55:14 +08:00
@odirus 这样已经失去了内存的意义了,直接可以把内存去掉了
sgissb1
2018-05-02 16:27:00 +08:00
傲疼了解一下,热数据永不丢失,冷数据万年找不回(前提是硬盘上没回写)。

内存上数据还不想丢失的话也有一种办法,就是内存和硬盘一起写数据。貌似 n 年前有一些对数据可靠性要求高的在做,比如"事务"这个功能。
lixile
2018-05-02 16:40:52 +08:00
硬件灾备喽 有自带电容和固态的那种内存 断电自动写入。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/451378

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX