数据库的存储结构

数据库的存储结构

数据库的存储结构是怎样的?

记录是按照行存储的,但是数据库的读取不是以行为单位,否则一次读取只能处理一行,效率很低。因此数据库,无论是读一行,还是读取多行,都是将这些行所在的页进行加载。数据管理存储空间的基本单位是页(Page)

快速回顾一遍数据库存储结构:一页可以存储多个行记录(Row) ,先是表空间(Tablespace),表空间包含段(segement),还存在区(Extent),其关系如下图所示:

在这里插入图片描述

  • 段(Segment)段里面有多个区,区在文件系统是一个连续的分片空间,不过在段中不要求区与区之间是分配单位,不同类型的数据库对象以不同的段形式存在。 当我们创建数据表,索引的时候,就会创建对应的段,比如建表的时候,会自动创建表段,创建表索引的时候,会创建一个索引段。

  • 区(Extent) 是一个比页高一个级别的存储结构,一个区一般有64个里连续的页,InnoDB 页的默认大小是 16K, 索引一个区的大小是 64*16 = 1MB

  • 表空间(Tablespace) 是一个逻辑容器,表空间存储的对象是段,在一个表空间中可以有多个段,一个段只能属于一个表空间,数据库可以有多个表空间,表空间从管理上划分为系统表空间、用户表空间、撤销表空间、临时表空间。

oracle 中使用代表

数据库 IO 最小单位是页,与数据库相关的内容会存在页结构中,数据页包括7个部分,分别是文件头(File Header),页头(Page Header),最大最小记录(Inflimum+siprenum)、用户记录(User Records)、空闲空间(Free Space),页目录(Page Directory)和文件尾(File Tailer)。

页的存储结构如下:

在这里插入图片描述

页中各项内容:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HOcgHr9o-1603550757765)(https://imgkr2.cn-bj.ufileos.com/4fa3c03d-c117-4efa-b13c-cce0741a881d.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=hpvuF34Qm9vPbxy4atuM3XunV0I%253D&Expires=1603634111)]

页主要分成3部分: 头尾节点部分。数据记录部分,索引部分。

数据页有两个字段,分别是文件头FIL_PAGE_PREV 和文件尾 FIL_PAGE_NEXT, 主要作用是指针,分别指向上一个数据和下一个数据,连接起来相当于一个双向链表。

在这里插入图片描述

第二部分是记录部分,最大最小记录和用户记录部分占了页结构的主要空间。当新记录插入的时候,会从空想空间分配用于存储新记录。

第三部分是索引部分, 这部分是页目录,起到了记录索引的作用。

如何创建一个页记录?

  1. 将索引的记录分成几组,这些记录包括最小记录和最大记录,但是不包括已删除记录。
  2. 第1组,也就是最小记录所在的分组只有一个记录; 最后一组,就是最大记录所在的分组,会有1-8个记录,其余的组数据在4-8条。
  3. 在每个组最后一条记录的头信息中会存储该组一共有多少条,作为 n_owned 字段。
  4. 页目录用来存储每组最后一条记录的地址偏移量,这些地址偏移量会按照先后顺序存储起来,每组的地址偏移量称为 slot ,每个槽相当于指正指向了不同组的最后一个记录。

在这里插入图片描述

总结一下

在这里插入图片描述

欢迎关注:程序员开发者社区

在这里插入图片描述

wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 19.89元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值