数据库系统实现(第二版)学习笔记——第2章 辅助存储管理器

数据库系统实现(第二版)学习笔记——第2章 辅助存储管理器

辅助存储管理器

辅助存储管理器磁盘和其他能够存储大量需要长期保存的数据的设备。

首先,回顾存储器层次,其设备的访问速度递减而存储空间递增。 然后,研究数据是如何表示的,讨论关系元组或记录对象是如何被存储的。

1.存储器层次

1.1 存储器层次

一个典型的计算机系统包括几个不同的可以存储数据的不见。这些部件的数据存储容量的范围至少有7个数量级,其访问速度范围也超过7个数量级。具有最小容量的设备提供最快的访问速度,其每个字节的价格也最高。存储器的层次结构如图所示:
在这里插入图片描述

高速缓存(Cache)

一个典型的计算机有1M或更多的高速缓存。当处理器需要数据和指令时,数据和指令就会被从内存移到高速缓存中,处理器访问高速缓存的数据只需几纳秒。

主存储器(Main Memory)

主存是计算机的活动中心。可以认为,发生在计算机中的每一件事情,不论是指令的执行还是数据的操纵,都是作用于驻留在内存上的信息上。

辅助存储器(Secondary Storage)

典型的辅助存储器是磁盘。一个计算机可以有好几个磁盘。

第三级存储器(Tertiary Storage)

与辅助存储器相比,其读写时间要长的多,但是其容量比磁盘大得多。每个字节话费比磁盘小。

1.2 在存储器层次建传送数据

正常情况下,数据在相邻层之间进行传输。在第二级和第三级间,由于访问想要的数据或查找指定的位置以存储数据会耗费大量时间,所以当需要数据时,每一层的访问都会被组织起来以便与其下层传送大量数据。

对于理解数据库系统特别重要的是,磁盘被划分为磁盘块(也称为,或者像操作系统称为),每块的大小是4~64kb。整个块被从一个称为缓冲区的连续内存区域中移进移出。 因此,加速数据库的关键在于安排好数据,使得当某一个磁盘块中有数据被访问时,该块上的其他数据也需要被访问。

1.3 易失和非易失存储器

存储设备的一个特性是其是易失的还是非易失的。易失的断电数据会丢失,非易失的断电数据不会丢失。

易失性问题是一个很重要的问题,因为DBMS颇具特色的性能之一就是,即便在发生错误,例如电源故障的情况下仍有能力保留其数据

磁和光材料能在断电的情况下保存数据。因此,原则上讲,所有的辅助存储器和第三级存储都是非易失的。在DBMS中复杂性的一个重要原因是如下需求:数据库中的任何修改都不能认为是最终有效的,直到该修改被存储到非易失性的辅助存储器中

1.4 虚拟存储器

典型的软件运行在虚拟存储器中,它是一个地址空间,大小一般是32位,即在虚拟存储器中有4GB。操作系统管理虚拟存储器,让它的一部分留在内存中,剩下的保存在磁盘中。内存和磁盘间的数据传送以磁盘块为单位。 虚拟存储器是操作系统和操作系统运用机器硬件的产物,它不是存储器层次之一。

2.磁盘

辅助存储器的使用是数据库管理系统的重要特性之一。而辅助存储器几乎都是基于磁盘的。这样,为了说明DBMS实现中采用的许多思想的理由,我们必须详细地研究磁盘操作。

2.1 磁盘结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6CEbfuRN-1645155556515)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/7158C0AC-DD1E-4A8D-B8E5-155AC4B8EC20.png)]

2.2 磁盘控制器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WQNiBWKt-1645155556515)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/90CDC584-900F-4BE2-AB43-79A290231320.png)]

一个或多个磁盘驱动器被一个磁盘控制器控制,磁盘控制器是一个小处理器,能够完成以下功能:

  • 控制移动磁头组合的机械马达,将磁头固定在一个特定半径位置以读写某一柱面任何磁道。
  • 从磁头所在柱面的扇区选择一个扇区。控制器也负责识别何时主轴已经旋转到了所要求的扇区正移动到磁头下面的那个点。
  • 将从扇区中读到的二进制位传送到主存。
  • 将一个或多个磁道缓存在磁盘控制器的内存中。

2.3 磁盘存取特性

