坚持思考,就会很酷

存储介质的进化

很久以前,祖先把甲骨文写在骨头之上,骨头保存持久,但是制作困难,后来把文字写在竹简、纸上。


文字是信息,纸张、竹简、石头是介质,虽然它们比骨头不易保存,但是制作简单,更容易扩散。

存储介质在进化,信息形式也在变化!世界万物的信息在数字化,数字化的信息可以存储到磁学设备、光学设备、电子设备上。比如软盘,光盘,硬盘,磁带,固态硬盘,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 的校验数据,着实浪费。



更好的算法

怎么选一个好的算法来计算校验码?一般决策者会从多个维度考虑

  1. 计算速率

  2. 资源消耗

  3. 结果冲突率

  4. 校验结果的冗余度

一个完美的校验算法应该是:计算尽可能快,资源消耗尽可能少,冲突率仅可能小,冗余度要尽可能小。

想的美!

这是一个典型的既让马儿跑,又不想让马儿吃草的例子。

这些维度都是在相互拉锯的,想要更快,消耗可能就会多,想要冲突率少,计算出来的校验值可能冗余占用就大。

奇伢给不了标准答案,具体情况具体分析!不过有些最常见的 crc32 ,md5 等算法可以满足大部分场景需求。

还记得开源项目下载文件的时候,有个对应 md5 值吗?

那就是防串改,校验文件是否损坏用的。

冗余是唯一的出路

数据可以坏,但不可以假,这是和单机存储引擎的约定。但是数据可靠性怎么保证?这个问题依然要解决。

冗余分身是唯一奥秘。

数据可靠性是一个系统工程,单点引擎无法彻底解决,单点存储引擎能保证只给真数据不给假数据,然后通过分布式的冗余,来保证整个系统数据对外的高可靠。




总结

最后奇伢总结几个基本要点:

  1. 对于单机引擎来讲,数据可以坏,但不可给假的数据出去,这是底线

  2. 系统的可靠性是系统多组件配合打造的,核心方法是数据冗余;

  3. 校验数据也要考虑成本和效率;

聊聊底线 | 坏数据与假数据相关推荐

  1. [贝聊科技]如何在iOS开发中更好的做假数据?

    当工期比较紧的时候,项目开发中会经常出现移动端等待后端接口数据的情形,不但耽误项目进度,更让人有种无奈的绝望.所以在开发中,我们常常自己做些假数据,以方便开发和UI调试.然而做假数据方法不同,效率和安 ...

  2. java自制SQL假数据生成器

    引言 由于平常一条一条数据插入表中,实在是太过麻烦,所以我用java语言写了一个简单的sql假数据生成器,可以生成简单的SQL插入语句. 一.java代码 1.1 autoStringUtil 类 i ...

  3. 如何为你的测试环境添加假数据

    如果你出去面试,无论你是干前端后端还是做算法数据的,必有一道开发性问题不厌其烦地在等着你: 你在工作中遇到过什么难题? 而我在开发过程中,并且长时间地都面对着两个难题: 如何给变量起名字 如何给测试环 ...

  4. 大批量生成假数据,faker.js获得近28k个Star

    整理 | 夕颜 图源 | 视觉中国 来源 | CSDN(ID:CSDNnews) 近日,GitHub上一个生成假数据的项目faker.js火了,攀升Trendinging榜单第二,标星目前已超过27. ...

  5. Bootstrap4+MySQL前后端综合实训-Day08-AM【多表查询sql语句、关联数据的假删除、自动增长主键的获取、栏目管理“数据编辑”按钮的实现】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目   录 多表查询sql语句 关联数据的假删除(status状态码/数据可恢 ...

  6. create-react-app项目使用假数据

    做新项目的时候,前端每次要等后端接口准备好再开始,就会延期,等后端接口准备好了,前端这边的项目又会相互紧张,如果前端跟后端同时进行,前期将框架,基础做好,定好接口文档,前端在后端没准备好接口的时候使用 ...

  7. faker.js 登 GitHub 趋势榜标星 27.1k,可大批量生成假数据!

    整理 | 夕颜 图源 | 视觉中国 出品 | CSDN(ID:CSDNnews) 近日,GitHub上一个生成假数据的项目faker.js火了,攀升Trendinging榜单第二,标星目前已超过27. ...

  8. faker假数据php,Faker首页、文档和下载 - 生成假数据的 PHP 库

    Faker 是一个为你生成假数据的PHP库.当你需要填充一个测试数据库,或为你的web应用生成测试数据时,它能派上用场. 示例代码: // require the Faker autoloader r ...

  9. Yii2 使用 faker 生成假数据(转)

    测试过程中有时候需要生成大量的假数据,faker 是一个生成假数据的类库,可以生成姓名,电话,IP地址,密码,ISBN等等你能想到的或者你想不到的各种类型的假数据. Yii2.0已经集成该类库,不用再 ...

最新文章

  1. java程序设计_Java程序设计:学习笔记(4-5)(未完工)
  2. 开始整SWF文字高亮显示——第一步:解析PDFToFlex源文件(修改补充版)
  3. [LeetCode] Factorial Trailing Zeroes
  4. WinForm 程序的界面多语言切换
  5. Java内存泄露的理解与解决
  6. PTA数组作业一查找整数
  7. md5生成一个加盐程序c语言,MD5在编程中的实现 (C语言)
  8. 个人项目:wc程序(java)
  9. Bootstrap Magic – 轻松创建自己的 Bootstrap 主题
  10. 别停特斯拉旁边!特斯拉车辆自燃全车烧毁 连旁边的奥迪都没放过...
  11. 软件工程 speedsnail 第二次冲刺1次
  12. 【转】【OPenGL】OPenGL 画图板-- 中点算法画圆
  13. 固态硬盘在IDE、AHCI模式下的速度对比
  14. 数据库系统是由那些组成的?
  15. github WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  16. cadence学习笔记 从ultra librarain网站下载封装并生成封装文件
  17. C语言打开微信提示找不到文件,电脑提示系统找不到指定文件怎么办?
  18. 技术知识库——C1见习能力认证(应用软件开发的基础知识)
  19. Android移动应用ALL IN ONE架构衍变
  20. 研报网站waitu.com介绍

热门文章

  1. KWrite 和 Kate 在 Linux 上的应用
  2. 同学Linux,同成长
  3. 7/15 我的第一篇博客-写给自己
  4. zynq tcp如何从网口发数据_ZYNQ_PL与PS的DDR交互
  5. UVA1364 Knights of the Round Table(双连通分量、二分图染色,超详细解释)
  6. luogu P6113 【模板】一般图最大匹配(带花树)
  7. 解题报告:luogu P4180 [BJWC2010]严格次小生成树(次小生成树、倍增LCA优化、O(mlogn) )
  8. 从两个bug来看Javascript的装载
  9. 在NodeJS中操作文件常见的API
  10. 安卓绿色联盟两项免费福利重磅发布:EMUI9.0和绿色应用2.0测试能力