数据库管理系统中的磁盘、文件、页和记录管理

1. 引言

数据库管理系统(DBMS)是一个复杂的软件系统,用于管理和操作数据库中的数据。DBMS需要有效地在磁盘和内存之间组织和管理数据,以确保高效的数据存储和检索。本文将详细介绍DBMS中关于磁盘、文件、页和记录的管理,以及不同文件组织方式对数据库操作的影响。

2. 磁盘和内存

在数据库系统中,数据处理通常在内存中进行,因为内存访问速度快。然而,随着数据量的增加,无法将所有数据都放在内存中,因此需要使用磁盘来存储数据。磁盘存储成本低,但访问磁盘数据的开销较大。这就要求DBMS在设计和实现中考虑如何有效地在内存和磁盘之间移动数据。

3. 文件、页和记录

3.1 记录

关系型数据库的基本数据单位是记录(行)。记录在内存中可以被修改、删除、搜索或创建。每个记录包含若干字段,这些字段对应数据库表中的列。

3.2 页

磁盘的基本数据单位是页,是从磁盘到内存之间传输的最小单位。为了在磁盘上表示关系数据库,每个关系存储在一个文件中,文件中的记录组织为页。

3.3 文件

每个关系(表)存储在一个文件中,文件中的记录按照特定的组织方式分布在页中。根据关系的模式和访问模式,数据库将决定使用的文件类型、页的组织方式、每页上记录的组织方式以及每个记录的格式。

4. 文件类型的选择

在数据库中,主要有两种文件类型:堆文件(Heap Files)和排序文件(Sorted Files)。对于每个关系,数据库会根据访问模式的I/O成本选择合适的文件类型。I/O操作的成本基于每次从磁盘读取或写入一页的数据量。

4.1 堆文件

堆文件是一种没有特定顺序的文件类型,记录可以任意存放在页面中。堆文件有两种主要实现方式:

4.1.1 链表实现

在链表实现中,每个数据页包含记录、空闲空间追踪器和指向前后页的指针。头页作为文件的起点,分隔满页和空闲页。当需要空间时,会分配空页并附加到空闲页部分的末尾。当空闲数据页变满时,它们会从空闲页部分移动到满页部分的前面。这样可以避免遍历整个满页部分来附加新页。另一个实现方法是在头页中保留指向满页部分末尾的指针。
在这里插入图片描述

4.1.2 页目录实现

页目录实现与链表实现不同,只使用链表来管理头页。每个头页包含指向下一个头页的指针及其条目,这些条目包含指向数据页的指针和数据页中剩余的空闲空间量。由于头页的条目存储了每个数据页的指针,数据页本身不再需要存储相邻页的指针。
在这里插入图片描述

4.2 排序文件

排序文件是一种按键排序的文件类型,页和记录按键排序。这些文件使用页目录来管理数据页,并根据记录的排序方式强制数据页的顺序。通过二分搜索,排序文件可以在logN的I/O成本内进行搜索,其中N是页数。而插入操作的平均成本为logN + N,因为插入记录可能会导致所有后续记录向后移动一位。
在这里插入图片描述

5. 记录类型

记录类型由关系的模式决定,分为固定长度记录(Fixed Length Records, FLR)和可变长度记录(Variable Length Records, VLR)。FLR包含固定长度字段,具有相同模式的FLR占用相同字节数。VLR包含固定和可变长度字段,记录头包含指向可变长度字段末端的指针。

  • 固定长度类型

  • 在这里插入图片描述

  • 可变长度类型

  • 在这里插入图片描述

  • 在这里插入图片描述

6. 页格式

6.1 固定长度记录页

页包含固定长度记录时,使用页头存储当前页上的记录数量。如果页是紧凑的,则记录之间没有空隙。插入时可以通过计算现有记录数量和每个记录的长度来确定下一可用位置。删除记录时,需要移动所有后续记录以保持页的紧凑性。

如果页是非紧凑的,页头通常存储一个额外的位图,将页分割成插槽并跟踪哪些插槽是空的。插入涉及找到第一个空位,将新记录放在相应的插槽中,然后设置该插槽的位。删除记录时,需要清除相应插槽的位,以便将来插入可以覆盖该插槽。
在这里插入图片描述

6.2 可变长度记录页

页包含可变长度记录时,不再保证每个记录的大小相同。为了解决这个问题,每页使用页尾维护一个插槽目录,跟踪插槽数量、空闲空间指针和条目。插槽目录从页的底部开始,而不是顶部,以便在插入记录时有空间增长。

插槽数量跟踪总插槽数量,包括已填充和空的插槽。空闲空间指针指向页中下一个空闲位置。插槽目录中的每个条目由[记录指针,记录长度]对组成。