存储(读或写)一个磁盘块需要3步,每一步都有相关的延迟:

  • 磁盘控制器将磁头组合定位在磁盘块所在磁道的柱面上所需要的时间即寻道时间
  • 磁盘控制器等待访问块的第一个扇区旋转到磁头下。此时间称为旋转延迟
  • 磁盘控制器读写数据时,数据所在扇区和扇区间的空隙经过磁头,此时间称为传输时间

寻道时间、旋转延迟和传输时间的总和称为磁盘的延迟。

3.加速对辅助存储器的访问

可以做一些事情来减少磁盘的平均访问时间,从而改进吞吐量(系统所能适应的每秒的磁盘访问次数)。

  • 将要一起访问的块放在同一个柱面上,这样可以经常避免寻道时间,也可能避免旋转延迟。
  • 将数据分隔存储在一个相对较小的磁盘上而不是放在一个大磁盘上。让更多的磁头组设备分别去访问磁盘块,可增加在单位时间内的磁盘块访问数量。
  • ”镜像磁盘“:把数据副本放在不同磁盘上,可以备份数据和一次访问多个磁盘块。
  • 在操作系统、DBMS或磁盘控制器中,使用磁盘调度算法选择读写请求的块的顺序。
  • 预先将预期被访问的磁盘块取到主存储器中。

3.1 计算的I/O模型

I/O开销的主导地位:执行磁盘读写所花费的时间或许要比用于操纵主存中的数据所花费的时间长得多。这样,块访问(磁盘I/O)次数就是算法所需要的时间的近似值,而且应该被最小化。

3.2 按柱面组织数据

由于寻道时间占平均块访问时间的一半,将一些可能被一起访问的数据,例如关系,存储在单个柱面上或者几个邻近的柱面上是有意义的。事实上,如果我们选择在一个单个磁道上或者在一个柱面上连续地读所有块,那么我们可以只考虑一次寻道时间和第一次旋转等待时间,而忽略其他时间。这样,从磁盘上读写数据的速度接近于理论上的传输速度。

3.3 使用多个磁盘

如果我们用多个磁盘(每个磁盘都具有独立磁头组),来代替一个磁盘(其多个磁头锁定在一起),常常能够提高我们系统的性能。

因此,使用几个磁盘可以提高数据库系统的能力,使其处理大量的磁盘访问请求。分割的技术可以提高大数据库对象(占据很多磁盘块的对象)的访问速度。

3.4 磁盘镜像

有两个或多个磁盘保留同样数据副本是有意义的。这些磁盘被称为相互镜像。可以增强系统可靠性。

如果我们有n个磁盘,每个磁盘保留相同的数据,则我们读磁盘块的速率将提高n倍,但是写磁盘块的速度却没有任何提高,原因是一个新磁盘块必须被写到n个磁盘的每一个上。

3.5 磁盘调度和电梯算法

提高磁盘系统吞吐率的另一个方法是让磁盘控制器在若干请求中选择一个来首先执行。

调度大量块请求的一个简单有效办法是电梯算法。把磁头看作是做横跨磁盘的扫描,从柱面最内圈到最外圈,然后再返回来,正如电梯做垂直运动,从建筑物的底层到顶层,然后再返回来。当磁头通过柱面时,如果有对该柱面上的块的请求,磁头就会停下来,对其进行读写。然后磁头沿着其正在进行的方向继续移动,直到遇到下一个包含要访问块的柱面。如果在前方不再有访问请求,磁头就朝相反方向移动。

3.6 预取和大规模缓冲

我们对加快某些辅助存储器的算法的最后一个建议被称为预取,也称为双缓冲,在一些应用中,我们能够预测从磁盘请求块的顺序。如果这样,就能在需要这些块之前将它们装入主存。这样做的好处是能够较好地调度磁盘,通过采用诸如电梯算法等,减少访问块所需要的平均时间。

4.磁盘故障

磁盘可能发生故障的几种方式:

  • 间断性故障:读或写一个扇区的某次尝试没有成功,但是经过反复尝试,又能成功地读或写。奇偶校验是检查间断性故障的一种方法。
  • 介质损坏:一个或多个二进制位永久地损坏,不管我们尝试多少次,都不能正确地读一个扇区。
  • 写故障:当我们企图写一个扇区时,既不能正确地写,也不能检索先前写入的扇区。一种可能的原因是写扇区的过程中发生了供电中断。稳定存储是一种组织磁盘的技术,可以使得介质损坏或者写故障不会导致数据永久性丢失。
  • 磁盘崩溃:磁盘故障最严重的形式,整个磁盘突然地变为永久不可读。

