数据库系统实现 第二章 辅助存储管理

来源:互联网 发布:windows redis自启动 编辑:程序博客网 时间:2024/05/29 08:43

这一章就是先讲讲存储器以及存储器中各个层次(高速缓存、主存、辅助存储器…),然后是数据库中的数据与存储器的交互,数据库数据的存储,查询,删除等等。

接下来就分别总结一下

存储器:

1.1存储器层次 :

  • 高速缓存: 数据和指令真实处理的地方,其实是主存储器和处理器之间的中介。

  • 主存储器:计算机的任何活动,无论任何数据和操作指令,都是对主存的中的内容进行操纵(一般是把主存中数据和指令转到高速缓存),就是我们平时所说的内存,比如小米6的6G内存。6G挺流畅反正我觉得。

  • 辅助存储器:基本就是平时说的磁盘,需要其中的内容的话就转到主存储器里,再操作。一个计算机可以有多个磁盘。相当于小米6的64G存储内存。

  • 第三级存储器:就类似光盘这种把,容量大,读写时间长

基本规律就是容量小的访问速度快,价格贵,比如处理器访问高速缓存只需要几纳秒,数据从主存转到处理器或高速缓存速度是10~100ns,而磁盘到主存传输数据一字节可能就得10ms,但是这个比较复杂,不简单是这样。(那么移动硬盘应该是第三级处理器了把,那它往磁盘写应该挺快的啊,不知道这个怎么解释)

1.2 存储器间传输数据

  • 高速缓存和主存:以一个高速缓存栈为基本单元,一般是连续的32字节

  • 主存和磁盘(主存储器和辅助存储器):磁盘数据被分为块,就是磁盘块,主存和磁盘就是通过磁盘块传数据

1.3 易失和非易失

  • 就是辅存和第三级存储器不易失,主存和高速缓存易失。

1.4 虚拟存储器

  • 虚拟存储器由操作系统管理,让它一部分留在内存,剩下的放磁盘上,它不算是存储器层次之一,所以前面也没说,这玩意应该挺麻烦,需要的可以去百度一下,有空再研究研究把。

下面开始说说磁盘

2.1 磁盘结构

一部分是几个盘,这几个盘放在一个轴上,跟糖葫芦一个意思,每个磁盘上面有多个磁道,磁道是多个同心圆,然后每个磁道被分成多个扇区,扇区之间有间隙,间隙被磁化为0或1,间隙就是标记扇区起点终点的,还记得刚才说的磁盘块吗, 就是一个或多个扇区,然后每个磁盘上有个磁头,就是查找数据的。

2.2 磁盘控制器

磁盘控制器,简单说就是控制磁盘数据转到主存储器里。

2.3 磁盘存取特性

想想道理很简单,首先得找到是那个磁道把,这叫寻道时间,然后再转到需要的扇区,这叫旋转延迟,诶哟找到了,可以传输数据了,传输数据的时间叫传输时间

这三个加起来就是磁盘的延迟。


一般对磁盘访问都比较慢,前面也说了,一个字节都10ms,所以得想想怎么加速。
3.1 加速对磁盘数据访问

首先得知道一点,(I/O)代价一般是占据主导地位的,执行磁盘读写花费的时间比数据在主存中的操纵要花费更多更多的时间

  • 尽量将数据存在一个柱面上,这样就大大减少了寻道时间,在这个面上一次性连续读入多个块

  • 使用多个磁盘,相当于分担了压力,并行处理

  • 磁盘镜像,存副本,核心也是并行处理

  • 磁盘调度和电梯算法:磁盘调度基本意思是磁盘控制器采取一定的策略应对磁盘块的请求,电梯算法就是其中一种,电梯算法就是磁头从圆心沿着半径方向垂直到圆周再返回,中间遇到有请求的磁道就停下来找相应的扇区,完成之后接着电梯,跟人坐电梯一样。

4.磁盘故障

这个不想多bb了,再说吧

数据库存储

5.组织磁盘上数据

5.1 定长记录

定长记录从开始,首部记录的是

  • 一个指向该记录中存储数据的模式的指针
  • 记录长度
  • 时间戳
  • 指向记录的字段的指针

其中首部包括的是
- 一个指向该记录中存储数据的模式的指针
- 记录长度
- 时间戳

5.2 定长记录的存储

记录存储在磁盘块中,所以记录在磁盘和主存储器中的移动就是磁盘块的移动,每个块存储记录的信息之外,还有一个块首部,存储

  • 与其它块的连接关系
  • 这个块的信息
  • 块中元组是那个关系的
  • 给出每一个记录在块中的偏移量,类似索引
  • 块最后一次修改的时间戳

