物理存储介质概述


常见物理存储介质

高速缓冲存储器(cache)

高速缓冲存储器是最快的存储介质,也是最昂贵的存储介质

计算机系统中的高速缓冲存储器一般都很小,由计算机硬件来管理

虽然数据库系统不用管理高速缓冲存储器,但在设计数据库系统的算法和数据结构时,通常会考虑到高速缓冲存储器的影响

主存储器(main memory)

用于存放可处理的数据和机器指令的存储介质

如果电源关闭,主存储器中的内容通常无法保存下来

快闪存储器(flash memory)

快闪存储器广泛应用于手机、U 盘等设备中,用于长期存储数据,因为电源关闭时,快闪存储器中的内容可以保存下来

在存储中等数量的数据时,快闪存储器越来越多地作为磁盘存储器的替代品出现

目前主要有两种快闪存储器:NAND 快闪和 NOR 快闪

NAND 快闪写入和擦除速度更快,单位容量的价格更便宜,而 NOR 快闪读取速度更快

磁盘存储器(magnetic-disk storage)

磁盘存储器主要用于长期联机存储数据

通常来说,整个数据库都存储在磁盘上

光学存储器(optical storage)

光学存储器主要用于长期脱机存储数据

常见的光学存储器有:光盘(compact disc,CD)、数字多功能光盘(digital versatile disc,DVD)等

磁带存储器(tape storage)

磁带存储器主要用于长期脱机存储数据

磁带存储器访问数据时,必须从头顺序访问

存储介质的层次结构

将不同的存储介质按单位容量从昂贵到便宜,速度从快到慢排序,可以得到如下的层次结构:

  • 高速缓冲存储器
  • 主存储器
  • 快闪存储器
  • 磁盘存储器
  • 光学存储器
  • 磁带存储器

存储介质的分类

按成本和速度分类,可以将高速缓冲存储器和主存储器称作基本存储,将快闪存储器和磁盘存储器称作辅助存储或联机存储,将光学存储器和磁带存储器称作三级存储或脱机存储

按关闭电源后存储器的内容能否保存,可以将高速缓冲存储器和主存储器称作易失性存储,将快闪存储器、磁盘存储器、光学存储器和磁带存储器称作非易失性存储


磁盘和快闪存储器


磁盘存储器通常由磁盘、磁盘驱动器和磁盘控制器组成

磁盘和磁盘驱动器

【数据库基础】1. 物理存储介质

磁盘由一个或多个盘片组成,每个盘片都是一个扁平的圆盘,两面覆盖着磁性物质,信息就记录在磁性物质中

盘片的表面从逻辑上划分为磁道,磁道又划分为扇区,扇区是从磁盘读写数据的最小单位,以前典型的扇区大小是 512 字节,而现在很多磁盘的扇区大小是 4KB

磁盘的所有盘片都被平行地放在磁盘驱动器的主轴上,当磁盘被使用时,磁盘驱动器会使磁盘高速转动

每个盘片的每一面,都有一个读写头,可以对盘片上的信息进行读写,所有读写头都安装在磁盘臂上,通过移动磁盘臂,读写头可以在盘片上移动来访问不同的磁道

磁盘控制器

磁盘控制器是计算机系统和磁盘驱动器之间的接口,它接收并解释来自计算机系统的命令,然后向磁盘驱动器发出各种控制信号

磁盘控制器还为它所写的每一个扇区保存一个校验和,当读取一个扇区时,磁盘控制器用读取到的数据再计算一次校验和,并与保存的校验和进行比对,如果该扇区的数据被破坏,两个校验和不一致的概率就很高,如果出现不一致,就会重新读几次,若重读几次仍然不一致,则磁盘控制器返回一个读操作失败的信号

此外,磁盘控制器还负责坏扇区的重映射,每当磁盘控制器检测到一个损坏的扇区,它就会把这个扇区在逻辑上映射到另一个物理位置(磁盘中有专门为此而留出的额外扇区)

磁盘存储器性能度量

磁盘存储器性能的主要度量指标有:容量、访问时间、数据传输率、可靠性等

