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

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中关于磁盘、文件、页和记录的管理,提供了理论基础和实际指导,为数据库的高效管理提供了有力支持。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GD32实战项目-app inventor-BLE低功耗DX-BT24蓝牙上位机制作-文末有关于生成的软件闪退或者卡死问题的解决

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布: 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转: 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…

zabbix 配置企业微信告警

1、申请一个企业微信, 官网链接 2、群内申请一个机器人 下载电脑版企业微信,登录后,在要接收群消息的群里,点击右上角三个点,添加机器人后,保存机器人的webhook地址 上传应用logo,填写应用名称…

论文学习——基于区域多向信息融合的动态多目标优化引导预测策略

论文题目:Guided prediction strategy based on regional multi-directional information fusion for dynamic multi-objective optimization 基于区域多向信息融合的动态多目标优化引导预测策略(Jinyu Feng a, Debao Chen b,c,d,∗, Feng Zou b,c, Fan…

微机原理 程序设计题

数字0~9、A~Z、a~z DATA SEGMENTINFOR1 DB 0AH, 0DH, "Please Press Any Key to input a letter :$"INFOR2 DB 0AH, 0DH, "You Input a Lowercase Letter! $"INFOR3 DB 0AH, 0DH, "You Input a Uppercase Letter! $"INFOR4 DB 0AH, 0DH, "…

100个名人的家,娄艺潇的家:大美国色,浪漫栖居

冠珠瓷砖「100个名人的家」,大美筑家,中国冠珠2024大美筑家之旅,冠珠瓷砖「100个名人的家」,探索中国人的烟火浪漫与美学追求。从中国家文化、人文居所、人生底蕴层面,发掘大美人居的故事,以中国瓷砖、空间…

ll命令在ubuntu下不能使用的解决方案

ll命令在ubuntu下不能使用的解决方案 问题: ll命令在ubuntu下不能使用, 在Ubuntu终端里执行ll,提示:command not found 解决方案: 打开当前用户目录下的.bashrc文件 找到下面的内容,将前面的“#”去掉 #alias llls -alF 然…

《vue3》reactivity API(vue3的$set呢?)

在Vue2中&#xff0c;修改某一些数据&#xff0c;视图是不能及时重新渲染的。 比如数组 <div> {{ myHobbies }} </div>data: () > ({myHobbies: [篮球, 羽毛球, 桌球] }); mounted () {this.myHobbies[1] sing; // 视图层并没有改变 }因此&#xff0c;Vue2就提…

代码随想录算法训练营第四十三天| 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、 123.买卖股票的最佳时机III

121. 买卖股票的最佳时机 题目链接&#xff1a;121. 买卖股票的最佳时机 文档讲解&#xff1a;代码随想录 状态&#xff1a;做出来了 贪心思路&#xff1a; 因为股票就买卖一次&#xff0c;那么贪心的想法很自然就是取最左最小值&#xff0c;取最右最大值&#xff0c;那么得到的…

Nuxt3 的生命周期和钩子函数(十)

title: Nuxt3 的生命周期和钩子函数&#xff08;十&#xff09; date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要&#xff1a;本文详细介绍了Nuxt3框架中的五个webpack钩子函数&#xff1a;webpack:configResolved用于在webpack配置解析后读取和修改配置…

【C语言】break 关键字

当在C语言中使用break关键字时&#xff0c;它通常用于两种主要情况&#xff1a;在循环中和在switch语句中。让我们详细看看每种情况下的用法和作用。 在循环中的使用&#xff1a; 在循环中&#xff0c;break语句的作用是立即终止当前所在的循环&#xff0c;然后跳出循环体执行…

UE插件与云渲染:10个提升效率的选择

Unreal Engine&#xff08;虚幻引擎&#xff09;的插件生态丰富多样&#xff0c;从提升视觉效果到优化工作流程&#xff0c;为开发者提供了无限扩展的可能。本文推荐10款备受欢迎的插件&#xff0c;助你激发创意&#xff0c;提升开发效率. 一、地牢建筑师&#xff1a;程序化关…

EDUSRC-我与xx职院的爱恨情仇(教育漏洞挖掘)

一、人生中的第一个漏洞 2024.1月的时候&#xff0c;当时看朋友挖到了一个名校的漏洞&#xff0c;特别羡慕&#xff0c;我也想挖&#xff0c;但是当时什么都不会&#xff0c;就只好在网上搜edusrc挖掘思路、edusrc挖掘教程等等&#xff0c;边学边挖&#xff0c;边挖边学。 一开…

【数据结构】04.单链表

一、链表的概念及结构 概念&#xff1a;链表是⼀种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 节点的组成主要有两个部分&#xff1a;当前节点要保存的数据和保存下⼀个节点的地址&#xff08;指针变量&#…

nginx重定向

nginx的重定向 location 匹配 location 匹配的就是后面的URI /wordpress location 匹配的分类和优先级** 1、精确匹配 location / 对字符串进行完全匹配&#xff0c;必须完全符合 2、正则匹配 ^~ 前缀匹配&#xff0c; 以什么开头 -区分大小写的匹配 ~*不区分大小写 …

数字化精益生产系统--MES制造管理系统

MES制造管理系统&#xff08;Manufacturing Execution System&#xff09;是现代制造企业中至关重要的管理工具&#xff0c;它集合了软件与多种硬件设备&#xff0c;形成了一个综合智能化系统&#xff0c;对从原材料上线到成品入库的整个生产过程进行实时数据采集、控制和监控。…

java 基础之 反射技术_java 程序src阶段 class对象阶段 run阶段3个阶段

System.out.println(in); } publicClass[] aa1(String name, int[] password){ returnnew Class[]{String.class} ; } privatestatic void aa1(int num){ System.out.println(num“静态方法”); } public static void main(String[] args){ System.out.println(“main”…

香港即将“放松”加密货币监管!加密牌照制度备受批评!全球主力军无法进入香港市场?动摇了香港Web3的信心!

2024年7月3日&#xff0c;香港金融服务及库务局局长许正宇在立法会会议上表示&#xff0c;香港金融管理局(HKMA)和证券及期货事务监察委员会(SFC)将根据市场发展情况&#xff0c;适时检讨虚拟资产相关活动的监管要求。 这一表态引发了人们对香港加密货币监管框架可能进行调整的…

超详细的 C++中的封装继承和多态的知识总结<1.封装与继承>

引言 小伙伴们都知道C面向对象难&#xff0c;可是大家都知道&#xff0c;这个才是C和C的真正区别的地方&#xff0c;也是C深受所有大厂喜爱的原因&#xff0c;它的原理更接近底层&#xff0c;它的逻辑更好&#xff0c;但是学习难度高&#xff0c;大家一定要坚持下来呀&#xff…

起飞,纯本地实时语音转文字!

简介 偶然在 github 上翻到了这个项目 https://github.com/k2-fsa/sherpa-ncnn 在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持 iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 也就是说语音转文字可以不再借助网络服务的接口&am…

mac显示隐藏的.git文件

打开终端 输入命令 defaults write com.apple.finder AppleShowAllFiles YES killall Finder