聊聊底线 | 坏数据与假数据
时间:2021-09-17 15:35:48
手机看文章
扫描二维码
随时随地手机看文章
[导读]坚持思考,就会很酷存储介质的进化很久以前,祖先把甲骨文写在骨头之上,骨头保存持久,但是制作困难,后来把文字写在竹简、纸上。文字是信息,纸张、竹简、石头是介质,虽然它们比骨头不易保存,但是制作简单,更容易扩散。存储介质在进化,信息形式也在变化!世界万物的信息在数字化,数字化的信息可...
坚持思考,就会很酷
存储介质的进化
很久以前,祖先把甲骨文写在骨头之上,骨头保存持久,但是制作困难,后来把文字写在竹简、纸上。文字是信息,纸张、竹简、石头是介质,虽然它们比骨头不易保存,但是制作简单,更容易扩散。存储介质在进化,信息形式也在变化!世界万物的信息在数字化,数字化的信息可以存储到磁学设备、光学设备、电子设备上。比如软盘,光盘,硬盘,磁带,固态硬盘,PCIE盘等介质上。物理的介质在不断的变化,有效信息容量越来越大,物理体积越来越小。
世界太危险
存储的介质在变化,体积越来越小,容量越来越大。唯一不变的是:无论多好的介质总是会腐朽,只要他存在于现实,东西变坏不以个人意志为转移。
最关键的是:这是个危机四伏的世界!奇伢见过
背锅侠:哎呀,我运维操作不当,vim 进去,改了一个字节。没事吧?老板:没事,你去财务结一下工资。还见过
硬盘:哎呀,上年纪了,我比特反转了,好像瓦特了。梦见过(新闻见过):
天灾,被雷劈了,被水淹。更可怕的是:总有刁民想害朕。
黑客:我是黑客,为彰显技术实力,我要搞坏他。对于存在盘上的数据来说,这么危险,怎么办?
这么危险,可怎么办?
它被有意修改,任何介质都可能坏。既然改变不了,那么只能忍受它。
存进去是 1 ,取出来是 2。这,你还要吗?当然不能要!那我还有底线吗?有!我可以忍受你变坏,但是不能忍受你的假。就跟爱情一样,不爱了,直说。着急赶着去找下一个备胎,不要假冒,拜拜就拜拜,下一个更乖。数据坏了就说坏了,别耽误事!
怎么证明自己是自己
怎么才能证明数据好坏呢,要有第三方证人才行。怎么证明你是你?
谁来证明?别人。我们数据也是类似,数据存储的时候,要多存一些见证的东西,能够证明你好坏的东西。这个证明叫做校验码。然而没有免费的午餐,这些额外的东西是有代价的。需要更多的存储空间,需要多余的计算时间。
怎么解决?
自校验!
奇伢突然来了灵感,创造了一个“伢式算法”,每 8 字节数据对应生成 1 个字节的校验。这个 nb 算法就是:
p = x % 8
(嘿嘿,其实就是除余算法):- 用户数据 1, 1 % 8 = 1,校验码则是 1 。
- 用户数据 2, 2 % 8 = 2,校验码则是 2 。
1 % 8 = 1
9 % 8 = 1
17 % 8 = 1
这种叫做冲突,并且冲突率肉眼可见的大呀,每 8 个数字就有循环重复。如果数据是 1 变成 9 呢?那你还知道数据是坏的吗?答案是:不能。并且还有个问题:冗余数据太多了。每 8 个字节,1个校验数据。那 8T 的数据,就有 1T 的校验数据,着实浪费。更好的算法怎么选一个好的算法来计算校验码?一般决策者会从多个维度考虑:
- 计算速率
- 资源消耗
- 结果冲突率
- 校验结果的冗余度
冗余是唯一的出路
数据可以坏,但不可以假,这是和单机存储引擎的约定。但是数据可靠性怎么保证?这个问题依然要解决。
冗余分身是唯一奥秘。数据可靠性是一个系统工程,单点引擎无法彻底解决,单点存储引擎能保证只给真数据不给假数据,然后通过分布式的冗余,来保证整个系统数据对外的高可靠。总结
最后奇伢总结几个基本要点:
- 对于单机引擎来讲,数据可以坏,但不可给假的数据出去,这是底线;
- 系统的可靠性是系统多组件配合打造的,核心方法是数据冗余;
- 校验数据也要考虑成本和效率;