4.1 间断性故障

如果尝试读一个磁盘块,但该磁盘块的正确内容没有被传送到磁盘控制器中,就是发生了间断性故障。

4.2 校验和

读操作来决定一个扇区的好/坏状态。每个扇区有若干个附加位,称为校验和。附加位的设置取决于存储在那个扇区的数据位的值。读出时如果发现校验和对数据位不适合,那么我们就知道有读错误。

校验和的一种简单形式是基于扇区内所有位的奇偶性。如果在二进制的集合中有奇数个1,我们就说数据位有奇数奇偶性并增加值为1的奇偶位。同样,如果在二进制的集合中有偶数个1,我们就说数据位有偶数奇偶性并增加值为0的奇偶位。从而:在二进制位的集合与它们的奇偶位中,1的个数总是偶数。这样每个扇区将有偶数奇偶性

在读或写数据位及其奇偶位的过程中,任何一个位错误都会导致具有奇数奇偶性的位序列。磁盘控制器可以通过判断1的个数来判定是否存在错误。

4.3 稳定存储

校验和可以帮助我们判断介质故障的存在,但是不能帮助我们纠正错误。 但是我们可以在一个磁盘或多个磁盘执行一个被称为稳定存储的策略。

扇区是成对的,每一对代表一个扇区内容X。我们把代表X的扇区对分别称作“左”拷贝XL和“右”拷贝XR。这样我们假定,如果度函数对XL或XR返回一个好值w,那么是wX的真实值。

稳定存储的写策略是:

  • X的值到XL。检查是否返回值的状态为“好”,即在写入的拷贝中奇偶校验是正确的。如果不是“好”,则反复写。如果在若干次写尝试之后,我们仍没有成功地将X写到XL,可以认为在该扇区中有一个介质故障,必须采用诸如备用扇区代替XL这样的补救。
  • 对XR重复前面的步骤。

稳定存储的读策略是:交替尝试读取XL和XR直到返回一个好值。预先设定一个大数字,若尝试次数超过这个数字后仍没有好值返回,才确定是X真正不可读。

4.4 稳定存储的错误处理能力

介质故障:在将X存入扇区XL和XR后,如果两者之一出现一个介质故障并且变为永久不可读,我们总是能从另一个扇区读取X。如果两个扇区都坏了,那么就不能读取了,但是这种情况很少见。

写故障:假设当我们写X的时候,有一个系统故障,例如电源断电。那么X在主存中被丢失是可能的,同时正被写入的X的拷贝也将被篡改。例如,半个扇区可能被写入X的部分新值,与此同时另一半扇区保留着原来的值。当系统变为可用,我们测试XL和XR时,我们确信能够决定X的旧值或者新值。可能的情况有以下几种:

  • a)故障在我们写XL的时候发生。那么我们将发现XL状态是“坏”,但是我们还没有写XR,它的状态将是“好”,这样我们就可以得到X的旧值,将XR拷贝到XL,修复XL的故障。
  • b)故障在我们写XL之后发生。那么,我们预计XL将有状态“好”,并且我们可以从XL读取X的新值。XR可能是新值也可能是旧值,所以我们还需要将XL复制到XR

4.5 从磁盘崩溃中恢复

磁盘故障最严重的状态是“磁盘损坏”或“磁头损坏”,数据会被永久性的破坏,无法恢复。

但是可以通过一些方案减少由磁盘崩溃带来的丢失数据的风险。例如:冗余技术,其是对奇偶校验以及复制扇区思想的一种扩展。这类策略的一般术语是RAID(Redundant Array of Independent Disk ,独立磁盘的冗余阵列)。

这些方案都有一个或多个保存数据的磁盘(数据盘),再加上一个或多个保存信息的冗余盘。 当数据盘或者冗余盘崩溃时,其他磁盘可用于恢复磁盘故障,从而没有任何永久性信息丢失。

4.6 作为冗余技术的镜像

最简单的方案是镜像各个磁盘,称一个为数据盘,另一个是冗余盘。作为防止数据丢失的镜像,被称为RAID 1级。借助镜像和冗余方案,数据丢失的唯一方式是在第一个磁盘损坏正在被修复的同事,另一个磁盘也损坏了。但是这种概率是及其低的。

4.7 奇偶块