访问时间

访问时间是指从发出读写请求到数据实际开始传输的时间

为了访问指定扇区的数据,首先需要移动磁盘臂,使读写头定位到正确的磁道上,然后需要等待磁盘旋转,使指定的扇区出现在读写头的正下方

磁盘臂定位磁道所需要的时间称作寻道时间,寻道时间与磁盘臂的移动距离正相关,一般来说,平均寻道时间约为几毫秒到十几毫秒

读写头到达正确的磁道后,等待磁盘旋转的时间称作旋转等待时间,平均情况下,磁盘需要旋转半周,才能使指定的扇区出现在读写头的正下方,磁盘旋转半周大约需要几毫秒

数据传输率

当待访问数据的第一个扇区到达读写头正下方时,数据传输就开始了,数据传输率是指向磁盘读写数据的速率

目前磁盘存储器的最大数据传输率约为每秒几十 MB 到一百多 MB ,另外,由于外侧的磁道比内侧的磁道拥有更多的扇区,因此外侧磁道的数据传输率要高于内侧磁道

平均故障时间

平均故障时间是指磁盘存储器无故障连续运行的时间的期望,用于衡量磁盘存储器的可靠性

磁盘块访问的优化

磁盘的读写请求是由操作系统产生的,磁盘读写数据的最小单位是扇区,但操作系统产生读写请求时,是以块作为单位,一个块是磁盘上的一个逻辑单元,包含一个或多个连续的扇区,大小通常在几 KB 左右

来自操作系统的连续的访问请求通常可以被分为顺序访问模式和随机访问模式

在顺序访问模式下,访问第一个块时可能需要一次寻道,但访问之后的块时,不再需要寻道

在随机访问模式下,每次访问前都有可能需要寻道,因此其速度要明显慢于顺序访问模式

为了提高访问块的速度,产生了许多技术

缓冲

缓冲是指,当从磁盘中读取的块被使用完毕时,将其暂时存储在内存的缓冲区中,而不是立即将其释放,绝大部分操作系统都有内存缓冲区机制,但数据库系统通常会实现数据库系统自己的内存缓冲区

预读

预读是指,当一个块被访问时,除了将该块放入内存缓冲区,还将相同磁道与该块相邻的若干块也放入内存缓冲区,因为一个块被访问时,接下来访问其相邻块的概率比较高

预读对顺序访问模式加速明显,但对于随机访问模式用处不大

调度

调度是指,当多个读写请求产生时,通过某些策略将这些请求排序,从而起到加速的作用,通常由磁盘控制器来完成

如果要访问同一磁道上的多个块,按磁盘旋转时每个块第一次经过读写头的顺序来进行访问,这样速度显然最快

如果要访问不同磁道上的多个块,我们的目标是让磁盘臂的移动距离最小,磁盘臂调度算法通常用来试图减小磁盘臂的移动距离

最常见的磁盘臂调度算法是电梯算法,这个算法的原理与电梯的工作方式十分相似,假设一开始磁盘臂从内侧磁道向外侧磁道移动,每经过一条有访问请求的磁道,磁盘臂就停下来访问该磁道上指定的块,然后继续向外侧磁道移动,直到没有对更外侧磁道的访问请求,这时候磁盘臂改变移动方向,从外侧磁道向内侧磁道移动

文件组织

由于顺序访问模式要快于随机访问模式,我们可以按照与预期的数据访问顺序最接近的顺序来组织磁盘上的块

通常情况下,我们预计同一个文件中的块将被按顺序访问,因此理想情况下,应该把同一个文件中的所有块存储在相同或相邻的磁道上

大部分操作系统会自动地给文件分配磁盘空间,尽管操作系统并不能保证所有文件的所有块都按顺序分布,但操作系统会给一个文件分配若干个区,每个区都是很多个连续的块,这样访问该文件时,只需要对每个区进行一次寻道即可

对一个文件进行多次插入或删除之后,该文件可能会变得碎片化,即它的块散布在整张磁盘上,为了减少碎片,操作系统可以将磁盘上的数据进行一次备份,然后再将每个文件连续地或几乎连续地写回

