Storage Hierarchy
硬盘和内存的访问速度相差 10 万倍——也就是内存一秒,硬盘一天。因此两者之间有着天然的鸿沟。
- 因此,从硬盘中取数据是一个大忌,必须不惜代价用算法进行优化
Cache 和 Memory 之间的差异为 100 倍左右(具体和 cache 的级别有关)。相比硬盘和内存,cache miss 的惩罚要小得多。
Disk Speed
如图:对于 4 KB (i.e. 1 block) 的数据,传输时间仅为 0.02 ms (以 200MB/s 计)。但是,寻道和旋转的时间,却有 4 ~ 11 ms。说明时间都浪费在后者上了。
Performance Measure
- IOPS: I/O (block) per second
- MTTF: 多长时间才会发生故障
- 一般而言,硬盘在 3~5 年发生故障的可能性比较大。
- 但是,如果有多个(比如 1000 个)磁盘,那么很可能在短时间内就会有一个发生故障
- 可以用泊松过程来算
- 采用顺序访问的模式,可以极大增加 IOPS。
Optimization
Magnetic Disk
如上图,对于机械硬盘而言,我们可以通过:
- 内存为 disk cache
- pre-fetch(因为局部性原则)
- 如果我们提前知道需要读取的 block 的柱面,你就可以提前规划好最快的读取顺序
还可以通过磁盘碎片清理,来避免随机读取。
Flash Memory
闪存的特征:
- 随机读取相比连续读取,时间差不了多少
- 必须擦除后才能重新写入,且擦除操作会造成损耗
- 擦除非常耗时
- 通过 remapping 来 avoid waiting for erase (as well as wear caused by erase)
闪存和磁盘的区别:
- 闪存的随机读和顺序读几乎没有差别(实际上,remapping 之后,顺序读和随机读在物理上并没有多大的区别)
- 闪存的读和写有很大差别。我们要尽量防止反复写入。
Example: Ensuring Durability
对于一些场景:执行完一个 SQL 事务之后,必须存到一个可靠的地方。但是假如这个事务过于巨大,而且需要随机存储,存到硬盘需要存一天,我们就可以选择
- 存到 non-volatile write buffer(比如 NVM)去
- 或者连续地存到日志里去
Comparison of Different Storage Media
可以看见:
- NVM 和 DRAM 是在同一量级上的,之间的差距并不大
- NVM 和 SSD 之间有天然的鸿沟,但是 SSD 的随机读写能力很强
- HDD 的速度最慢,但是便宜+endurance+persistence
- ……