镜像磁盘的问题是它所使用的冗余盘与所拥有的数据盘一样多。不管有多少个数据盘,仅使用一个冗余盘,这种方法被称为RAID 4级的另一种方法。

在冗余盘中,第i块由所有数据盘的第i块奇偶校验位组成。也就是说,所有第i块的第j位,包括数据盘和冗余盘,在它们中间必须有偶数个1,而我们总是选取冗余盘的位使得这个条件为真。

:从一个数据盘读块与从任何一个磁盘读块没有什么差别。

:当我们写一个数据盘的一个新块的时候,我们不仅需要改变那个块,而且需要改变冗余盘的相应的块,以便它能保持为所有数据盘相应块的奇偶校验。

一个朴素的方法是读取n个数据盘的相应块,取它们的模2和,并重写冗余盘的块。这个方法要求不被重写的数据块的n-1次读,被重写数据块的一次写,以及冗余盘块的一次写。这样总数是n+1次磁盘I/O。

一个更好的方法是只关注正在被重写的数据块i的老版本和新版本。如果我们取它们的模2和,就可以知道所有磁盘上编号i的块中哪个位置的1的总数有变化。由于这些变化总是一种方式,1个个数由任意一个偶数变为一个奇数。如果我们改变冗余块的相同位置,那么每个位置的1的个数重新变为偶数。这样只需要使用4个磁盘I/O:

  • 读要改变的数据盘上的旧值

  • 读冗余盘的相应块

  • 写新数据块

  • 重新计算并写冗余盘的块

举例说明

现有3个数据盘:盘1:11110000,盘2:10101010,盘3:00111000,1个冗余盘:盘4:01100010,假设盘2的块由10101010变为11001100。

首先求盘2上旧值和新值的模2和,得到01100110,这个结果告诉我们必须要改变冗余盘第一块的位置2、3、6、7的值。读冗余盘得到:01100010,那么通过改变相应位置可以得到新的冗余块:00000100。

故障恢复:假如其中一个磁盘崩溃了,我们应该怎么做。其实不管故障盘是冗余盘还是数据盘,我们只需要新换一个磁盘。重新计算块,因为所有磁盘相应位的1的个数是偶数,遵循的规则:任何位置的位是所有其他磁盘的相应位置所有位的模2和。

4.8 一种改进:RAID 5

RAID 4级策略有一个瓶颈,就是不管采用什么更新磁盘的方案,我们都需要读和写冗余盘的块。如果有n个数据盘,那么对冗余盘的磁盘写次数,将是任何一个数据盘平均磁盘写次数的n倍。

上面磁盘恢复的规则对数据盘和冗余盘是一样的,都是取其他盘相应位的模2和。因此我们可以把每个磁盘作为某些块的冗余盘来处理,这种改进称为RAID 5级。

4.9 多个盘崩溃时的处理

有一个纠错码原理,允许我们处理多个磁盘崩溃。前提是使用足够多的冗余盘。这个策略导致最高的"RAID 6级"。

5. 组织磁盘上的数据

用一个记录来表示一个数据元素,在磁盘块中的连续字节存放。一个磁盘块中仅存放一个关系的元素是一种常见的组织方式。

5.1 定长记录

最简单类型的记录由定长字段组成。元组中的每个属性对应一个字段。 通常会根据情况使所有字段的起始地址是4或8的倍数。

通常记录以记录的首部开始,首部是关于记录本身信息的一个定长区域。例如,我们可能要在记录中保存如下信息:

  1. 指向该记录中存储数据的模式的指针。
  2. 记录长度。
  3. 时间戳,标识记录最后一次被修改或被读的时间。
  4. 指向记录的字段的指针。

举例说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ld09yLJm-1645155556516)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/CE0A220D-5A24-434A-ACFA-C335E570B60A.png)]

5.2 定长记录在块中的位置

表示关系元组的记录存储在磁盘块中,当我们需要存取或修改记录时,记录(与整个块一起)就被移进主存。存储记录的块的格式如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Stf8p6Ry-1645155556516)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/40A20580-DE39-491E-9C6E-FE1488659008.png)]

除了记录,它还有一个块首部,存储诸如一下各种信息:

  1. 与一个或多个其他块的链接,这些块构成一个块的网格。

  2. 关于这个块在这样一个网格中所扮演的角色的信息。

  3. 关于这个块的元组属于哪个关系的信息。

  4. 一个给出每一条记录在块内偏移量的目录。

  5. 指明块最后一次修改或存取时间的时间戳。

