存储(一)—— 序言

起源

这里的存储不是指传统意义上的“储藏”,比如存粮食,秋收冬藏,确切点说,“记录”这个词更确切一些。
最早的存储,可以追溯到文字的出现。文字出现前,信息只能口口相传,流失和误传是常事。文字出现后,一切都改变了,其身既没,其言尚存,从此,一代一代人总可以站在前辈们的肩膀上继续发展,死亡再也无法阻止人类文明的进步。
额,扯远了。
刻在石头上,刻在竹简上,写在纸上,写到磁带上,写到磁盘上,写到。。。
人的记忆是有限的,人是会忘记的,于是,文字成了人类记忆的编码,而存储介质则成为了人类记忆的延伸。

存储的本质

《三体》名言:“把字刻在石头上”。
把信息刻在不易丢失的介质上,以此来保存信息。
石头,竹简,纸张,这些都很明显,可是,磁盘呢?和前面这些有啥共同点?为什么能保证不丢失呢?
我们仔细想想,字刻在石头和竹简上,其实是通过刻痕来标识信息的,这里有个很重要的前提,就是得使刻痕可以被“识别”出来,所以用来刻字的石头都是表面平滑的,竹简本身也是平滑的,这样才能使刻痕别很容易的识别出来。比如你不能在一个满是沟壑的石头上刻字,也不能在一张黑纸上用黑笔写字。
信息不过是各种刻痕(笔划)的组合。
磁盘呢?
磁盘也是如此。
石头是通过刻痕来标识,磁盘则是通过磁极(磁盘表面有很多小磁针)来标识信息。而磁和电之间的感应可以用来改变小磁针的磁极,简直完美。
磁极只有南北,你可以类比为笔划(刻痕)只有横竖。只有横竖当然不能写出很多字,但是却可以表示很多字。
怎么表示?
且看编码。

编码

《道德经》有言,道生一,一生二,二生三,三生万物。老子的话总是对的,哈哈。
想想我们只有横竖(磁极只有南北),怎么表示“计算机”这个词呢?
我们都知道,一横一竖可以表示“十”,想想为啥?因为发明汉子的前辈就是这么规定的:“一横一竖表示十”,后人莫敢不服。。。
所以,我们可以指定自己的规则:

  1. 三横表示“计”
  2. 三竖表示"算"
  3. 三横三竖表示“机”
    那么计算机可以表示为“---|||---|||”。
    这不就是太极、两仪、四象、八卦么!
    所以,磁盘上小磁针的南北两极自然也可以用来表示世间一切信息。
    比如,南极表示阿拉伯数字0,北极表示阿拉伯数字1。
    有了0和1这两个比特,剩下的事情,大家都懂的。
    存是存上了,怎么找出自己想要的东西呢?

索引

找出自己想要的东西并不难,难的是从大量自己不想要的信息中飞快的找出自己想要的东西。
好比去图书馆找一本书,图书检索系统总会告诉我们要找的书在哪个区的第几排书架的第几层上。
这个帮我们快速找到信息的东西就是索引了。
再来回忆一下我们是怎样在词典中查找一个单词的,就比如hello吧,
先从目录(索引)中找H,翻开目录,第一个是A,直接往后跳过几页,发现此时字母是K,再往回翻几页,发现是G,再往后翻,找到H了。
大多数人在不知不觉中执行了一个标准的二分查找过程。
但是,如果你拿到一本奇葩的词典,目录并不是按照ABCDE的字典序排列的,而是按照作者的心情随机排列的,那你只能从第一页一页一页往后翻,知道遇到H为止,运气不好的话,你可能会翻到目录的最后一页才遇到H。二者,这是一个标准的遍历过程。
得益于目录中的有序,我们才得以实施二分查找,把时间复杂度从遍历的O(n)降低到O(lgn);
自然界中最基本的两种算法是排序和查找,而查找大多数情况下是依赖排序的。

索引一定要有吗?设想你又拿到一本更加奇葩的词典,整本词典只有两个单词:hello 和 world
这时显然没有必要再去浪费纸张和油墨去加一个目录进去了。

以上道理,在各种数据库中都是通用的。

后续

既然标题是序,表示这是一个系列,大致目录如下:
imagepng


我有一壶酒,
足以慰风尘。
尽倾江海里,
赠饮天下人。