物理存储介质概述
常见物理存储介质
高速缓冲存储器(cache)
高速缓冲存储器是最快的存储介质,也是最昂贵的存储介质
计算机系统中的高速缓冲存储器一般都很小,由计算机硬件来管理
虽然数据库系统不用管理高速缓冲存储器,但在设计数据库系统的算法和数据结构时,通常会考虑到高速缓冲存储器的影响
主存储器(main memory)
用于存放可处理的数据和机器指令的存储介质
如果电源关闭,主存储器中的内容通常无法保存下来
快闪存储器(flash memory)
快闪存储器广泛应用于手机、U 盘等设备中,用于长期存储数据,因为电源关闭时,快闪存储器中的内容可以保存下来
在存储中等数量的数据时,快闪存储器越来越多地作为磁盘存储器的替代品出现
目前主要有两种快闪存储器:NAND 快闪和 NOR 快闪
NAND 快闪写入和擦除速度更快,单位容量的价格更便宜,而 NOR 快闪读取速度更快
磁盘存储器(magnetic-disk storage)
磁盘存储器主要用于长期联机存储数据
通常来说,整个数据库都存储在磁盘上
光学存储器(optical storage)
光学存储器主要用于长期脱机存储数据
常见的光学存储器有:光盘(compact disc,CD)、数字多功能光盘(digital versatile disc,DVD)等
磁带存储器(tape storage)
磁带存储器主要用于长期脱机存储数据
磁带存储器访问数据时,必须从头顺序访问
存储介质的层次结构
将不同的存储介质按单位容量从昂贵到便宜,速度从快到慢排序,可以得到如下的层次结构:
- 高速缓冲存储器
- 主存储器
- 快闪存储器
- 磁盘存储器
- 光学存储器
- 磁带存储器
存储介质的分类
按成本和速度分类,可以将高速缓冲存储器和主存储器称作基本存储,将快闪存储器和磁盘存储器称作辅助存储或联机存储,将光学存储器和磁带存储器称作三级存储或脱机存储
按关闭电源后存储器的内容能否保存,可以将高速缓冲存储器和主存储器称作易失性存储,将快闪存储器、磁盘存储器、光学存储器和磁带存储器称作非易失性存储
磁盘和快闪存储器
磁盘存储器通常由磁盘、磁盘驱动器和磁盘控制器组成
磁盘和磁盘驱动器
磁盘由一个或多个盘片组成,每个盘片都是一个扁平的圆盘,两面覆盖着磁性物质,信息就记录在磁性物质中
盘片的表面从逻辑上划分为磁道,磁道又划分为扇区,扇区是从磁盘读写数据的最小单位,以前典型的扇区大小是 512 字节,而现在很多磁盘的扇区大小是 4KB
磁盘的所有盘片都被平行地放在磁盘驱动器的主轴上,当磁盘被使用时,磁盘驱动器会使磁盘高速转动
每个盘片的每一面,都有一个读写头,可以对盘片上的信息进行读写,所有读写头都安装在磁盘臂上,通过移动磁盘臂,读写头可以在盘片上移动来访问不同的磁道
磁盘控制器
磁盘控制器是计算机系统和磁盘驱动器之间的接口,它接收并解释来自计算机系统的命令,然后向磁盘驱动器发出各种控制信号
磁盘控制器还为它所写的每一个扇区保存一个校验和,当读取一个扇区时,磁盘控制器用读取到的数据再计算一次校验和,并与保存的校验和进行比对,如果该扇区的数据被破坏,两个校验和不一致的概率就很高,如果出现不一致,就会重新读几次,若重读几次仍然不一致,则磁盘控制器返回一个读操作失败的信号
此外,磁盘控制器还负责坏扇区的重映射,每当磁盘控制器检测到一个损坏的扇区,它就会把这个扇区在逻辑上映射到另一个物理位置(磁盘中有专门为此而留出的额外扇区)
磁盘存储器性能度量
磁盘存储器性能的主要度量指标有:容量、访问时间、数据传输率、可靠性等
访问时间
访问时间是指从发出读写请求到数据实际开始传输的时间
为了访问指定扇区的数据,首先需要移动磁盘臂,使读写头定位到正确的磁道上,然后需要等待磁盘旋转,使指定的扇区出现在读写头的正下方
磁盘臂定位磁道所需要的时间称作寻道时间,寻道时间与磁盘臂的移动距离正相关,一般来说,平均寻道时间约为几毫秒到十几毫秒
读写头到达正确的磁道后,等待磁盘旋转的时间称作旋转等待时间,平均情况下,磁盘需要旋转半周,才能使指定的扇区出现在读写头的正下方,磁盘旋转半周大约需要几毫秒
数据传输率
当待访问数据的第一个扇区到达读写头正下方时,数据传输就开始了,数据传输率是指向磁盘读写数据的速率
目前磁盘存储器的最大数据传输率约为每秒几十 MB 到一百多 MB ,另外,由于外侧的磁道比内侧的磁道拥有更多的扇区,因此外侧磁道的数据传输率要高于内侧磁道
平均故障时间
平均故障时间是指磁盘存储器无故障连续运行的时间的期望,用于衡量磁盘存储器的可靠性
磁盘块访问的优化
磁盘的读写请求是由操作系统产生的,磁盘读写数据的最小单位是扇区,但操作系统产生读写请求时,是以块作为单位,一个块是磁盘上的一个逻辑单元,包含一个或多个连续的扇区,大小通常在几 KB 左右
来自操作系统的连续的访问请求通常可以被分为顺序访问模式和随机访问模式
在顺序访问模式下,访问第一个块时可能需要一次寻道,但访问之后的块时,不再需要寻道
在随机访问模式下,每次访问前都有可能需要寻道,因此其速度要明显慢于顺序访问模式
为了提高访问块的速度,产生了许多技术
缓冲
缓冲是指,当从磁盘中读取的块被使用完毕时,将其暂时存储在内存的缓冲区中,而不是立即将其释放,绝大部分操作系统都有内存缓冲区机制,但数据库系统通常会实现数据库系统自己的内存缓冲区
预读
预读是指,当一个块被访问时,除了将该块放入内存缓冲区,还将相同磁道与该块相邻的若干块也放入内存缓冲区,因为一个块被访问时,接下来访问其相邻块的概率比较高
预读对顺序访问模式加速明显,但对于随机访问模式用处不大
调度
调度是指,当多个读写请求产生时,通过某些策略将这些请求排序,从而起到加速的作用,通常由磁盘控制器来完成
如果要访问同一磁道上的多个块,按磁盘旋转时每个块第一次经过读写头的顺序来进行访问,这样速度显然最快
如果要访问不同磁道上的多个块,我们的目标是让磁盘臂的移动距离最小,磁盘臂调度算法通常用来试图减小磁盘臂的移动距离
最常见的磁盘臂调度算法是电梯算法,这个算法的原理与电梯的工作方式十分相似,假设一开始磁盘臂从内侧磁道向外侧磁道移动,每经过一条有访问请求的磁道,磁盘臂就停下来访问该磁道上指定的块,然后继续向外侧磁道移动,直到没有对更外侧磁道的访问请求,这时候磁盘臂改变移动方向,从外侧磁道向内侧磁道移动
文件组织
由于顺序访问模式要快于随机访问模式,我们可以按照与预期的数据访问顺序最接近的顺序来组织磁盘上的块
通常情况下,我们预计同一个文件中的块将被按顺序访问,因此理想情况下,应该把同一个文件中的所有块存储在相同或相邻的磁道上
大部分操作系统会自动地给文件分配磁盘空间,尽管操作系统并不能保证所有文件的所有块都按顺序分布,但操作系统会给一个文件分配若干个区,每个区都是很多