6. 块和记录地址的表示

在内存中时,块地址是其第一个字节的虚拟内存地址,且块内记录的地址是该记录第一个字节的虚拟内存地址。 但是在磁盘中,有一个字节序列描述块在DBMS可访问的整个数据系统中的地址,即数据库地址空间地址:磁盘的设备id,柱面号等等。 记录可通过它所在的块和其所在第一个字节在块内的偏移量来标识。

6.1 客户机-服务器系统中的地址

通常,数据库系统包括一个服务器进程,为一个或多个客户端进程提供二级存储器数据,客户端进程是使用数据的应用。

客户端应用使用常规的“虚拟”地址空间。操作系统或者DBMS决定地址空间的哪些部分在内存中,而硬件则是将虚拟地址空间映射到主存的物理地址。简单的把客户端地址空间当做主存就行了

服务器的数据处于数据库地址空间,空间中的地址涉及块或块内偏移。在这个地址空间中表示地址的方法有:

  • 物理地址。物理地址是字节串,据此可以确定二级存储系统内块或记录的位置。下面各项都使用物理地址的一个或多个字节来指明。

    a) 存储所连接的主机

    b) 块所在的磁盘或其他设备的标识符

    c) 磁盘的柱面号

    d) 柱面内磁道号

    e) 磁道内块号

    f)(在一些情况系下)记录的起始地址在块内的偏移量

  • 逻辑地址。每一个块或记录有一个逻辑地址,这是具有某个固定长度的一个任意字节串。存储在磁盘上一个已知位置的映射表将逻辑地址与物理地址联系起来。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMeIJxDv-1645155556517)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/46C7391C-7934-47C3-BCF9-6B4E3748B529.png)]

6.2 逻辑地址和结构地址

逻辑地址其实还是一个索引,当物理地址改动的时候,只需要改变映射表就行,不用再像物理地址那样直接找到记录再改里面的相应值。

结构化地址实际上就是物理地址和逻辑地址的组合。一个物理和逻辑地址的组合是在每一个块内存储一个偏移量表,它保存块内记录的偏移量,偏移量的记录从尾部开始记录, 记录的地址是块的物理地址加上该记录在此块的偏移量表项中的偏移量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8kZKl7Kc-1645155556517)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/03B7F733-2A27-4CA5-B7FF-C44E2A1CE517.png)]

6.3 指针混写

每一个块、记录、对象或者其他可引用的数据项都有两种地址形式:它在服务器中的数据库地址和内存地址

在内存中则使用内存地址,在磁盘中使用数据库地址。如果在内存中时通过两种地址都可以找到该块。使用内存地址更加高效,使用数据库地址要更加费时,因为需要一个表将数据库地址转为内存地址。因此提出来指针混写。

指针混写的思想把块从磁盘移到主存中时,块内指针可以从数据库地址空间转换为虚拟地址空间,也就是把块内的数据库指针混写为内存指针,主存中有一个转换表可以实现把数据库地址转换为内存地址,所以一个指针包含:一个二进制位(表示是数据库指针还是内存指针)、数据库或内存指针。

指针混写的实现

  • 自动混写:一个块进入主存后,为它所有指针和地址定位,不在转换表中就放到转换表中;如果发现已经存在,说明这个地址对应的块已经在主存了,就用内存地址代替数据库地址,如果不在转换表中,就不混写。这样当发现指针p没混写,就把其对应的块拿过来,就混写了。
  • 按需混写:区别在于块进入主存后,只把它的指针和地址放到转换表中,不进行混写,当跟踪某个内存块指针P,再将它混写

6.4 块返回磁盘

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

6.5 被钉住的记录和块

一个块要写回磁盘了,要是有其他块还有指向该块的指针,该块就被钉住了,钉住的块回去之前得处理一下。

处理方法有两种:一是将对一个内存地址的一系列引用保存为附加在该地址在转换表中的表项上的链表;二是内存地址比数据库地址短得多时,可以在指针自身空间中创建链表。

7. 变长数据和记录

变长字段、重复字段、可变格式、极大的字段

7.1 具有变长字段的记录

将所有定长字段放在变长字段之前,然后在记录首部写入以下信息: 记录长度、指向所有除第一个之外的变长字段起始处(偏移量)的指针。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1IlUMz20-1645155556517)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/876113AE-5852-4B85-8333-CCC28643DB22.png)]

7.2 具有重复字段的记录