非易失性写缓冲区

因为主存储器是易失性存储,因此在主存中更新后的数据需要重新写回磁盘

我们可以用非易失性随机访问存储器(简称 NV-RAM)来加速写回磁盘的操作,NV-RAM 的内容在断电后依然会保存,一种简单的 NV-RAM 的实现方式是使用有备用电池的 RAM

当接收到向磁盘中写入一个块的请求时,磁盘控制器将这个块先写到 NV-RAM 上,然后立即返回写操作成功的信号,之后当磁盘空闲或 NV-RAM 缓冲区已满时,磁盘控制器才会实际地将这些块写入磁盘,由于 NV-RAM 断电后依然保存数据,因此即使发生电源故障,依然可以在电源恢复后将 NV-RAM 上的内容实际写到磁盘上

日志

日志的使用与 NV-RAM 缓冲区非常类似,当需要执行写操作时,先把要写的块以日志的形式写入到日志磁盘上,日志磁盘是专门用于写顺序日志的磁盘,由于访问日志磁盘时,一般都按照顺序访问模式,并且日志磁盘可以一次写入多个连续的块,因此日志磁盘的使用加快了写入数据的速度

和 NV-RAM 一样,存放数据的磁盘空闲或日志磁盘已满时,需要将日志磁盘中的块实际地写入存放数据的磁盘

即使没有专门的日志磁盘,也依然可以以略微牺牲系统性能为代价,使用存放数据的磁盘来存放日志

大多数操作系统都支持日志,但操作系统通常只在写一些系统文件的时候使用日志磁盘,对于作为一个应用程序的数据库来说,由其执行的写操作一般不会使用日志磁盘,这就要求数据库系统实现数据库系统自己的日志

快闪存储器

目前 NAND 快闪使用得更加广泛,下面主要介绍 NAND 快闪

NAND 快闪的最小读取单位叫数据页,一个数据页的大小通常在 512 字节到 4KB 之间

在 NAND 快闪上检索到一个数据页只需要花费约 1 微秒,远少于磁盘的寻道时间,一些新技术使得 NAND 快闪的数据传输率也高于磁盘存储器

NAND 快闪的写入操作只能在空白数据页进行,通常只需要几微秒,如果目标数据页已经有数据,则必须先擦除旧数据,再重新写入新数据

NAND 快闪的擦除操作以擦除块为单位进行,一个擦除块约为十几到一百多 KB ,包含多个数据页,通常擦除一个擦除块需要花费约 1 毫秒

此外,一个数据页的擦除次数存在限制,一般约为 10 万到 100 万次

转换表

为了应对慢擦除速度的影响,闪存系统通过保存在内存中的转换表建立了逻辑页到物理页的映射,当一个逻辑页更新时,它可以重新映射到一个空白的物理页上,而原来的物理页被标记为删除页面,但不实际擦除

包含多个删除页面的擦除块会定期擦除,擦除之前会先将擦除块中不应删除的数据页映射到其它物理页上

损耗均衡

由于数据页的擦除次数存在限制,因此需要通过损耗均衡,来延长 NAND 快闪的寿命

一种损耗均衡的策略是,将很少更新的数据标记为冷数据,频繁更新的数据标记为热数据,将冷数据存放在剩余擦除次数较少的数据页上,热数据存放在剩余擦除次数较多的数据页上,当一个存放热数据的数据页因频繁擦除,剩余擦除次数少于其它数据页时,执行一次数据迁移,把冷数据迁移到该数据页上

闪存转换层

转换表、损耗均衡等一系列操作,都由称作闪存转换层的软件层完成,在这一层之上,快闪存储器的逻辑视图看起来和磁盘存储器一样,除了它比磁盘存储器快,因此无论物理存储介质使用快闪存储器还是磁盘存储器,数据库系统都能看到相同的逻辑视图


数据库缓冲区


