OceanBase 从0到1数据库内核实战教程学习笔记 - 4.数据库存储基础

发布于:2022-12-01 ⋅ 阅读:(967) ⋅ 点赞:(0)

本篇文章是对数据库存储基础知识的学习,本篇文章将从以下几个部分展开介绍。

  • 存储器层次结构
  • 磁盘存储器
  • 块与记录组织
  • 变长数据和记录
  • 记录的修改

1. 存储器层次结构

在这里插入图片描述
我们从下向上看,每个部分的特点如下:

  • 高速缓存:也叫 CPU 高速缓存,与 CPU 打交道,存储速度纳秒级别(ns),存储空间通常只有几MB;
  • 主存储器:也叫内存,通常我们所说的 OOM 问题都是发生在这个层面上,存储容量大小一般以 GB 计算,当前服务器内存有的已经可以达到 TB 级别;
  • 接下来是二级存储器,主要指的是磁盘存储器 ,其中上图上的虚拟存储器和文件系统,都是建立在磁盘存储器上的;
  • 在网上是第三级存储器,一般指 CD、DVD 等存储,存储容量特别大,价格低廉。
    在这里插入图片描述
    在这一章节的最后部分,老师介绍了“虚拟存储器”,大家可以通过下图来更详细了解虚拟存储器的特点:虚拟存储器是为了解决内存的缺陷,用虚拟地址映射虚拟存储器的磁盘空间来解决物理内存缺页等问题。
    在这里插入图片描述

2. 磁盘存储器

这里说的磁盘存储器,也就是我们常上的 HDD 硬盘,是由盘面、磁头、柱面等组成的,通常的计算方法由图二的几个参数决定:
在这里插入图片描述
在这里插入图片描述
磁盘的性能主要受 寻道时延、旋转时延和存取时延影响。
在这里插入图片描述
想要提高访问速度的话,无非分为以下一些方法:
在这里插入图片描述
另外磁盘也存在一些故障问题,很多情况下对数据的危害还是很大的:
在这里插入图片描述
所以在日常使用过程中,会有很多校验机制保证数据的一致性,比如校验和 checksum 技术(经典的有奇偶校验和技术),再比如稳定存储,利用数据冗余的方式做一些数据容错,类似于数据库的多副本方式。
在这里插入图片描述

3. 块与记录组织

了解过数据库的朋友应该明白,像下图一样,关系数据模型中的数据是由记录组成的,每条记录又由多个字段组成;然后由多个数据记录组合成一个数据块,存储在底层存储上。
在这里插入图片描述
数据记录的类型,按照这么多年形成的共性规律,又分为定长类型(int、char等)和变长类型(varchar、text等)。记录的存储通常要以4字节为偏移量进行对齐
在这里插入图片描述
一条完整的数据记录在存储时,通常会增加一个 header 部分,用来记录一些指针、长度和时间戳
在这里插入图片描述
块的存储组织与记录也是一致的,也需要有一个块首部来存储一些元信息
在这里插入图片描述
在块存储记录的过程中,记录是从后往前存储增加的,未使用空间是从前往后变化的,方便我们更好的管理数据。
在这里插入图片描述

4. 变长数据和记录

变长数据主要分为:大小变化的数据项(varchar)、重复字段、可变格式记录和大字段几种。
在这里插入图片描述
具有变长记录的数据存储如下图的 address,通常会将变长存在最后,然后通过指向 address的指针和记录长度,去取 address 部分的数据
在这里插入图片描述
具有重复字段的记录跟变长字段的存储类似,也是通过指针地址和记录长度计算出数据位置后取出来;另外重复字段也存在另外一种存储方式(下面第二张图),通过定长和变长分开存储的方式,缺点是访问需要一次访问多个数据块。
在这里插入图片描述
在这里插入图片描述
具有可变长度的记录,例如 XML 格式,通常长度不是固定的,采用的是自解析的访问过程来访问数据,它会在记录存储时存上“字符串编码类型”、“长度”等编码方式。
在这里插入图片描述
针对大值类型,通常采用分片存储为多个的方式存储数据,在每个数据块的分片之前都记录一个“记录首部”,通过这些记录,把所有相关的片都连接起来,形成一个完整的数据。
在这里插入图片描述
BLOB 存储通常通过连续块存储或链表的方式存储在多个磁盘,提高检索效率
在这里插入图片描述

5. 记录的修改

记录修改部分,主要分为三个点:

  • 记录的插入
  • 记录的删除
  • 记录的更新

数据插入 主要分为三个步骤:首先找到空闲块,然后把数据插入到空闲位置,最后维护起 offset。
在这里插入图片描述
数据删除 通常采用打标记的删除方式,可以通过一个循环任务来将删除的数据进行清理。
在这里插入图片描述
数据修改 通常有两种方式,定长记录原地修改,变长记录标记删除然后开辟新空间插入新数据。
在这里插入图片描述

今天的内容大概就这些~

最后的最后,如果大家感兴趣,可以多关注和参与 OB 的活动:https://ask.oceanbase.com/t/topic/35601006。