目录
一、机械硬盘
一块机械硬盘是由盘面、磁头和悬臂三个部件组成的。
- 盘面(Disk Platter):其实就是实际存储数据的盘片。盘面本身通常是用的铝、玻璃或者陶瓷这样的材质做成的光滑盘片,盘面上有一层磁性的涂层,数据就存储在这个磁性的涂层上。盘面中间有一个受电机控制的转轴。这个转轴会控制盘面旋转。硬盘的转速指的就是盘面中间电机控制的转轴的旋转速度,英文单位叫 RPM,也就是每分钟的旋转圈数(Rotations Per Minute)。
- 磁头(Drive Head):数据是通过磁头,从盘面上读取到,再通过电路信号传输给控制电路、接口,再到总线上的。通常,一个盘面上会有两个磁头,分别在盘面的正反面。盘面在正反两面都有对应的磁性涂层来存储数据,而且一块硬盘也不是只有一个盘面,而是上下堆叠了很多个盘面,各个盘面之间是平行的。每个盘面的正反两面都有对应的磁头。
- 悬臂(Actutor Arm):悬臂链接在磁头上,并且在一定范围内会去把磁头定位到盘面的某个特定的磁道(Track)上。
磁道,会分成一个一个扇区(Sector)。上下平行的一个一个盘面的相同扇区叫作一个柱面(Cylinder)。
读取数据时,首先,把盘面旋转到某一个位置。在这个位置上,悬臂可以定位到整个盘面的某一个子区间。这个子区间叫作几何扇区(Geometrical Sector),在“几何”位置上,所有这些扇区都可以被悬臂访问到。其次,把悬臂移动到特定磁道的特定扇区,在这个“几何扇区”里面,找到实际的扇区。找到之后,落下磁头,就可以读取到正对着扇区的数据。
进行一次硬盘上的随机访问,需要的时间由两个部分组成:
平均延时(Average Latency):盘面选转后,悬臂定位到扇区的的时间。和机械硬盘的转速相关。随机情况下,平均找到一个几何扇区,需要旋转半圈盘面,
平均寻道时间(Average Seek Time):盘面选转后,悬臂定位到扇区的的时间。硬盘是机械结构的,只有一个电机转轴,也只有一个悬臂,所以没有办法并行地去定位或者读取数据。那一块 7200 转的硬盘,一秒钟随机的 IO 访问次数,也就是1s / 8 ms = 125 IOPS 或者 1s / 14ms = 70 IOPS。
如果进行顺序的数据读写,应该怎么最大化读取效率呢?可以选择把顺序存放的数据,尽可能地存放在同一个柱面上。这样,只需要旋转一次盘面,进行一次寻道,就可以去写入或者读取,同一个垂直空间上的多个盘面的数据。如果一个柱面上的数据不够,也不要去动悬臂,而是通过电机转动盘面,这样就可以顺序读完一个磁道上的所有数据。所以,其实对于 HDD 硬盘的顺序数据读写,吞吐率还是很不错的,可以达到 200MB/s 左右。
二、SSD硬盘
SSD 没有像机械硬盘那样的寻道过程,所以它的随机读写都更快。
(一)SSD硬盘的读写原理
对于 SSD 硬盘,可以先简单地认为,它是由一个电容加上一个电压计组合在一起,记录了一个或者多个比特。
1、SLC、MLC、TLC 和 QLC
能够记录一个比特很容易理解。给电容里面充上电有电压的时候就是 1,给电容放电里面没有电就是 0。采用这样方式存储数据的 SSD 硬盘,我们一般称之为使用了 SLC 的颗粒,全称是 S