绝大多数操作系统都有内存缓冲区的机制,但数据库系统仍然需要实现数据库系统自己的内存缓冲区,原因主要有:

  1. 可能有部分操作系统没有内存缓冲区的机制,即使有内存缓冲区,也可能不支持一些数据库系统所要求的功能
  2. 操作系统的内存缓冲区一般采用 LRU 替换策略,核心思想是依赖过去来预测将来,而数据库系统通常可以通过检查用户的请求,获得一些短期内的将来信息

当数据库系统中的程序需要磁盘上的块时,它向缓冲区管理器发出请求,如果这个块已经在数据库缓冲区中,则缓冲区管理器直接返回该块在内存中的地址,否则,缓冲区需要把请求的磁盘块读入缓冲区

钉住的块

数据库缓冲区支持将某个块钉住,使其不能写回磁盘,通常该功能是为了保证事务的原子性

强制写出

在某些情况下,即使缓冲区空间充足,还是需要将某些块写回磁盘,这样的操作称为块的强制写出,通常该功能是为了保证事务的原子性

替换策略

当缓冲区空间不足时,在读入一个新的块之前,需要将一个旧的块移出缓冲区,选择哪个块移出缓冲区的策略称作替换策略

绝大多数数据库系统使用 LRU 替换策略,但会加以一些改进,因为数据库系统通常可以通过检查用户的请求,获得一些短期内的将来信息

如果一个被移出的块在内存中修改过,则需要将其写回磁盘,缓冲区管理器在写回一个块之前,会先向崩溃-恢复子系统寻求许可,崩溃-恢复子系统在允许写回这个块之前,可能会强制写出一些其它的块,这样做也是为了保证事务的原子性


RAID


独立磁盘冗余阵列(redundant array of independent disk,RAID)是一系列磁盘组织技术的统称,这些技术的共同特点是,使用大量的磁盘以提高性能和可靠性

冗余

冗余是指在磁盘中存储正常情况下不需要的额外信息,以便于在发生磁盘故障时利用这些信息来重建丢失的信息,从而提高了磁盘的可靠性

实现冗余最简单也最昂贵的方法就是复制每张磁盘,这种方法称作镜像,这样,一张逻辑磁盘由两张物理磁盘组成,一次写操作要同时在两张磁盘上执行

此外,还可以通过纠错码、奇偶校验码等来实现冗余

拆分

最常见的拆分有两种:比特级拆分和块级拆分

比特级拆分是指把每个字节按比特分开,存储到多个磁盘上,块级拆分是指把数据按磁盘块分开,存储到多个磁盘上,拆分的核心思想是利用并行来提高性能

比特级拆分可以通过在多个磁盘上并行读写来提升访问的速率,减少响应时间

块级拆分对于大文件的访问,也可以通过在多个磁盘上并行读写来提升速率,减少响应时间,而对于单个块的访问,由于只有一个磁盘在实际工作,因此其数据传输率与单个磁盘相同,但由于其它磁盘都处于空闲状态,因此对于块访问操作,其吞吐量提升了

通常我们认为,块级拆分要优于比特级拆分,它们的差别主要在块访问操作,相比于比特级拆分,块级拆分在执行单次块访问操作时,使用了更少的磁盘,但数据传输率更低,由于一个磁盘块的数据量很小,因此性能瓶颈在于磁盘访问耗时而不在于数据传输耗时,由于块级拆分在执行单次块访问操作时,使用了更少的磁盘,因此其磁盘访问耗时要远少于比特级拆分的磁盘访问耗时

RAID 级别

通过结合冗余和拆分的思想,人们已经提出了多种磁盘组织方案,这些方案具有不同的成本和性能,因此我们用不同的 RAID 级别来表示这些不同的方案

RAID 0 级

无冗余块级拆分的磁盘阵列,仅对数据进行了块级拆分

RAID 1 级

块级拆分的磁盘镜像,对每个磁盘创建一个镜像,并把数据块级拆分到每张逻辑磁盘中

有些人对 RAID 1 级赋予了不同的含义,指不使用拆分的磁盘镜像,然后用 RAID 10 级表示块级拆分的磁盘镜像

RAID 2 级

内存风格的纠错码组织结构,把数据比特级拆分到每张磁盘中,同时使用额外的磁盘保存数据的纠错码

