数据库设计

七、存储管理

1、存储介质

存储层次

  • 存储分类

  • 访问速度分类:主存储器、二级存储器、三级存储器
  • 操作分类:读操作、写操作
  • 联机分类:联机、脱机
  • 访问方式分类:随机访问、顺序访问
  • 读写单位分类:字节、块

存储介质分类

  • 易失存储器

易失性存储器中的数据在计算机重新启动(关机或崩溃后)时会丢失

  • 主存储器

非易失存储器

非易失性存储器中的数据在计算机重新启动时不会丢失

  • 二级存储器
  • 三级存储器

主存储器

使用load/store指令,主存储器中的数据可以被CPU直接操作

  • 寄存器
  • 高速缓存
  • 内存

主存储器按字节寻址

二级存储器

二级存储器中的数据不能被CPU直接处理,必须通过读写指令先被复制到主存储器中才能被处理

  • 磁盘:机械硬盘 HDD
  • 闪存:固态硬盘 SSD

二级存储器是联机的、按块寻址的

三级存储器
  • 三级存储器中的数据必须先被复制到二级存储器中

  • 磁带
  • 光盘
  • 网络存储
  • 三级存储器是脱机的、按块寻址的

  • 访问时间

  • 数据传输级别

寄存器

Register:

CPU 中的寄存器是一种高速存储器件,用于存储和操作临时的数据和指令。不同 CPU 可能会有不同数量的寄存器,且不同架构的 CPU,寄存器的功能和作用可能会有所不同。

寄存器可以根据其功能和作用分以下几种:

  • 程序计数器(PC):存储当前指令地址,执行指令后会自动加一,以便 CPU 能够顺序执行下一条指令
  • 累加器(ACC):用于保存运算的结果和中间值
  • 数据寄存器(DR):用于存储输入和输出的数据或者临时存放一些读取到的数据
  • 地址寄存器(AR):保存内存中被读取或写入的数据的地址
  • 标志寄存器(FR):存储和操作一些状态标志,如进位标志、零标志、溢出标志等
  • 堆栈指针寄存器(SP):保存堆栈中最后一个入栈的地址,以便维护堆栈的结构
  • 指令寄存器(IR):用于保存当前正在执行的指令

缓存Cache

静态随机访问存储 SRAM

  • SRAM 是 Static Random Access Memory,静态随机访问存储器
  • 保存一个 bit 需要 6 个晶体管,造价高
  • SRAM 一般只有几个 MB 而已,再多了就不划算
  • 从电路图可以看出,基本都是一些晶体管运算,速度很快
  • S RAM 一般用来做高速缓存存储器
  • SRAM 通常放在 CPU 芯片上

 内存

机械硬盘 HDD(Hard Disk Drive) 

动态随机访问存储 DRAM

  • DRAM 是 Dynamic Random Access Memory,动态随机访问存储器
  • DRAM 将每个比特存储在一个电容中
  • DRAM 中的电容,其中储存的电荷会在几毫秒内流失
  • 所以 DRAM 需要周期性刷新电容,所以被称为动态
  • 因为只用到一个晶体管,所以成本低
  • 刷新过程是在 DRAM 芯片内部完成的
  • 不占用总线带宽或 CPU 时间
  • 通常的刷新频率为 64ms 或者更短
  • 以确保 DRAM 中的数据得到充分地保护且可靠读取
  • 因需要刷新所以速度比 SRAM

磁盘

磁盘有两个组成部分

  • 磁盘组件:sectors(扇区)  tracks(磁道)  cylinders(柱面)
  • 磁头组件:disk heads(磁头),disk arms(磁鼻)
扇区

磁盘的每个磁道都被分成更小的扇区

  • 将一个磁道分成扇区的方式已经硬编码在磁盘表面上,无法更改
扇区的组织方式
  • 方法1:扇区间距固定角度
  • 方法2:扇区保持均匀的记录密度

磁盘块/页

操作系统在磁盘格式化期间将一个磁道分成相等大小的磁盘块(或页)

  • 一个磁盘块的大小可以设置为扇区大小的倍数
  • 磁盘块的大小在磁盘格式化期间固定,不能动态改变
  • 典型的磁盘块大小为 512B - 4KB
读写速率

磁盘访问时间的三个重要参数

  • 平均寻道时间
  • 平均延迟时间,取决于磁盘转速 7200 / 分钟
  • 数据传输速率
  • 磁盘访问方式
  • 顺序访问
  • 随机访问

