缓存是每个程序员所熟知的,相信大家对缓存都已经不陌生了,缓存使用传输更快的介质来存储更加频繁读写的数据。在程序员面试中,我们常常会这样回答,因为硬盘的读写速度太慢,事实真的是如此么?
虽然现在已经又SSD硬盘,但是由于SSD硬盘价格昂贵,在服务器领域,机械硬盘还是横行霸道,所以,今天我们讨论的,是机械硬盘。这十几年来,硬盘的容量已经翻了好几番,我记得我读书那会,能够配一个128G的硬盘已经非常奢侈了,而今天,家用的电脑基本都是TB级别起步的了。但是硬盘的读写速度并没有多大的提升,这很大程度是与硬盘的结构息息相关的。在一个机械硬盘里面,要完成数据读写,需要经历这三步:寻道、旋转、数据读取。
寻道
我们的机械硬盘,就像一个大圆饼一样,数据是一圈一圈地存在,读取数据地时候,需要将探头旋转到对应的磁道,这是一个机械运动的过程,尽管现在的探头越来越精致,速度越来越快,学过物理的同学都知道,从静止的物体运动起来跟加速度这些都有关系,考虑到探头的耐用性,无法太快,现在的大部分磁盘寻道时间都要花2ms到15ms。
旋转
当我们把探头调整到对应磁道之后,还需要去对应的地方去获取数据。我们的每一个磁道的数据都是一个大圆圈,所以需要旋转硬盘到合适的位置。旋转的耗时取决于旋转的转速,这就是市面上我们经常看到的磁盘转速参数,5400转或者7200转甚至更高,一般5400转的硬盘,也需要4ms左右才能旋转到对应的扇区。
数据读取
数据读取其实非常的快,快到可以忽略不记。
随机读写与顺序读写
综上所述,一个机械硬盘,如果要读写的数据不在对应的磁道上,那么最少也要花费5ms去跑到对应的地址,所以,我们常说的,机械硬盘速度慢,更多的是特指机械硬盘在随机读写的速度慢。为了更好的利用磁盘,完成更大的吞吐,在很多大型的系统,都会使用追加写来减少磁盘的寻道跟旋转次数。例如由领英著名的消息队列卡夫卡,或者谷歌开源的存储系统LevelDB,都是使用追加写数据来达到更大的性能。
事实上,硬盘的顺序读写速度非常地快,我们常说的慢,指的是随机读写,你学到了吗?欢迎大家关注我,共同学习,共同进步。大家的支持是我继续唠嗑的动力。