文章目录
Chapter 10: Storage and File Structure
Storage Hierarchy
层次结构
基本存储(primary storage)
- 快速、易失:Cache、主存
辅助存储(secondary storage):又叫 联机存储(on-line storage)
- 不易失,快速:快闪、磁盘
三级存储(tertiary storage):又叫 脱机存储(off-line storage)
- 稳定,访问慢:磁带、光盘
示意图
![db-10-1](https://i-blog.csdnimg.cn/blog_migrate/41500ed26c22d787541e56dee0bb679f.webp?x-image-process=image/format,png)
特点
Cache (高速缓冲存储器) | 存在于主存与CPU之间的一级存储器 ;快速、价格高;易失;由硬件控制 |
Main memory (主存储器) | 用于存放可处理的数据的存储介质;易失;不够放下整个数据库 |
Flash memory (快闪存储器) | 电源关闭或故障时,数据能够保存;读快写慢 |
Magnetic-disk (磁盘存储器) | 数据存在旋转磁盘中;通常用于存储整个数据库 |
Optical storage (光学存储器) | WORM(Write-one, read-many)写一次读多次 |
Tape storage (磁带存储器) | 顺序访问,用于备份数据、归档数据 |
Magnetic Disks(磁盘)
组成
- read-write head (读写头)
- platter (磁盘):divided into circular tracks (磁道);each track divided into sectors;a sector (扇区,size typically 512 bytes) is the smallest unit of data can be read or written
- cyclinder
- Disk controller : interfaces between the computer system and the disk drive hardware
性能衡量
- access time
- seek time
- rotational latency
- data-transfer rate
File Organization(文件组织)
组织
块:每个文件分成定长的存储单元,称为块(block)。块是存储分配和数据传输的基本单元。大多数数据库默认4~8KB块大小。一个块含多条记录。
定长记录
文件头:在文件的开始处,分配一定数量的字节作为文件头(file header),包含有关文件的各种信息。
空闲列表:在文件头中存储被删除的第一个记录的地址,用这第一个记录来存储第二个可用记录的地址,依次类推。被删除的记录形成一条链表,称为空闲列表(free list)
插入:
-
使用文件头所指向的记录,并改变文件头的指针以指向下一个可用记录。
-
如果没有可用空间,新记录添加到文件末尾。
变长记录
方式:采用以下方式:
- 多种记录类型在一个文件中存储
- 允许一个或多个字段是变长记录类型(varchar)
- 允许可重复字段的记录类型(数组、多重集合)
一条记录的结构
一条有变长度属性的记录中属性连续存储,通常具有两部分:初始部分是定长属性,接着是变长属性
变长属性在记录的初始部分表示为一个对(偏移量,长度),其中:
- 偏移量表示在记录中该属性的数据开始位置
- 长度表示变长属性的字节长度
null值表示:使用空位图
例:如果salary是空值,则该位图的第4个位置置1,存储在12-19字节的salary值被忽略
分槽的页结构
结构:
- 记录条目的个数
- 块中空闲的末尾处
- 每个记录的位置和大小
特点:
-
实际记录从块的尾部开始连续排列,块中的空闲空间是连续的
-
指针指向块头记有记录实际位置的条目,而不是直接指向记录
![db-10-3](https://i-blog.csdnimg.cn/blog_migrate/16488e0841091a659f382e610ea3c1a0.webp?x-image-process=image/format,png)
插入:在空闲空间的尾部给插入的记录分配空间,并且将包含此记录大小和位置的条目添加到块头中
删除:分两步:
- 它所占用的空间被释放,并且它的条目被设置成被删除状态
- 块中被删除记录之前的记录被移动,使得由删除产生的空闲空间被重用,并且所有空闲空间存在于块头数组的最后一个条目和第一个记录之间
Organization of Records in Files(文件中记录的组织)
顺序文件组织(Sequential File Organization)
目的:为了高效处理按某个搜索码的顺序的记录而设计的
搜索码:一个属性或者属性的集合,不一定是主码、超码
指针链管理: 通过指针把记录链接起来,指向搜索码下一条记录
删除:直接用指针跳过连接,并将删除部分加入空闲列表
插入:如果有空闲空间,则直接插入;如果没有,则将记录插入到溢出块中;两操作都通过指针实现
注意:需要不时地重新组织文件以恢复顺序;文件重组时,重组代价高
![db-10-4](https://i-blog.csdnimg.cn/blog_migrate/6cfc748f5091089e63270361f7cee290.webp?x-image-process=image/format,png)
多表聚簇文件组织(Multitable Clustering File Organization)
目的:为高效执行连接操作设计
缺点:处理其他类型查询变慢
组织:用指针把这个关系的所有记录链接起来
![db-10-5](https://i-blog.csdnimg.cn/blog_migrate/cfbdd05c7a906e891831bc77f3c1d975.webp?x-image-process=image/format,png)