如果页是非紧凑的,删除记录涉及找到记录在插槽目录中的条目并将记录指针和记录长度设置为null。将来插入时,记录将插入到空闲空间指针处,并在任何可用的null条目中设置新的[指针,长度]对。如果没有null条目,则为该记录添加一个新条目到插槽目录。插槽数量用于确定新插槽条目的偏移量,然后增加插槽数量。定期将记录重新组织为紧凑状态,删除记录以腾出空间进行将来的插入。

如果页是紧凑的,删除记录涉及删除记录在插槽目录中的条目。此外,需要将删除记录后的所有记录向页的顶部移动一位,并将相应的插槽目录条目向页的底部移动一位。插入时,记录插入到空闲空间指针处,如果所有插槽已满,每次添加一个新条目。
在这里插入图片描述

7. 操作成本

不同的文件类型和实现方式对数据库操作的成本有显著影响。

7.1 堆文件操作成本
  • 插入:堆文件的插入成本较低,因为记录可以添加到任何有空闲空间的页面。找到有空闲空间的页面的成本通常很低。
  • 搜索:搜索记录时,需要全表扫描,每次搜索操作的成本为N次I/O,因为记录是无序的,每个页面上的每个记录都需要被检查。
7.2 排序文件操作成本
  • 搜索:排序文件的搜索成本较低,可以使用二分搜索,I/O成本为logN。
  • 插入:排序文件的插入成本较高,平均情况下为logN + N,因为插入记录可能需要移动大量记录以保持排序。

8. 实例分析

8.1 堆文件

堆文件的主要优势是插入操作快速,因为记录可以添加到任何有空闲空间的页面。使用链表实现时,插入记录的成本可能会很高,因为需要遍历多个页面以找到有足够空间的页面。相比之下,页目录实现的插入操作更高效,因为头页中存储了每个数据页的空闲空间信息,减少了需要读取的页面数量。

8.2 排序文件

排序文件在搜索记录时具有显著优势,可以通过二分搜索快速找到目标记录。然而,插入记录的成本较高,因为需要保持记录的排序顺序。平均情况下,插入操作需要移动N/2个页面,每个页面需要一次读取和一次写入操作。

9. 总结

数据库管理系统中的数据存储和管理是一个复杂的过程。通过合理选择文件组织方式,可以优化数据库的性能。在设计和实现DBMS时,需要综合考虑数据的访问模式和操作成本,以选择最合适的文件类型和实现方式。堆文件适用于插入操作频繁且不需要快速搜索的场景,而排序文件则适用于需要高效搜索操作的场景。

这篇笔记详细介绍了DBMS中关于磁盘、文件、页和记录的管理,提供了理论基础和实际指导,为数据库的高效管理提供了有力支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/767801.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于电子画册的制作方法

在这个数字化飞速发展的时代,电子画册以其便捷的分享方式和环保的理念,逐渐成为艺术家和设计师的新宠。如果你也想将自己的作品集或品牌故事以电子画册的形式呈现,那么就跟随我们的脚步,一起探索电子画册的制作方法吧!…

鸿蒙开发设备管理:【@ohos.runningLock (Runninglock锁)】

Runninglock锁 该模块主要提供Runninglock锁相关操作的接口,包括创建、查询、持锁、释放锁等操作。 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import runningLock f…

龙迅 国产原装 低成本高性能转换器 Type-C with 2lane@8.1Gbps/lane 4K60

2.一般说明 LT8711UXE1是一款高性能的Type-C/DP1.2至HDMI2.0转换器,设计用于将USBType-C源或DP1.2源连接至HDMI2.0收发器。该LT8711UXE1集成了一个DP1.2兼容接收器,和一个HDMI2.0兼容发射器。此外,还包括用于CC通信的两个CC控制器&#xff0c…

VS生成类图

VS生成类图 1、启动visualstudioinstaller,点击“单个组件“,“代码工具”,勾选”类设计器“。 2、右键要查看的项目,选“查看类图”

css---before和after伪元素

1.什么是伪元素 伪元素不是真正的页面元素,html没有对应的元素,但是其所有用法和表现行为与真正的页面元素一样,可以对其使用如页面元素一样的CSS样式,表面上看上去貌似是页面的某些元素来展现,实际上CSS样式展现的行…

揭秘JWT:从CTF实战到Web开发,py使用JWT令牌验证

揭秘JWT:从CTF实战到Web开发,使用JWT令牌验证 介绍 JWT(JSON Web Tokens)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在网络上安全地传输信息。这种信息可以验…

Eclipse运行main函数报 launch error

