Database System Concepts 7th 12章 Physical Storage Systems 学习
存储层次结构
Physical Storage.png
Cache:高速缓存
L1,L2级高速缓存,寄存器, 通常用在 CPU 中
Main memory: 主存,也叫内存
普通 PC 8G,16G,32G 已经很常见
服务器 128G,256G 可以有很大的内存
现在 OnLine OLTP 也是一个趋势, 就是把整个数据库都放到内存中, 当然也会异步持久化到磁盘。内存数据库访问速度肯定非常非常快,很多存储、索引结构都可以优化。 能替代部分场景,但磁盘还是主流。
Flash memory: 闪存
相机,手机 SD 卡(64G, 128G,256G), TF卡, U盘(128G,256G的都已经很常见)
SSD (solid-state drive) 固态硬盘, 在PC,服务器上运用越来越多。
SSD 提供了类似磁盘的访问接口, 都是以 block (块) 为单位进行数据的存取。一个块的大小可以从 512字节 到 8k 个字节
SSD 容量越来越大,价格越来越便宜, 很多场景下可替代磁盘。
Magnetic-disk: 磁盘
也叫硬盘(HDD - hard disk drive)
500G, 1T, 2T, 8T, 14T , 1T的硬盘已经很便宜
Optical storage: 光存储
DVD 光盘等,现在比较少见了
Tape storage: 磁带
主要做备份和归档
从上往下,容量越来越大, 每位价格越来越便宜,速度越来越慢。cache和内存是易失性存储,断电后信息会丢失。磁盘、SSD、光盘等是非易失性存储。
primary storage: 主存储
cache, 内存通常叫做主存储
secondary storage: 辅助存储 (或 online storage)
磁盘, SSD 等 Flash 通常叫做辅助存储(或二级存储)
tertiary storage: 三级存储 (或 offline storage)
光盘,磁带等
我学习数据库呢,你为什么一上来就讨论磁盘??? 因为数据库底层存储的数据都是存储在磁盘上,所以了解磁盘的工作原理是必须的!!!
磁盘
hdd.png
hdd1.png
一个磁盘有多个盘片, 所有盘片固定在中间的一根柱子上。
工作时柱子带动所有盘片一块旋转,旋转速度可以从 5400转/分钟,到 10000转/分钟。
每个盘片表面由一个一个的磁道(track, 一圈一圈的圆), 每个磁道都被划分为多个扇区(sector)。越靠近圆心的磁道长度越短,所以靠里面的磁道相比外面的磁道的扇区数要少。
磁盘以扇区为最小单位进行读写,每个扇区大小通常是 512字节。
一个盘片的上下两面都可以存储信息, 上下两面各有一个磁头贴着盘面进行数据读写。所有磁头由一个手臂牵引着一块运动。所有盘面的同一长度的磁道构成了一个柱面(cylinder, 一个圆柱体)
操作系统通过磁盘控制器(disk controller 或叫磁盘驱动器)跟磁盘通信,
磁盘收到指令后首先可能要移动磁头到指定的磁道,然后盘片旋转到指定的扇区进行数据的读写。磁盘驱动在写一个扇区时会而外写一个数据的 checksums(校验和)进去。这样当数据从扇区读回来的时候,可以重新计算校验和并和之前的对比, 来检查数据是否损坏。
磁盘访问时间包括寻道时间(seek time),旋转时间和传输时间
一个IO请求到来,手臂首先要移动到指定的磁道,平均寻道时间是 4-10毫秒。之后盘片旋转到指定扇区,所用时间跟转速有关。 寻道时间+旋转时间一般叫做 access time(访问时间)。
传输时间就是数据读写的时间,跟传输速度有关,读写速度通常几十到几百M每秒
IO操作都是以块(block)为单位进行操作的。一个块的大小通常从 4k到16k。
块是一个逻辑地址,一个IO请求指定一个读写的块号,磁盘驱动会把块号转换为具体的磁道和扇区。
显然如果请求的块号都是连续的,可能访问的都是同一个磁道或相邻磁道,这样寻道时间会减少。这种模式叫做顺序访问(sequential access)。相反随机访问(random access)会导致寻道和旋转时间加长。磁盘调度算法(如电梯算法)就是优化磁盘访问的。
Flash
Flash: 目前主流的是 NAND flash 技术, SSD 就是用的NAND flash
SSD 也是按照块(也叫page)来访问的。一个Page通常4096字节。(4k)
SSD的随机访问速度远高于磁盘,通常5-10微妙(milliseconds)。
flash 的写要复杂一些,写一个Page需要大约 100微妙。但是当一个Page被写入后就不能被直接复写了,只能被擦除后重写。通常一次擦除多个Page,耗时 2-5微妙。
flash 还有一个缺点就是每个Page的可擦写次数是有限的,通常只能擦写 100000到1000000次。超过这个次数数据可能会损坏。
一个Page更新时原来的Page会map到一个已经擦除的新的Page上。原来的Page就会被标记为可删除。后台会周期性的擦除这些Page。
所以SSD也不是十全十美的。 SSD驱动器提供了和磁盘一样的访问接口,都以块为访问单位,这两个对于上层应用来说都是一样的。数据以块(block)为单位在内存和磁盘(包括SSD)之间传递。
RAID ( redundant arrays of independent disks)
独立磁盘冗余阵列
顾名思义,多个磁盘组成一个阵列当做一个大的磁盘使用。多个磁盘除了大容量还有主要是做备份和数据库恢复。主要用在数据中心服务器上。
前沿研究: storage class memory
如果有一种存储既像内存一样可以快速的随机访问(内存可以随机访问每一个字节),又像磁盘,SSD那样大容量,非易失那该多好。我们再也不用担心电脑断电没保存了。 数据库架构,软件架构都得迎来革命性变革。目前 Intel 等正研究这类存储,搞了一个 3D-XPoint。价格介于内存和 flash 之间,如果能够普及绝对世界首富。











网友评论