如果记录中定长字段F出现的次数可变。将字段F的每次出现放在一起,在记录首部放一个指针,让他指向字段F出现的第一个位置。 ,记录长度里增加重复个数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dI12mynp-1645155556517)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/958BFF67-8C23-4641-9DE1-9326B845DB44.png)]

或者是定长和变长分开放:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UT8JIk85-1645155556518)(file:///C:/Users/j30011431/AppData/Roaming/eSpace_Desktop/UserData/j30011431/imagefiles/FDD911BC-9340-49FA-BA94-B14833FF1771.png)]

7.3 可变格式的记录

可变格式记录最简单的表示是带标记的字段序列,每个带标记的字段由字段值以及置于字段值之前的关于这个字段的角色的信息:属性或字段名、字段类型、字段长度。

7.4 不能装入一个块中的记录

出现在一个块中的记录的一部分被称为记录片段。一个具有多个片段的记录称为跨块记录。 如果记录能跨块,则每条记录和记录片段需要一些额外信息:

  1. 每条记录或片段首部必须包含一个二进制位,指明它是否为片段。
  2. 如果是片段需要几个二进制位,指明它是否为它所属的记录的第一个或最后一个片段。
  3. 指向其他片段的指针。

7.5 BLOB

图像或视频等的值被称为二进制大对象(BLOB),针对字段值为BLOB时,必须重新考虑其存储和检索。

存储:存储的块在磁盘的一个或多个柱面上连续分配,还有存储在多个磁盘上。

检索:不再传送整个块,客户端请求BLOB内部的部分,而不必接收整个BLOB,因此需要合适的索引结构。

7.6 列存储

如果将关系按列存储,由于属性值都是已知的类型,可能进行数据压缩。

8. 记录的修改

8.1 插入

如果关系的记录没有特定存储顺序,只需找到那条记录应放置的块。如果记录必须有序存储,则可能需要在块中滑动记录以便在合适的地点得到所需的空间。

如果需要滑动记录,在每一个块的首部建立一个“偏移量表”,其中指针指向块中每一记录的位置。从块的外部指向记录的指针是一个结构化地址。即块地址和偏移量表中该记录表项的位置。

如果能在当前块中找到空间,简单地在块中滑动记录,调整偏移量表中的指针。新记录被插入到块中,在此块的偏移量表中添加指向此记录的新指针。

但是块中可能没有空间用于新纪录的存储,有两种方法,这两种方法也可以结合使用:

  • 在邻近块中找空间
  • 创建一个溢出块

8.2 删除

删除记录时,可以回收记录空间。如果使用偏移量表,且记录可以在块内滑动,那么可以让块中空间紧凑,以使块中间总有一个未用的区域。

如果记录不能滑动,那么需要在块首部维护一个可用空间列表。当向块中插入一条新纪录时,可以知道可用区域在哪,有多大。删除记录时,在记录处放一个删除标志。

8.3 修改

定长记录被修改,对存储系统没有影响。变长记录修改,可能会涉及记录滑动,或者创建溢出块。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cda备考学习学习笔记——基础知识篇(二)主要涉及了计算机科学与技术领域的基本概念和知识。 首先,它介绍了计算机网络的基础知识。网络是将多台计算机通过通信链路连接起来,使它们能够相互通信和共享资源的系统。笔记中详细介绍了网络的组成、拓扑结构和通信协议等重要内容。 其次,笔记还解释了计算机系统的基本组成。计算机系统由硬件和软件两部分组成,其中硬件包括中央处理器、存储器、输入输出设备等,而软件则分为系统软件和应用软件。笔记详细介绍了各种硬件和软件的功能和作用。 此外,笔记还对数据库管理系统进行了介绍。数据库管理系统是一种用于管理和组织数据的软件系统,它能够实现数据的存储、检索和更新等操作。笔记中详细介绍了数据库的概念、结构和操作等内容。 最后,笔记还包括了算法和数据结构的基础知识。算法是解决问题的一系列步骤和规则,而数据结构则是组织和存储数据的方式。笔记中介绍了常用的算法和数据结构,如排序算法、树和图等。 总之,通过学习CDA备考学习笔记中的基础知识篇(二),我们能够更好地理解计算机网络、计算机系统、数据库管理系统以及算法和数据结构等相关概念和知识。这些基础知识对于我们深入研究计算机科学与技术领域是非常重要的,也为我们日后的学习和工作奠定了坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值