通常情况下只要求 RAID 2 级能纠正一位错误,如果使用 xx 张磁盘保存数据,yy 张磁盘保存数据的纠错码,只需要满足 x+y+12yx+y+1 \le 2^y 即可,RAID 2 级使用的额外磁盘数量通常要少于 RAID 1 级

在某一位发生错误时,可以根据保存纠错码的 yy 张磁盘中的信息发现错误并重建丢失的数据

RAID 3 级

位交叉的奇偶校验组织结构,把数据比特级拆分到每张磁盘中,同时使用额外的磁盘保存数据的奇偶校验码

奇偶校验码通常情况下只能用来检测数据是否出错,并没有纠错功能,然而磁盘控制器可以检测一个扇区是否正确地读出,配合磁盘控制器,就可以利用奇偶校验码纠正一位错误

对于多张数据磁盘,只需要一张磁盘保存数据的奇偶校验码,因此 RAID 3 级使用的额外磁盘数量少于 RAID 2 级

RAID 4 级

块交叉的奇偶校验组织结构,把数据块级拆分到每张磁盘中,同时使用额外的磁盘保存数据的奇偶校验码

RAID 5 级

块交叉的分布奇偶校验位的组织结构,把数据块级拆分到每张磁盘中,不使用额外的磁盘保存数据的奇偶校验码,而是把奇偶校验码按块分布到每张磁盘中

需要注意的是,奇偶校验码和它所校验的数据位不能存在同一张磁盘中,通常情况下我们是这样存储的:

磁盘 0 磁盘 1 磁盘 2 磁盘 3 磁盘 4
p0p_0 0 1 2 3
4 p1p_1 5 6 7
8 9 p2p_2 10 11
12 13 14 p3p_3 15
16 17 18 19 p4p_4

其中 0,1,,190,1, \cdots ,19 表示数据块,pip_i 表示 4i,4i+1,4i+2,4i+34i,4i+1,4i+2,4i+3 这四个数据块的奇偶校验块

RAID 5 级比 RAID 4 级改进的地方在于,所有磁盘都能参与到读数据的操作中,而 RAID 4 级中,存放奇偶校验码的磁盘是不参与读数据的

RAID 6级

P + Q 冗余方案,类似于 RAID 5 级,但是冗余信息用的并不是奇偶校验码,而是像 Reed-Solomon 码之类的纠错码,可以纠正多位错误

RAID 级别的选择

通常认为 RAID 2 级、RAID 3 级和 RAID 4 级不如 RAID 5 级,因为 RAID 2 级所需的额外磁盘更多,RAID 3 级是比特级拆分,RAID 4 级读数据性能更低

那么就要在剩下的 RAID 0 级、RAID 1 级、RAID 5 级和 RAID 6 级中进行选择

RAID 0 级有最高的读写性能,不需要任何额外磁盘,但同时也最不可靠,通常用于安全性要求不高的应用

RAID 1 级有等同于 RAID 0 级的读数据性能,其写数据性能略低于 RAID 0 级,RAID 1 级拥有很高的可靠性,但需要的额外磁盘也最多,由于单位容量磁盘的价格日趋下降,RAID 1 级的使用越来越广泛

RAID 5 级读数据性能依然很高,但写数据性能略低于 RAID 1 级,这是因为 RAID 5 级在写数据时,还需要额外修改奇偶校验块,RAID 5 级可靠性略低于 RAID 1 级,但所需的额外磁盘数很少

RAID 6 级目前并未被广泛支持,但其确实提供比 RAID 5 级更高的可靠性

数据库系统的存储通常选择 RAID 1 级和 RAID 5 级

相关文章:

  • 2021-09-09
  • 2022-12-23
  • 2021-08-04
  • 2021-05-21
  • 2021-05-02
  • 2021-07-26
  • 2022-02-10
  • 2022-02-09
猜你喜欢
  • 2021-06-04
  • 2021-09-12
  • 2022-02-09
  • 2021-07-23
  • 2021-08-13
  • 2021-06-28
  • 2021-09-04
相关资源
相似解决方案