数据库底层物理存储层 的管理方案

专栏内容
postgresql内核源码分析
手写数据库toadb
并发编程
个人主页我的主页
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

数据库的物理存储层

简介

数据库的数据,在物理介质上的存储,在不同应用场景下采用不同存储方案,大致有内存和磁盘两类。
对于磁盘持久存储方案下,常采用文件的方式,来对应逻辑结构。

物理存储的分类

内存存储

在这种方式下,数据都是在内存,或者高速cache中,它的目的是访问速度非常快,修改频次可以非常高。
但是带来的影响是,数据不会持久化保存,关机数据丢失。

采用内存存储的方式,优点很明显,同样缺点也是很明显。
对于缺点的补充,又采用分布式多副本策略,来提高业务的持续性,同时也能继续保持优点。

单纯采用此类存储方式的数据库,一般都会作为中间层来使用,作为一个数据缓存层,提高并发访问能力,尤其对于高频写入或修改,同时又需要大量查询。
后端又会再接入其它持久化类型的数据库,作为最终数据存储数据库。

磁盘存储

在这种方式,将数据直接写入磁盘,当然会产生大量的IO。
使用此方式的场景通常是

  1. 对于数据可靠性要求非常高,单位数据价值非常高,那么必须实时落盘持久化;

  2. 对于大数据场景,内存存不下海量数据,只能落盘,而且数据实时性要求不高,比如数据统计分析,可以先存下来,再分析;

混合型存储

混合型指即持久化数据,又兼内存型的访问快的优点。大致可以分析两类:

  1. 偏内存型的;数据常驻内存,同时会采用策略写入磁盘,在掉电等故障下,可以从磁盘再次加载数据到内存;

  2. 综合型的;内存中会存储最新数据,采用顺序写磁盘记录redo日志,同时数据也会在不影响访问情况下写到磁盘;此种模型下,内存充当数据缓存区的作用。

文件存储

下面对于物理存储下,文件的组织形式和格式进行分析。
文件管理

  • 每个表对应一个或多个文件,也就是不同的表用不同的文件来存储;
  • 文件类型与逻辑数据库对象有对应管理,比如存储表的文件,存储索引的文件;

文件内容

文件结构

拿表文件来说,文件内容包括类型信息,还有文件内的数据组织信息,以及表的行数据;

  • 文件内容是二进制形式
  • 文件以块为单位进行划分,当然块大小最好与文件系统的块对齐或小于文件系统的单位;
  • 数据块也有不同的类型和内部的组织形式

行存储

page结构

行的删除策略

策略种类

对于删除行后的存储空间管理,大致有三种方面,比如删除第n行

  1. 将n+1… i 移动到 n … i -1 的位置
    这样空闲空间就一直在最后
  2. 将n的位置留下,也一次i+1插入时占用,此种情况需要行的size固定
  3. 将n的位置留下,以后将n+1删除后,使用空闲空间的链表串起来,统一进行整理

利弊比较

  • 第一种策略,行size不需要固定,空间管理简单,对于删除操作,内存拷贝较大;对于插入就非常简单,查找也就容易;
  • 第二种策略,对于行的size就要固定,否则空洞区域很难被利用;当然行size固定后,就有很多限制,同时带来一定空间浪费;
  • 每三种策略,空间管理较复杂,插入和删除比较简单,但是对空闲空间管理,需要额外进行处理,易带来存储的膨胀,对于查询会带来 读/写 IO放大,少量数据的空间需要进行读写;

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:[email protected]
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

猜你喜欢

转载自blog.csdn.net/senllang/article/details/131348188