闪存  Flash memory

闪存是一种非易失性存储器,也称为固态存储器,具有以下特点:

  • 高速读写:闪存的读写速度比机械硬盘快,因为它是通过电子信号进行读写操作
  • 耐用:闪存具有较长的使用寿命,并且不容易受到外界的磁场和震动的影响
  • 体积小:闪存的内部结构比机械硬盘短小精悍,因其尺寸小,适合于小型电子设备
  • 低功耗:闪存的电源消耗相对较低,非常适合移动设备和便携式电脑等应用

应用场景

  • 存储卡和 USB 存储设备
  • 固态硬盘
  • 移动电话和平板电脑
  • 数码相机

磁带

光盘CD/DVD

网络存储NAS

2、存储引擎

  • 存储引擎不同,数据在磁盘上的结构不同
  • 存储引擎不同,索引可能不同
  • MySQL 的存储引擎是可插拔的
  • MySQL 的存储引擎是基于表的

存储引擎的种类

  • InnoDB 引擎
  • MylSAM 引擎
  • Archive 引擎
  • Blackhole 引擎
  • CSV 引擎
  • Memory 引擎
  • Federated 引擎
  • Merge 引擎
  • NDB 引擎

存储引擎的相关操作

  • 查看 MySQL 支持的所有存储引擎
  • 查看 MySQL 默认的存储引擎
  • 查看某个表使用的存储引擎
  • 创建表时指定存储引擎
  • 修改表的存储引擎

InnoDB引擎

  • InnoDB 是 MySQL 默认的存储引擎
  • InnoDB 被设计用来处理大量的短期 事务
  • 如表中除了增加和查询外,还需要更新和删除,则应优先选择 InnoDB 存储引擎
  • 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑 InnoDB 引擎
  • 对比 MyISAM 的存储引擎,InnoDB 写的处理效率差一些
  • InnoDB 会占用更多的磁盘空间 以保存数据和索引
  • MyISAM 只缓存索引,不缓存真实数据;InnoDB 不仅缓存索引还要缓存真实数据
  • InnoDB 对内存要求较高 ,而且内存大小对性能有决定性的影响

MylSAM 引擎

  • MyISAM 提供了大量的特性,包括全文索引、压缩、空间函数(GIS) 等
  • MyISAM 不支持事务 、行级锁、外键,主要缺陷是崩溃后无法安全恢复
  • 优势是 访问速度快 ,对事务完整性没有要求或者 以 SELECT、INSERT 为主的应用
  • 针对数据统计有额外的常数存储。故而 count(  ) 的查询效率很高
  • 应用场景: 只读应用或者以读为主的业务
  • OLTP OnLine Transaction Processing ,联机事务处理
  • OLAP OnLine Analytics Processing ,联机分析处理

Memory 引擎

  • Memory 采用的逻辑介质是内存,响应速度很快
  • 当 mysqld 守护进程崩溃的时候数据会丢失
  • 要求存储的数据是数据长度不变的格式,如,Blob 和 Text 类型的数据不可用
  • Memory 同时支持哈希索引和 B+ 树索引
  • Memory 表至少比 MyISAM 表要快一个数量级
  • Memory 表的大小受限制
  • 数据文件与索引文件分开存储
  • 缺点:其数据易丢失,生命周期短

3、存储结构

磁盘存储结构

  • 表空间
  • 段  segment
  • 区  extent
  • 页  page
  • 行  row

系统表空间     /var/lib/mysql/ibdata1

用户表空间     /var/lib/mysql/db_name/tb_name.ibd

临时表空间     /var/lib/mysql/ibtmp1

行结构

行格式种类
  • Compact 行格式
  • Dynamic 行格式
  • Compressed 行格式
  • Redundant 行格式
行格式的相关操作
  • 查看 MySQL 默认的行格式
  • 查看某个表的行格式
  • 创建表时指定行格式
  • 修改表的行格式
Compact 行格式

变长字段长度列表
  • 把所有变长字段真实数据占用的字节长度都存放在记录的开头
  • 存储的长度和字段顺序是相反的
  •   
NUll值列表
  • 统一管理可以为 NULL 的列,存成 NULL 值列表。如果表中没有可以为 NULL 的列,则 NULL 值列表不存在
    • 二进制位的值为 1 时,代表该列的值为 NULL
    • 二进制位的值为 0 时,代表该列的值不为 NULL
    • 跟字段的顺序相反

记录头信息

