目录
第十章 存储和文件结构
10.1 物理存储介质概述
10.2 磁盘和快闪存储器
10.2.1 磁盘的物理特性
10.2.2 磁盘性能的度量
10.2.3 磁盘块访问的优化
10.2.4 快闪存储
10.3 RAID
10.3.1 通过冗余提高可靠性
10.3.2 通过并行提高性能
10.3.3 RAID级别
10.3.4 RAID级别的选择
10.3.5 硬件问题
10.3.6 其他的RAID的应用
10.4 第三级存储
10.4.1 光盘
10.4.2 磁带
10.5 文件组织
10.5.1 定长记录
10.5.2 变长记录
10.6 文件中记录的组织
10.6.1 顺序文件组织
10.6.2 多表聚簇文件组织
10.7 数据字典存储
10.8 数据库缓存区
10.8.1 缓冲区管理器
10.8.2 缓冲区替代策略
总结
按照访问的数据的速度、购买介质的每单位数据的成本、以及介质的可靠性分类:
磁盘的物理结构:
磁盘控制器(disk controller)是计算机系统和实际的磁盘驱动器硬件之间的接口。
磁盘控制器在磁盘驱动单元的内部实现。它接受高层次的读写扇区的命令,然后开始动作,如:移动磁盘臂寻找到正确的磁道,并实际的读写数据。
磁盘控制器为它所写的每个扇区附加校验和(checksum),校验和是从写到三区的数据计算得到的。
坏扇区的重映射(remapping of bad sector)
磁盘控制器还能够进行坏扇区的重映射。当磁盘初始格式化/试图读取一个扇区时,如果磁盘控制器检测到一个损坏的扇区,它会把这个扇区在逻辑上映射到另一个物理位置。重映射记录在磁盘或非易失性存储器中,而写操作在新的位置执行。
磁盘通过高速互联通道连接到计算机系统,通用的将磁盘连接到计算机的接口有:
磁盘可以通过电缆直接与计算机系统的磁盘接口相连,也可以通过高速网络将远端磁盘与磁盘控制器相连。
存储局域网(Storage Area Network, SAN)体系结构:
在SAN中,大量的磁盘通过高速网络与许多计算机服务器相连。通常磁盘采用独立冗余阵列(Redundant Array of Independent Disk, RAID)技术进行本地化组织,从而给服务器一个很大且非常可靠的磁盘的逻辑视图。SAN意味着磁盘可以由并行运行一个应用程序的不同服务器所共享。
网络附加存储(Network Attached Storage,NAS)
由SAN发展而来。NAS和SAN类似,但是它通过使用网络文件系统协议(如NFS或CIFS)提供文件系统接口,而不是你看似一张大磁盘的网络存储器。
磁盘质量的主要度量指标:容量,访问时间,数据传输率,可靠性。
磁盘I/O请求是由文件系统和大多数操作系统具有的虚拟内存管理器产生。
每个请求指定了要访问的磁盘地址,即:块号。
磁盘的连续请求可分为两类:。
提高访问块的速度的技术:
缓冲 buffering |
从磁盘读取的块暂时存储在内存缓冲区中,以满足将来的需求。 缓冲区通过操作系统和数据库系统共同运作。 |
预读 read-ahead |
当一个磁盘块被访问时,相同磁道的连续块也被读入内存缓冲区,即便美原油针对这些块的即将来临的请求。 - 能够提高顺序访问的请求处理速度;但是对随机块访问不是很有效。 |
调度 scheduling |
磁盘臂调度算法(disk-arm scheduling)试图把对磁道的访问按照能增加可以处理的访问数量的方式排序。 通常用的算法有电梯算法(elevator algorithm):磁盘控制器对请求进行重新排序,因为它最清楚磁盘块的组织、盘片的旋转位置和磁盘臂的位置。电梯算法是从内到外-再从外到内的移动,在每条有请求的磁道上停下并提供服务。 |
文件组织 file organization |
为了减少访问块的时间,可以按照与预期的数据访问方式最接近的方式来组织磁盘上的块。 例如:WIndows和Unix OS,对用户隐藏磁盘组织,并由OS内部管理空间的分配。它们为一个文件分配一个或多个连续的块==>保证顺序文件访问只需寻道一次。过段时间,文件可能变得碎片化(fragmented),此时,OS可以对磁盘上的数据进行一次备份,然后再恢复整张磁盘。恢复操作将每个文件的块连续的写会。 |
非易失性写缓冲区NV-RAM Non Volatile Random-Access Memory |
主存中的内容在发生电源故障时将全部丢失,所以数据库的更新必须记录到磁盘上,这样才能再崩溃时保存。 更新密集的数据库应用的性能取决于磁盘写操作的速度。
NV-RAM大幅度加快了写磁盘的操作速度。 NV-RAM的内容在发生故障时不会丢失,一种实现方式是使用有备用电池的RAM。其思想是: 数据库系统请求往磁盘上写一个块时---磁盘控制器将这个块写到NV-RAM缓冲区,然后立刻通知写操作已经完成---当磁盘没有其他请求,或者NV-RAM缓冲区已满时,磁盘控制器将这些数据写到磁盘上相应的目标地址。
只有当NV-RAM已满时,数据库的写请求才会有延时。
从系统崩溃中恢复时,NV-RAM中所有缓冲区未完成的内容将会写回到磁盘上。 |
日志磁盘 log disk |
日志磁盘,即专门用于写顺序日志的磁盘,是减少写等待的另一种方法。 对日志磁盘的所有访问都是顺序的,这从根本上消除了寻道时间。 与NV-RAM类似,所有操作都在日志磁盘中记录,数据库系统不用等待操作的完整,日志磁盘会在以后完成写操作。日志磁盘可以最小化磁盘臂的移动而重排写操作的顺序。
如果系统在实际磁盘写操作完成前崩溃,则系统恢复后,可以读取日志磁盘,完成那些还没有完成的操作。
支持上述日志磁盘的文件系统称为日志文件系统(journaling file system) |
快闪存储器一共有两种:
NAND构建的存储系统提供与磁盘存储器相同的面向块的接口。
相对于磁盘,NAND的优点有:
NAND的缺点:
闪存转换层(flash translation layer)
混合硬盘驱动器(Hybrid Disk Drive):
它结合了小容量闪存存储器的硬盘系统,对频繁访问的数据,该驱动器作为缓存使用。频繁访问但很少更新的数据最适合存储域闪存存储器中。
N张磁盘组成的集合中某张磁盘发生故障的概率会比特定的以一张磁盘发生的概率要高。
引入冗余(redundancy)是解决这个可靠性问题的方法。冗余对发生故障时重建信息。
实现冗余最简单的方式是:复制每一张磁盘。这种技术称为镜像(mirroring)。
磁盘镜像可以使得我们对多张磁盘进行并行访问,提高访问速度。
此外,也可以采用数据拆分(Striping Data)提高传输速率。有不同层次的数据拆分形式,如:块级拆分和比特级拆分等。其中块级拆分是最常用的数据拆分。
磁盘中的并行主要有两个目的:
RAID,Redundant Array of Independent Disk, 独立磁盘冗余阵列。
除了磁盘镜像,奇偶校验结合磁盘拆分思想也可以实现冗余。
结合奇偶校验位、磁盘拆分思想、以及磁盘镜像,并对成本和性能进行权衡,提供了多种不同的冗余替代方案,并且分为RAID级别。下图中P表示纠错位,C表示数据的拷贝。
RAID 0: 无冗余拆分 |
块级拆分,无任何冗余的磁盘阵列。图10-3(a)提供了大小为4的磁盘阵列 |
RAID 1: 镜像磁盘 |
使用块级拆分的磁盘镜像。为每个磁盘提供一个镜像备份。 |
RAID 2: 内存风格的纠错码 |
也称为内存风格的纠错码(Error-Correcting-Code, ECC)组织结构。 通过结合字节拆分分散存储在多张磁盘上,可以直接在磁盘陈列上使用奇偶校验位。 10-3(c)显示了RAID2级方案,标记P存储了纠错位。如果一张磁盘发生故障,可通过其余位+纠错码来重建数据。
奇偶校验: 内存系统的每个字节都有一个与之相关的奇偶校验位,它记录了这个字节中为1的位数是偶数(奇偶校验位=0)还是奇数(奇偶校验位=1)。如果其中一位被破坏,那么奇偶校验位就会改变,而与存储的奇偶校验位不匹配。同样,我们也可以发现存储的奇偶校验位的改变。 通过奇偶校验位内存可以检测到所有1位的错误。
纠错码机制存储两个或更多的附加位,并且如果有一位被破坏,它可以重建数据。 |
RAID 3: 位交叉奇偶校验 |
位交叉的奇偶校验组织结构。在RAID2级的基础上进行改进。 因为磁盘存储器可以检测到一个扇区是否正确地读出,所以可以使用一个唯一的奇偶校验位来检测和纠错。 其思想: 如果一个扇区被破坏,系统能够准确的知道是哪个扇区坏了,并对扇区中的每一位,通过计算其他磁盘上对应扇区的对应位的奇偶值来推断出该扇区是1还是0。如果其余位的奇偶校验位等于存储的奇偶校验位,则丢失的位是0,反之是1。
RAID3级比RAID2级优于节省了存储空间。 RAID3级比RAID1级的优势: - 减少了存储的开销 - RAID3使用N道数据拆分,所以对每个字节的读写散步在多张磁盘中,所以传输率是RAID1级的N倍;但另一方面每个磁盘都要参与到I/O请求中,所以它每秒钟支持的I/O操作数要少。 |
RAID 4: 块交叉奇偶校验 |
它也是用块级拆分,此外在一张独立的磁盘上为其他N张磁盘上对应的块保留一个奇偶校验位。如果一张磁盘发生故障,可以用其他磁盘对应的块和奇偶校验块进行数据重建。
它读取一个块时只访问一张磁盘,因此允许其他的请求在其他磁盘上执行==>每个访问的数据传输率较低,但是可以并行的执行多个读操作,产生较高的I/O传输率。
由于所有磁盘都可以并行的读,所以读取大数据和写入大数据时,传输率很高,因为奇偶校验也可以并行操作。
对于小数据的写入不能并行执行。写一个块需要执行以下2次旧值读取和2次新值写入操作:读取存储这个块的磁盘+存储奇偶校验位的磁盘;写入这个块+更新奇偶校验位。 |
RAID 5: 块交叉的分布奇偶校验 |
块交叉的分布奇偶校验位的组织结构。在RAID4上进行改进,将数据和奇偶校验位分布到所有的N+1张磁盘中,而不是N张磁盘存数据,1张存储奇偶校验位。 如下图所示, P0是 其余四个块的奇偶校验块;每张磁盘都存储了其他四张磁盘对应位置的奇偶校验块。 注意:奇偶校验块不能和其所对应的数据库存储在同一磁盘下。否则可能会同时丢失二者的信息。 ----------------------- P0 | 0 | 1 | 2 | 3 | ----------------------- 4 | P1 | 5 | 6 | 7 | ----------------------- 8 | 9 | P2 | 10 | 11 | ----------------------- 12 |13 | 14 | P3 | 15 | ----------------------- 12 |13 | 14 | 15 |P4 | ----------------------- |
RAID 6: P+Q冗余 |
P+Q冗余方案。与RAID5相似,引入了额外的冗余信息。 |
选择RAID级别应该考虑以下的因素:
重建故障磁盘上数据的时间:RAID1最简单,直接从另一张磁盘中拷贝即可得到;其他级别的重建需要访问磁盘阵列中所有其他的磁盘来进行重建,比较复杂,耗时较长。
RAID0 - 可以用于数据安全不是很重要的高性能应用。
RAID2和RAID4被RAID3级和RAID5级所包含,所以一般RAID的选择只在RAID0,RAID1,RAID3和RAID5,RAID6上进行。
而RAID3的比特级拆分不如RAID5的块级拆分,RAID5在大数据上与RAID3同样好的数据传输率,同时对小数据的传输使用更少的磁盘,其并行性会减少延迟。实际中RAID3的性能会比RAID5的更差。
==>那么问题就变成如何在RAID1,RAID5和RAID6上进行。
RAID6级比RAID5具有更高的可靠性,可以用于数据安全十分重要的应用。
RAID1:提供较好的写操作的性能,在例如数据库系统日志文件的存储这类的应用中使用广泛
RAID5:相比RAID1需要较低的存储负载,但是写操作具有更高的开销。对于经常用读操作而很少进行写操作的应用,RAID5是首选。
此外,设计者还要考虑到磁盘陈列包含的磁盘的数量,每个奇偶校验位应该保护多少位数据?
RAID的实现还需要靠考虑硬件层的因素。
RAID可以不改变硬件层,只在软件层上实现=>软件RAID(software RAID);具有硬件支持的系统称为硬件RAID(hardware RAID)系统。
硬件RAID能够实现使用非易失性RAM在需要执行的写操作执行之前记录它们。发生故障,系统恢复时,可以从非易失性RAM中读取未完成写操作的信息,并完成它们。
如果没有这种硬件支持,据需要通过其他方式,检查在故障前只有部分写入的块。
潜在故障(latent failure)或位腐(bit rot):虽然写入成功,也可能存在其他的数据损坏,如:制作缺陷或者在相邻轨道重复写入导致的数据损坏。
擦洗(scrubbing): 为了尽量减少数据丢失,好的RAID控制器会进行擦洗。即:在磁盘空闲期间,对每张磁盘的扇区进行读取,如果发现无法读取,则数据从RAID组织的其它磁盘进行恢复,并重新写入。如果物理扇区被破坏,磁盘控制器可以以将逻辑扇区地址重映射到磁盘上其他的物理扇区的地址。
热交换(Hot swapping):在不切断电源的情况下将出错的磁盘用新的磁盘进行替换。由于磁盘的替换不需要等待系统关闭这段时间,因此减少了平均恢复时间。可以通过为每张磁盘提供一张空闲磁盘,当故障发生时,可以利用空前磁盘直接替换,这样减少了数据丢失的机会,也减少了平均恢复时间。
RAID系统也需要考虑到电源、磁盘控制器或者系统互联接口 都可能发生故障。==> 备用电源
RAID的概念可以推广到其他存储设备,如:磁带阵列,无线系统上的数据广播(数据拆分+奇偶校验)
常用的第三级存储:磁带,光盘
光盘CD的存储了约为640-700M。价格便宜。
数字视频光盘DVD可以替代光盘,存储更大的数据。例如,蓝光DVD格式可以存储27-54G的数据。
CD和DVD驱动器的激光头组件更重,所以它们的寻道时间比磁盘驱动器更长,其数据传输率也低于磁盘。
可记录一次的光盘(CD-R,DVD-R,DVD+R):容量大,寿命比磁盘更长,可以再远程存储和移除,==>适用于数据的归档存储。因为不能被重写,所以可用于存储不更改的信息,如:审计追踪信息。
可多次重写的版本(CD-RW,DVD-RW,DVD+RW,DVD-RAM):也可以用于数据归档。
自动光盘机(jukebox):是存储大量的光盘的设备,可以按照需求自动将光盘装载到少量驱动器中的一个上。这样的系统的存储总量是若干个TB。机械手可以对光盘进行装载和卸载,时间是几秒级,这比光盘的访问时间要长很多。
磁带的速度低于磁盘和光盘,并且它只能顺序存取,不支持随机访问。
磁带主要用于备份,存储不经常使用的数据,以及作为将数据从一个系统转到另一个系统的脱机介质。
磁带相当可靠,但是磁带能可靠读写的次数有限。
磁带的容量取决于磁带的长度、宽度和读写头所能读写的密度。不同类型的磁带可存储的容量也不同,从几个G,到几百个G不等。
自动磁带机:类似于自动光盘机,可以存放大量的磁带,并有少量用于安装磁带的驱动器。存储的数据最大范围可达到若干PB,存取时间在几秒到几分钟。
磁带驱动器和磁带库的成本高,所以对于大量应用而言,备份数据到磁盘驱动器更划算。
一个数据库被映射为多个不同的文件(file)。文件由底层的OS来维护,永久的存储在磁盘上。
一个文件在逻辑上组织成为记录的一个序列。每个文件分成定长的存储单元,称为块(block)。
块是存储分配和数据传输的基本单元,多数数据库默认使用4-8KB大小的块。当创建数据库时,可以指定块大小。
一个块可以包含多条记录。要求每条记录存储在单个块中,即:没有一条记录是部分包含在一个块中的,以加速数据访问。
关系数据库中,不同关系的元组通常具有不同的大小,记录可分为定长记录和变长记录。
type instructor = record
ID varchar(5);
name varchar(20);
dept_name varchar(20);
salary numberic(8,2);
end
假设每个字符占用1个字节,假设使用53个字节存储instructor记录。这种方式存在的问题:
变长记录以下面几种方式出现在数据库中:
实现变长记录需要解决的两个关键问题:
一条有变长属性的记录:定长属性+变长属性。其组成格式:
10.5研究了如何在文件结构中表示记录。
关系是记录的集合,接下来就是看如何在文件中组织记录。
通常每个记录存储在一个文件中,但是多表聚簇文件组织(multitable clustering file organization)中,几个不同的关系的记录存储在同一个文件中。
顺序文件(sequential file)是为了高效处理按某个搜索码的顺序排序的记录而设计的。顺序文件组织形式使用指针按顺序连接记录。
搜索码(search key)可以使任意一个属性或属性的组合。
执行插入的过程:
插入过程的缺点:
虽然通常一个关系存储在一个文件中,这样可以简化数据管理。
但是,将多个关系存储在一个文件中,或者在一个块中存储多个关系的记录也很有用。
多表聚簇文件组织(multitable clustering file organization)中,是一种在每个块中存储两个或者更多个关系的相关记录的文件结构。
元数据(meta data):数据的数据。
数据字典(data dictionary)/ 系统目录(system catalog):存储元数据的结构
系统必须存储到数据字典中的内容可以包括以下:
关系的名字 关系中的属性名字 属性的域和长度 视图的名字和视图的定义 完整性约束 |
授权用户的名字 关于用户的授权和账户信息 用于认证用户的密码和其他信息 |
记录关系的描述数据或统计数据: 每个关系中元组的数目 每个关系所使用的存储方法(聚簇或非聚簇) |
记录关系的存储组织(顺序、散列、或堆): 如果关系存储在操作系统文件中,数据字典会记录包含每个关系的文件名。 如果数据库把所有关系存储在一个文件中,数据字典可能会将每个关系中记录的块记在如链表这样的数据结构中。 |
记录每个关系的索引信息: 索引的名字 被索引的关系的名字 在其上定义索引的属性 构造的索引的类型 |
通常使用数据库中存储关于数据库本身的元数据:
数据库系统的主要目标之一是:减少磁盘和存储器之间传输的块数目。主存储器中保留所有的块时不可能的。
缓冲区(buffer) 是主存储器中用于存储磁盘块拷贝的那部分。每个块总有一个拷贝放在磁盘上,但是它可能比缓冲区中的拷贝旧。
缓冲区管理器(buffer manager)是负责缓冲区分配的子系统。
应用程序请求块的流程:
缓冲区管理器必须实现的技术:
缓冲区替代方法有:
缓冲区管理器也可以使用对某个特定关系的访问请求做的统计信息。例如:
缓冲区管理在使用块替换策略时,还要考虑到其他因素的影响。如:并发处理多个用户请求,例如:保留被延迟的请求所需要的块。
崩溃-恢复子系统对块提供了更加严格的约束。