右键run as java application,运行main函数的时候报launch error 解决方式:文件右键run configurations 旧的是Project JRE,改成下图这个样子

【Java学习笔记】java图形界面编程

在前面的章节中,我们开发运行的应用程序都没有图形界面,但是很多应用软件,如Windows下的Office办公软件、扑克牌接龙游戏软件、企业进销存ERP系统等,都有很漂亮的图形界面。素以需要我们开发具有图形界面的软件。 Java图形界面编程…

Linux线程:编织并发的梦幻世界

目录 🚩引言 🚩听故事,引概念 🚩生产者消费者模型 🚀再次理解生产消费模型 🚀挖掘特点 🚩条件变量 🚀条件变量常用接口 🚀条件变量的原理 🚩引言 上一篇…

学习LLM的随笔

1、信息量、信息熵、交叉熵和困惑度 (1)信息熵:信息熵中使用 l o g 2 ( p ( x ) ) log_2(p(x)) log2​(p(x)) 来表示对 x x x 编码需要的编码长度。由于不同事件发生的概率不同,我们不能简单地将这些信息量相加,而应…

Day01-02-gitlab

Day01-02-gitlab 1. 什么是gitlab2. Gitlab vs Github/Gitee3. Gitlab 应用场景4. 架构5. Gitlab 快速上手指南5.0 安装要求5.1 安装Gitlab组件5.3 配置访问url5.6 初始化5.8 登录与查看5.9 汉化5.10 设置密码5.11 目录结构5.12 删除5.13 500 vs 5025.14 重置密码 6. Gitlab用户…

springboot美术馆售票管理系统-计算机毕业设计源码17485

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 2.2.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

PMP报考条件是什么?很多人都没读懂...

最近正值8月份考试报名期,想计划考8月份考试的宝子可以准备起来了,下面是报名时间和考试安排 8月考试时间安排: 👉报名时间在7.9日—12日 👉考试时间在8.31日(周六) 一、PMP报名条件是什么&am…

vue3中 slot使用

默认插槽&#xff1a; 这是最基本的插槽类型&#xff0c;当没有指定 name 属性时&#xff0c;插槽是默认插槽。 子组件&#xff1a; <template><div class"child"><h2>子组件内容</h2><slot></slot> <!-- 默认插槽&#x…

反射快速入门

反射就是通过字节码文件获取类的成员变量、构造方法和成员方法的所有信息。 利用反射&#xff0c;我们可以获取成员变量的修饰符、名字、类型、取值。我们可以获取构造方法的名字、形参&#xff0c;并利用通过反射获取的构造方法创建对象。我们可以获取成员方法的修饰符、名字、…

LeetCode 子集

原题链接78. 子集 - 力扣&#xff08;LeetCode&#xff09; 这是一道暴力搜索问题参考大佬们的题解&#xff0c;对这类题目做出一下总结 1.确定递归参数变量 2.递归结束条件 3.做出选择&#xff0c;递归调用进入下一层 4.回溯&#xff0c;返回到递归前的状态 要完成前面这…

2024Datawhale-AI夏令营——机器学习挑战赛——学习笔记

#ai夏令营#datawhale#夏令营 Day1:入门级demo运行 这个其实比较简单&#xff0c;按照操作来做就行了&#xff0c;特征工程和调参暂时都没有做&#xff0c;后续的才是重头戏。

你想活出怎样的人生?

hi~好久不见&#xff0c;距离上次发文隔了有段时间了&#xff0c;这段时间&#xff0c;我是裸辞去感受了一下前端市场的水深火热&#xff0c;那么这次咱们不聊技术&#xff0c;就说一说最近这段时间的经历和一些感触吧。 先说一下自己的个人情况&#xff0c;目前做前端四年&am…

时钟服务器方案选型推荐:ATGM332D-5T和ATGM331C-5T

ATGM331C-5T系列模块同样是具有高灵敏度、低功耗、低成本等优势&#xff0c;适用于电力授时设备、时钟服务器、守时设备&#xff0c;可以直接替换Ublox LEA T系列模块。 性能指标&#xff1a; 从下面的图来看&#xff0c;ATGM331C-5T系列比ATGM332D-5T系列性能更好&#xff0c;…

大模型对汽车行业意味着什么?_汽车企业大模型

引 言 大模型是一种利用海量数据进行训练的深度神经网络模型&#xff0c;其特点是拥有庞大的参数规模和复杂的计算结构。通过在大规模数据集上进行训练&#xff0c;大模型能够学习到丰富的模式和特征&#xff0c;从而具备强大的泛化能力&#xff0c;可以对未知数据做出准确的预…