【如此简单!数据库入门系列】之效率基石 -- 磁盘空间管理

news2024/11/24 14:21:55

文章目录

  • 1 前言
  • 2 磁盘空间管理
  • 3 磁盘空间管理的实现
  • 4 存储对象关系
  • 5 总结
  • 6 系列文章


1 前言

如何将表中的记录存储在物理磁盘上呢?
在这里插入图片描述

  1. 概念模式中,记录(Record)表示表中的一行数据,由多个列(字段或者属性)构成
  2. 物理模式中
    • 记录以字节为单位(记录的字节表示)存储在内存中
    • 必要时(例如内存空间不足),被进一步存储在磁盘中(通常称为刷盘)

如何将内存中的记录保存在磁盘中?以什么方式保存?

这就是磁盘空间管理要解决的问题。


2 磁盘空间管理

在这里插入图片描述
磁盘空间管理是数据库读写效率的基石。

磁盘空间管理的目标:

  • 将内存中的Page映射到磁盘的位置
  • 将Page从磁盘加载到内存
  • 将Page保存回磁盘并确保写入
  • 为上层提供Page相关的服务,例如Page的创建、读取、写入和注销

Page是什么意思?

Page是内存中一块连续的区域,用于保存记录。内存中的数据写入磁盘,或者从磁盘读取,并不是以记录为单位进行的,而是以Page为单位。

为什么要把记录组织成Page再写入磁盘中?

还记得磁盘的工作原理吗?为了优化磁盘I/O性能,要尽可能将数据写入一个连续的区域内(称为块或Block)。内存中的Page就是为了对应磁盘中的Block。

通常情况下,Page和Block是等价的,都是指一块儿连续的区域,是磁盘读写的基本单位。通常,在内存中常用Page,而在磁盘中常用Block。

3 磁盘空间管理的实现

整体来说,存在两种实现方法:

  1. 直接依赖于物理设备
    • 在深入理解物理设备特性基础上,可以做到性能最好
    • 但是过于依赖物理设备细节,无法实现可移植性
  2. 基于文件系统(filesystem)
    • 将数据以某种方式组织在一起并保存在文件(File)中
    • 文件系统善于对文件进行顺序访问
    • 数据库会产生多个数据文件,这些文件可能存储在多个物理磁盘上
      在这里插入图片描述

显然,基于文件系统的方式更好。理论上,如果直接基于物理设备去实现,相当于实现了一套定制化的文件系统。

文件是文件系统提供的抽象对象。一个文件由多个Page/Block组成。

4 存储对象关系

Table、Page、和File都是存储记录的载体。它们之间是什么关系?

在这里插入图片描述

  • Table:记录的逻辑存储载体,处于概念模式,属于关系模型中的概念
  • Page:记录的字节表示在内存中的存储载体,是文件读写的基本单位,处于物理模式
  • File:由多个Page/Block组成的物理文件,处于物理模式,通常一个Table对应一个数据文件

5 总结

关于文章开头的问题:

如何将内存中的记录保存在磁盘中?以什么方式保存?

目前我们只讨论了第一个问题:

  • 在物理模式的最下层,实现了磁盘空间管理模块
  • 它负责将内存中的Page写入文件系统,并从文件系统读取Page
  • 它对上提供了Page相关服务,并隐藏了文件读写的实现细节

在下一篇文章中,我们继续讨论第二个问题:如何在Page中组织记录,以及如何在File中组织Page。


6 系列文章

更多系列文章,请参考:【如此简单!数据库入门系列】之思想地图 – 系列目录


如果喜欢这篇文章,请不要忘记关注、点赞和收藏哦!
您的鼓励将是我创作的最大动力!

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

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

相关文章

mysql5.7数据库安装及性能测试

mysql5.7数据库安装及性能测试 记录Centos7.9下安装mysql 5.7并利用benchmark工具简单测试mysql的性能。 测试机:centos7.9 配置:4C8G40G 1. 下安装mysql5.7 安装mysql5.7: # 通过官方镜像源安装$ wget http://dev.mysql.com/get/mysql57-com…

如何用virtualbox 来跑openwrt 镜像?

1.下载好openwrt源代吗,编译之前先配置,让编译产生x86的virtualbox 镜像: 编译完成之后会产生vdi镜像文件, 在virtualbox 中创建一虚拟机,类型选择linux,版本other linux 64: 内存选择512: 这个地方把镜像…

【牛客】【模板】二维前缀和

