欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 数据库设计

数据库设计

2025/2/24 22:20:11 来源:https://blog.csdn.net/weixin_74301566/article/details/145330405  浏览:    关键词:数据库设计

七、存储管理

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+树和页结构

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词