6 块和记录地址的表示

在内存中,块的地址是虚拟内存地址,在磁盘上时,块的地址是数据库地址空间地址,这个服务器地址会说到这个。后面的指针混写主要就是这两种指针的问题。

6.1 客户端和服务器地址

  • 客户端的不用多考虑,简单的把客户端地址空间当作主存就行了
  • 主要说说服务器地址,服务器地址处于数据库地址空间,这个地址空间表示地址空间方法是

    • 物理地址:物理地址是字节中串,可确定二级存储中记录和块的位置,可确定连接的主机,磁盘号,磁道,块号。
    • 逻辑地址:每一个块或记录有一个逻辑地址(固定长度的字节串),根据一个存储在磁盘上的映射表将逻辑地址和物理地址联系起来。

而且物理地址一般很长,如果为所有的记录或块都建立物理地址的话很伤,不现实。

6.2 逻辑地址和结构地址

  • 逻辑地址有什么用呢,其实还是一个索引,当物理地址改动的时候,只需要改变映射表就行,不用再像物理地址那样直接找到记录再改里面的相应值(一般应该存在头部里我举得)。
  • 然后结构化地址实际上就是物理地址和逻辑地址的混合,一个物理和逻辑的组合是在每一块内存储一个偏移量表,保存块中每个记录的偏移量,偏移量的记录在表头,记录从尾部记录,类似两个栈对一块。
    块内可以移动记录,如果记录很大,需要存在其他块里,需要一个转向地址,指向下一个块,删除的话就留下一个删除标志,使下次查找的时候知道删除信息,做出相应修改。
    这样的话记录的地址就是块的物理地址加上偏移量。

6.3 指针混写

  • 前面刚开始说过了,记录或块的地址有虚拟空间地址和数据库地址,如果数据项在内存中,就直接用内存地址,在磁盘上就要用数据库地址了,所以为了减小每一次都将数据库地址转成主存地址的代价,提出了指针混写
  • 指针混写:块从磁盘到主存储器时,把块内的数据库指针“混写”(不知道为什么要用这个词,很装逼)为内存指针,主存中有一个转换表可以把数据库地址转换为内存地址,所以一个指针包含:

    • 一个二进制位表示是数据库指针还是内存指针
    • 数据库指针或者内存指针
  • 指针混写策略:

    • 自动混写:
      一个块进入主存后,为它所有指针和地址定位,不在转换表中就放到转换表中,这样的话,当添加一个数据库地址到表中,如果发现已经存在,说明这个地址对应的块已经在主存了,就用内存地址代替数据库地址,如果不在转换表中,就不混写。这样当发现指针p没混写,就把其对应的块拿过来,就混写了。

    • 按需混写:
      区别在于块进入主存后,只把它的指针和地址放到转换表中,不进行混写,当跟踪某个内存块指针P,再将它混写。

6.4 块返回磁盘

  • 块返回磁盘必须解除混写,就是把所有内存地址变回数据库地址。

6.5 被钉住的记录和块

  • 什么意思呢,就是你要回去磁盘了,要是有其他块还有指向你的指针,你就被钉住了,钉住的块回去之前得处理处理后事,

7.变长数据和记录

  • 区别在于变长记录记录了除第一个变长字段的其他字段的位置(先固定字段再变长字段),就对不知道在哪的字段加个指针。
  • 重复字段的记录,在上面的基础上加个重复次数(放在记录长度里)
  • 还有一种就是记录定长的,通过记录再索引找另外一个块。
  • 跨块存储需要做的就是分开的块挨个连起来,类似双向链表。

小结(重点部分):

  • 记录:记录由几个字段再加上记录首部组成,记录首部一般包括时间戳,记录长度,记录模式等信息,变长记录的话还需要加上找到变长字段的定位信息。
  • 块:块由块首部加上一条或多条记录,块的首部是偏移量表,里面有指向每个记录的指针(类似两个栈的栈顶对起来)
  • 跨块:就把跨块的记录用类似双向链表连起来
  • 数据库地址:可以是物理地址,直接指向对应的物理信息(主机号,磁盘号啥的),也可以是逻辑地址,通过映射表转化为物理地址(数据库地址转为内存地址的那个叫转换表,仔细想想是这个理儿)
  • 指针混写:磁盘块放到内存时,如果指针要被跟踪,则数据库地址要转换为内存地址,这个转换就是指针混写,有自动混写和按需混写。

差不多就这样了这一章,这编辑器有毒,总是往前跳

原创粉丝点击