真实数据

Dynamic and Compressed row format
  • 行溢出
  • 数据压缩

什么是行溢出?

行溢出的两种不同的处理方式

- compact redundant 是一种,绿框所示,指针为 20 字节,发生溢出的页中保留部分数据和指针,剩余数据放到其他页中

- dynamic compressed 是一种,红框所示,指针为 20 字节,发生溢出的页中只存放指针,所有数据放到其他页中

Redundant 行格式

页结构

页是 InnoDB 管理存储空间的基本单位,一个页的大小一般是 16KB。InnoDB 为了不同的目的设计了许多种不同类型的页。页是磁盘和内存数据交换的基本单位,也是 B+ 树索引节点的基本单位。

常见页的类型
  • 表空间头部信息页
  • Insert Buffer 页
  • inode 信息页
  • undo 日志页
  • 索引页 (就是数据页),是记录的容器

页相关操作
  • 查看MySQL默认页尺寸
索引页结构

最大记录、最小记录

文件头部结构(38字节)

文件尾部结构(8字节)

  • 4 个字节代表页的校验和这个部分与 File Header 中的校验和相对应
  • 后 4 个字节代表页面被最后修改时对应的日志序列位置(LSN) 这个部分也是为了校验页的完整性,如果首部和尾部的 LSN 值校验不成功的话,就说明同步过程出现了问题。
空闲空间、用户记录

页目录结构

页头结构

表空间相关操作
  • 查看系统表空间和临时表空间的路径设置
  • 查看是否启用独立表空间(用户表空间)

系统表空间     /var/lib/mysql/ibdata1

用户表空间     /var/lib/mysql/db_name/tb_name.ibd

临时表空间     /var/lib/mysql/ibtmp1

B+树和页结构

因为页10最多只能放3条记录,所以我们不得不再分配一个新页

由于数据页的编号可能并不是连续的,所以在向 index_demo 表中插入许多条记录后,可能是这样的效果:

B+树的容量
  • 如果 B+ 树只有 1 层,也就是只有 1 个用于存放用户记录的节点,最多能存放 100 条记录
  • 如果 B+ 树有 2 层,最多能存放 1000×100=100000 条记录
  • 如果 B+ 树有 3 层,最多能存放 1000×1000×100=100000000 条记录
  • 如果 B+ 树有 4 层,最多能存放 1000×1000×1000×100=100000000000 条记录
  • 你的表里能存放 一千亿 条记录么?所以一般情况下,B+ 树都不会超过4层,意味着找到一条记录不会超多 4 I/O
B+因为B+B+ 树和页结构B+树和页结构

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

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

相关文章

到华为考场考HCIE的注意事项和考试流程

大家好,我是张同学,来自成都职业技术学院2021级计算机网络专业。最近成功通过了 Datacom HCIE 考试,在这里和大家分享一下我的经验。 考证契机 在母校的培养下,我接触到ICT这个行业,打好了基础,开始了成…

海外问卷调查如何影响企业的经营?在品牌建设中有何指导意义?

市场调查的定义:通过科学的方法,有目的地、系统地搜集整理一些市场信息,其目的在于了解当下市场现状和发展前景,为企业生产和品牌打造提供一些科学的指导意见,这是任何大企业、中小企业、初创企业都必须重视的一个重要…

hedfs和hive数据迁移后校验脚本

先谈论校验方法,本人腾讯云大数据工程师。 1、hdfs的校验 这个通常就是distcp校验,hdfs通过distcp迁移到另一个集群,怎么校验你的对不对。 有人会说,默认会有校验CRC校验。我们关闭了,为什么关闭?全量迁…

Unity3D仿星露谷物语开发25之创建时钟界面

1、目标 在时钟界面显示当前时钟信息,同时设置特殊按钮可以快速推进时间用于测试。 2、创建GameClock.cs脚本 在Assets -> Scripts -> TimeSystem目录下创建GameClock.cs脚本。 代码如下: using System.Collections; using System.Collections…

使用Vue3实现可拖拽的九点导航面板

开篇 本文使用Vue3实现了一个可拖拽的九宫导航面板。这个面板在我这里的应用场景是我个人网站的首页的位置,九宫导航对应的是用户最后使用或者最多使用的九个功能,正常应该是由后端接口返回的,不过这里为了简化,写的是固定的数组数…

小利特惠源码/生活缴费/电话费/油卡燃气/等充值业务类源码附带承兑系统

全新首发小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统 安装教程如下 图片:

FlinkSql使用中rank/dense_rank函数报错空指针

问题描述 在flink1.16(甚至以前的版本)中,使用rank()或者dense_rank()进行排序时,某些场景会导致报错空指针NPE(NullPointerError) 报错内容如下 该报错没有行号/错误位置,无法排查 现状 目前已经确认为bug,根据github上的PR日…

C语言精粹:深入探索字符串函数

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文(1)常见字…

微信阅读网站小程序的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

RabbitMQ 死信队列

文章目录 前言1、死信交换机 DLX 与死信队列 DLQ2、死信队列的实现2.1、声明原队列信息2.2、声明死信队列信息2.3、完整示例 3、死信消息流转原理 前言 消息过期以后,如果没有任何配置,是会直接丢弃的。我们可以通过配置让这样的消息变成死信&#xff0…

《边界感知的分而治之方法:基于扩散模型的无监督阴影去除解决方案》学习笔记

paper:Boundary-Aware Divide and Conquer: A Diffusion-Based Solution for Unsupervised Shadow Removal 目录 摘要 1、介绍 2、相关工作 2.1 阴影去除 2.2 去噪扩散概率模型(Denoising Diffusion Probabilistic Models, DDPM) 3、方…

leetcode28-找出字符串中第一个匹配的下标

leetcode 28 思路 首先循环haystack,然后当当前字符和needle的首字母相同的时候截取出长度等于needle的字符串,进行比较是否相等,如果相等则说明当前index为第一个匹配的下标,如果不相等则说明不正确继续进行遍历,直…

【esp32-uniapp】uniapp小程序篇02——引入组件库

一、引入组件库(可自行选择其他组件库) 接下来介绍colorUI、uview plus的安装,其他的安装可自行查找教程 1.colorUI weilanwl/coloruicss: 鲜亮的高饱和色彩,专注视觉的小程序组件库 下载之后解压,将\coloruicss-ma…

YOLOv8改进,YOLOv8检测头融合DynamicHead,并添加小目标检测层(四头检测),适合目标检测、分割等,全网独发

摘要 作者提出一种新的检测头,称为“动态头”,旨在将尺度感知、空间感知和任务感知统一在一起。如果我们将骨干网络的输出(即检测头的输入)视为一个三维张量,其维度为级别 空间 通道,这样的统一检测头可以看作是一个注意力学习问题,直观的解决方案是对该张量进行全自…

Vue2官网教程查漏补缺学习笔记 - 3Vue实例4模板语法5计算属性监听器

3 Vue实例 3.1 创建一个 Vue 实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm new Vue({// 选项 })虽然没有完全遵循 MVVM 模型,但是 Vue 的设计也受到了它的启发。因此在文档中经常会使用 vm (ViewModel 的缩写) 这个变…

【高项】6.3 排列活动顺序 ITTO

输入 项目管理计划组件: ① 进度管理计划;② 范围基准 项目文件: ① 假设日志;② 活动属性;③ 活动清单;④ 里程碑清单 工具与技术 紧前关系绘图法(PDM) ① 完成到开始&…

将Deepseek接入本地Vscode

第一步:获取Deepseek APIKEY 1.1 登录Deepseek官网 https://www.deepseek.com/ 1.2 选择API开放平台 1.3 注册账号并登录 1.4 登录成功后的就界面 1.5 点击左侧菜单栏“API keys”,并创建API key 名称自定义输入 生成API key 复制保存,丢失…

docker使用笔记

文章目录 1.Docker 与容器2.核心概念与安装配置2.1 核心概念2.2 docker 安装ubuntu使用官方的脚本自动安装准备条件准备安装安装Docker安装Docker 命令补全工具允许非Root用户执行docker 命令最后一步 更新.bashrc文件 [修改docker 默认的存储路径](https://www.cnblogs.com/du…

vim如何设置制表符表示的空格数量

:set tabstop4 设置制表符表示的空格数量 制表符就是tab键,一般默认是四个空格的数量 示例: (vim如何使设置制表符表示的空格数量永久生效:vim如何使相关设置永久生效-CSDN博客)

PPT添加与管理批注的操作指南

​​​ 批注是PPT中一个非常实用的功能,它不仅能帮助我们在演讲和设计过程中记录想法,还能与他人协作时提供有价值的反馈。无论是团队讨论、审稿,还是个人思考,批注的运用都能让我们的PPT更加完善和高效。我会详细介绍如何在PPT中…