当前位置: 首页 > news >正文

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

文章目录

  • 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 系列文章

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


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

相关文章:

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

文章目录 1 前言2 磁盘空间管理3 磁盘空间管理的实现4 存储对象关系5 总结6 系列文章 1 前言 如何将表中的记录存储在物理磁盘上呢? 概念模式中,记录(Record)表示表中的一行数据,由多个列(字段或者属性&…...

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(五)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 继续接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 在下面的图片中&#…...

5月7日监控二叉树+斐波那契数

968.监控二叉树 给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1: 输入:[0,0,null,0,0] 输出:1 解释&#xff…...

C++类的设计编程示例

一、银行账户类 【问题描述】 定义银行账户BankAccount类。 私有数据成员:余额balance(整型)。 公有成员方法: 无参构造方法BankAccount():将账户余额初始化为0; 带参构造方法BankAccount(int m)&#xff1…...

YOLOv5 V7.0 - rknn模型的验证 输出精度(P)、召回率(R)、mAP50、mAP50-95

1.简介 RKNN官方没有提供YOLOv5模型的验证工具,而YOLOv5自带的验证工具只能验证pytorch、ONNX等常见格式的模型性能,无法运行rknn格式。考虑到YOLOv5模型转换为rknn会有一定的精度损失,但是需要具体数值才能进行评估,所以需要一个…...

CUDA、CUDNN、Pytorch三者之间的关系

这个东西嘛,我一开始真的是一头雾水,安装起来真是麻烦死了。但是随着要复现的项目越来越多,我也不得不去学会他们是什么,以及他们之间的关系。 首先,一台电脑里面允许有多种版本的cuda存在,然后cuda分为run…...

vue-cli2,vue-cli3,vite 生产环境去掉console.log

console.log一般都是在开发环境下使用的,在生产环境下需要去除 ,如果手动删除未免也太累了,我们可以用插件对于具体环境全局处理。 vue-cli2 项目build 下面webpack.prod.config.js 文件中: plugins: [new webpack.DefinePlugin({process.en…...

Docker-Compose编排LNMP并部署WordPress

前言 随着云计算和容器化技术的快速发展,使用 Docker Compose 编排 LNMP 环境已经成为快速部署 Web 应用程序的一种流行方式。LNMP 环境由 Linux、Nginx、MySQL 和 PHP 组成,为运行 Web 应用提供了稳定的基础。本文将介绍如何通过 Docker Compose 编排 …...

附录C:招聘流程

< 回到目录 附录C&#xff1a;招聘流程 _xxx_公司的招聘 使命 只雇佣顶级人才。 他们是能够胜任工作&#xff0c;并与 _&#xff08;你的公司名称&#xff09;_ 的企业文化相匹配的超级明星。 方法 记分卡。招聘经理创建一份文件&#xff0c;详细描述此职位的工作内容…...

1688快速获取整店铺列表 采集接口php Python

在电子商务的浪潮中&#xff0c;1688平台作为中国领先的批发交易平台&#xff0c;为广大商家提供了一个展示和销售商品的广阔舞台&#xff1b;然而&#xff0c;要在众多店铺中脱颖而出&#xff0c;快速获取商品列表并进行有效营销是关键。 竞争对手分析 价格比较&#xff1a;…...

CTF-WEB(MISC)

安全攻防知识——CTF之MISC - 知乎 CTF之MISC杂项从入门到放弃_ctf杂项 你的名字-CSDN博客 CTF MICS笔记总结_archpr 掩码攻击-CSDN博客 一、图片隐写 CTF杂项---文件类型识别、分离、合并、隐写_ctf图片分离-CSDN博客 EXIF&#xff08;Exchangeable Image File&#xff09;是…...

Ubuntu如何更换 PyTorch 版本

环境&#xff1a; Ubuntu22.04 WLS2 问题描述&#xff1a; Ubuntu如何更换 PyTorch 版本考虑安装一个为 CUDA 11.5 编译的 PyTorch 版本。如何安装旧版本 解决方案&#xff1a; 决定不升级CUDA版本&#xff0c;而是使用一个与CUDA 11.5兼容的PyTorch版本&#xff0c;您可…...

python flask css样式无效

解释&#xff1a; Flask是一个Python的轻量级Web框架&#xff0c;它没有为CSS提供任何内置的支持。如果你在Flask项目中引入了CSS文件&#xff0c;但是这个CSS没有生效&#xff0c;可能的原因有&#xff1a; 路径不正确&#xff1a;你的CSS文件没有放在正确的目录下&#xff0…...

大数据学习笔记14-Hive基础2

一、数据字段类型 数据类型 &#xff1a;LanguageManual Types - Apache Hive - Apache Software Foundation 基本数据类型 数值相关类型 整数 tinyint smallint int bigint 小数 float double decimal 精度最高 日期类型 date 日期 timestamps 日期时间 字符串类型 s…...

vue3 下载图片(包括多图片下载)

单图片下载 //使用 download(https://img1.baidu.com/it/u1493209339,2544178769&fm253&app138&sizew931&n0&fJPEG&fmtauto?sec1715101200&t854f3434686cfd2cba9d6a528597d15c)//下载逻辑 const download async (modelUrl) > {const respons…...

LabVIEW如何通过子VI更改主VI控件属性?

在LabVIEW中&#xff0c;可以通过使用Local Variable或Property Node来实现主VI控件属性的更改。这些方法可以在主VI和子VI之间传递数据和控件属性。 Local Variable: 使用Local Variable可以在子VI中直接访问并修改主VI中的控件属性。在子VI中创建Local Variable&#xff0c;并…...

关于MS-DOS时代的回忆

目录 一、MS-DOS是什么&#xff1f; 二、MS-DOS的主要功能有哪些&#xff1f; 三、MS-DOS的怎么运行的&#xff1f; 四、微软开源MS-DOS源代码 五、高手与漂亮女同学 一、MS-DOS是什么&#xff1f; MS-DOS&#xff08;Microsoft Disk Operating System&#xff09;是微软公…...

数据库索引(Mysql)

简述:数据库索引是加速数据检索,提高查询效率的一种数据结构 语法规则 创建索引 --通用语法规则 --[内容] 可选参数 --UNIQUE: 可选关键字&#xff0c;用于创建唯一索引&#xff0c;确保索引列的值是唯一的 CREATE [UNIQUE] INDEX 索引名 ON 表名(字段名,...) [ASC | DESC];…...

异常-Exception

异常介绍 基本概念 Java语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09;执行过程中所发生的异常事件可分为两大类 1&#xff0c;Error&#xff08;错误&#xff09;&#xff1a;Java虚拟机无法…...

ctfshow——SQL注入

文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…...

从游戏到科研:手把手教你设计并运行一个n-back工作记忆测试

从游戏到科研&#xff1a;手把手教你设计并运行一个n-back工作记忆测试 工作记忆是人类认知功能的核心组成部分&#xff0c;它直接影响着我们的学习、推理和问题解决能力。在心理学和认知科学领域&#xff0c;n-back任务已经成为评估工作记忆容量的黄金标准之一。本文将带你从零…...

tensorrt_demos性能对比分析:FP16 vs INT8 vs DLA核心的优劣对比

tensorrt_demos性能对比分析&#xff1a;FP16 vs INT8 vs DLA核心的优劣对比 【免费下载链接】tensorrt_demos TensorRT MODNet, YOLOv4, YOLOv3, SSD, MTCNN, and GoogLeNet 项目地址: https://gitcode.com/gh_mirrors/te/tensorrt_demos tensorrt_demos是一个支持MODN…...

内存计算芯片技术:相变存储器与混合信号架构解析

1. 内存计算芯片技术概述内存计算&#xff08;In-Memory Computing&#xff09;技术正在重塑现代计算架构的格局。传统冯诺依曼架构中&#xff0c;数据需要在处理器和存储器之间频繁搬运&#xff0c;这种"存储墙"问题已成为制约计算效率的主要瓶颈。根据IEEE的实测数…...

同步、异步与互斥:从通用OS到RTOS的全面解析

一、基础概念&#xff1a;进程与线程1.1 什么是进程&#xff1f;进程是操作系统进行资源分配和调度的基本单位&#xff0c;是一个正在运行的程序实例。1.2 什么是线程&#xff1f;线程是操作系统进行CPU调度的基本单位&#xff0c;是进程内部的一条执行路径&#xff08;轻量级进…...

Langchain的学习(一)

目录 一,实操 编码 Runnable Runnable 是什么 核心方法(所有 Runnable 都有) 最关键能力:用 | 组合(LCEL) 常用内置 Runnable 总结 二,聊天模型-核心能力 定义模型 init_chat_model 本地部署 调用工具 定义工具-Tool version1 schema: version2(基于…...

告别上位机:用STM32的CAN总线直接对话Maxon EPOS4驱动器(附完整通信代码)

STM32直连Maxon EPOS4&#xff1a;CAN总线电机控制实战指南 在机器人关节控制、智能小车驱动等高精度运动控制场景中&#xff0c;Maxon EPOS4系列驱动器凭借其卓越性能成为工业级首选。但传统依赖PC上位机&#xff08;如EPOS Studio&#xff09;的调试方式&#xff0c;严重制约…...

AzurLaneAutoScript:解放双手的碧蓝航线智能自动化脚本

AzurLaneAutoScript&#xff1a;解放双手的碧蓝航线智能自动化脚本 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为《…...

串口屏三大主流方案的多维度比较

全球串口屏市场正处于稳步增长通道。据行业研究机构数据&#xff0c;2025年全球串口屏市场规模约6.0亿美元&#xff0c;预计到2030年将增长至6.9亿美元&#xff0c;年复合增长率约5.6%。越来越多的中小设备制造商面临同一个问题&#xff1a;如何在预算和开发周期内&#xff0c;…...

VScode搭建一体化ROS开发环境:从配置到调试的完整实践指南

1. 项目概述与核心价值最近在带几个新同事上手机器人项目&#xff0c;发现他们配置ROS开发环境时&#xff0c;总会在各种依赖、路径和编译问题上卡壳&#xff0c;一折腾就是大半天。这让我想起自己刚接触ROS那会儿&#xff0c;也是被环境配置搞得焦头烂额&#xff0c;明明照着官…...

NVDC充电架构深度解析:智能电源管理如何提升笔记本性能与电池寿命

1. 项目概述&#xff1a;NVDC充电器&#xff0c;一个被低估的“能量管家”如果你是一位经常需要带着笔记本电脑移动办公的资深用户&#xff0c;或者是一位对设备续航和充电效率有极致追求的硬件爱好者&#xff0c;那么“NVDC”这个词&#xff0c;很可能已经或即将进入你的视野。…...