原题链接:登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 二维前缀和:pre[i][j]a[i][j]pre[i-1][j]pre[i][j-1]-pre[i-1][j-1]; 子矩阵 左上角为(x1,y1) 右下角(x2,y2…

使用openssl创建https证书

原文地址:使用openssl创建https证书-腾讯云开发者社区-腾讯云 从今天开始笔者打算和大家聊一聊http2这个协议,想要说清楚http2协议就必须亲手搭建一个http2的服务,并且对比http2和http1.1的特点,从而了解http2的一些新特性。 ht…

ESP32 IDF linux下开发环境搭建

文章目录 介绍升级Python环境下载Python包配置编译环境及安装Python设置环境变量 ESPIDF环境搭建下载esp-idf 代码编译等待下载烧录成功查看串口打印 介绍 esp32 官方文档给的不是特别详细 参考多方资料 最后才完成开发 主要问题在于github下载的很慢本教程适用于ubuntu deban…

华为eNSP中型企业局域网网络规划设计(下)

→b站传送门,感谢大佬← →华为eNSP中型企业局域网网络规划设计(上)← →拓扑图传送门,可以自己配置着玩← 配置ospf AR3 [AR3]ospf 1 router-id 3.3.3.3 //出口默认路由 [AR3-ospf-1]default-route-advertise always #area…

2024上半年软考新规,对高级论文科目不太友好

辽宁省发布了《关于2024年上半年计算机技术与软件专业技术资格(水平)考试批次安排的通知》,通知原文如下: 添加图片注释,不超过 140 字(可选) 添加图片注释,不超过 140 字(可选) 1.…

C 语言文件输入/输出(I/O)函数大全

C 语言文件输入/输出(I/O)函数大全 1. fopen() 函数2. fclose() 函数3. fread() 函数4. fwrite() 函数5. fseek() 函数6. ftell() 函数7. rewind() 函数8. feof() 函数9. ferror() 函数10. clearerr() 函数 😊 C 语言文件输入/输出&#xf…

SparkSQL与Hive整合 、SparkSQL函数操作

SparkSQL与Hive整合 SparkSQL和Hive的整合,是一种比较常见的关联处理方式,SparkSQL加载Hive中的数据进行业务处理,同时将计算结果落地回Hive中。 整合需要注意的地方 1)需要引入hive的hive-site.xml,添加classpath目录下面即可…

国家信息安全水平等级考试NISP一级题目(包含答案)

国家信息安全水平等级考试NISP一级题目 有任何想要咨询NISP都可以私信博主 1. 下列关于用户口令说法错误的是( )。 A.口令不能设置为空 B.口令长度越长,安全性越高 C.复杂口令安全性足够高,不需要定期修改 D.口令认证…

软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 本文档是一年前学后记得笔记 现在居然还记得很清楚 基于…

ASV1000视频监控平台:接入支持JT808标准的设备

目录 一、JT/T 808标准简介 (一)概述 (二)标准内容简介 1、消息分类 2、位置信息 3、报警信息 4、车辆控制 5、数据转发 二、在ASV1000上通过JT808添加设备 (一)登录视频监控平台管理端 &#x…

深度学习之基于Vgg16卷积神经网络乳腺癌诊断系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于VGG16卷积神经网络的乳腺癌诊断系统项目是一个结合深度学习技术和医学图像处理的创新项目,旨在提高…

嵌入式全栈开发学习笔记---C语言笔试复习大全14

目录 指针初级 指针的概念 指针类型 指针类型长度 指针的定义 通过指针访问数据 p1和*p1的区别 指针做函数参数 上一篇复习了8道编程题,这篇开始正式复习之指针! 说明:我们学过单片机的一般都是有C语言基础的了,网上关于C…

Sarcasm detection论文解析 |用于微博讽刺检测的上下文增强卷积神经网络

论文地址 论文地址:Context-augmented convolutional neural networks for twitter sarcasm detection - ScienceDirect 论文首页 笔记大纲 用于微博讽刺检测的上下文增强卷积神经网络 📅出版年份:2018 📖出版期刊:Neurocomputing &#x1f…

Golang | Leetcode Golang题解之第71题简化路径

题目: 题解: func simplifyPath(path string) string {stack : []string{}for _, name : range strings.Split(path, "/") {if name ".." {if len(stack) > 0 {stack stack[:len(stack)-1]}} else if name ! "" &am…

以中国为目标的DinodasRAT Linux后门攻击场景复现

概述 在上一篇《以中国为目标的DinodasRAT Linux后门剖析及通信解密尝试》文章中,笔者对DinodasRAT Linux后门的功能及通信数据包进行了简单剖析,实现了对DinodasRAT Linux后门心跳数据包的解密尝试。 虽然目前可对DinodasRAT Linux后门的通信数据包进…

Davinci工程开发方法论

基本概念 Flash Driver是下载到RAM里面的bin文件 Boot Manager是ROM上启动运行的第一个实例,可以是独立的bin文件,可以是集成在FBL里面。 Bootloader存储在ROM里面的bin文件 Demo Appl一个示例模板,用来跳转到Bootloader的,也是一…

OpenCV 入门(五) —— 人脸识别模型训练与 Windows 下的人脸识别

OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门&#xf…

【负载均衡在线OJ项目日记】项目简介

目录 前言 什么是负载均衡 所用的技术和开发环境 所用技术 开发环境 项目的宏观结构 leetcode 结构 结构 编写思路 前言 从C语言的文章到现在Linux网络部分,我已经涉猎了很多知识;终于在今天我要开始搞项目了,通过项目我也可以开始…