[数据库系统]存储和文件结构

URML 2019-06-28

所有计算机问题都可以归结为缓存问题 ---某大佬

 上面这句话是某日在知乎上无意看到的,但却在我的脑海里停留良久。如果之前看到这句话,可能也就略过了,但最近做了不少缓存想关的工作,从redis到ADT设备缓存,从web应用到操作系统实现,缓存无处不在,毫无疑问,数据库系统也缓存。这篇笔记主要从理论出发,浅析数据库系统的存储和文件结构。

1.RAID

RAID是什么?

 RAID(ReDundant Array of Independent Disk)即独立磁盘冗余阵列,是一种多磁盘组织技术。
 说人话:RAID其实就是通过冗余提高存储的可靠性和并行性,由概率论知识(概率论??)可以知道,一堆磁盘出现一次故障的概率肯定比某一张磁盘发生故障的概率大,如果我们的N张磁盘在不做备份的情况下,只要有一张出现毛病,就会损失大量的数据,对于某些应用来说,就算丢了1byte的数据都是不可容忍的(你的支付宝少了1byte的钱(我没这么多 不用担心)),引入冗余是个解决的好办法,嗯,最简单粗暴的方法就算砸钱复制每一张磁盘,这种技术也就是镜像(影子),即一张逻辑盘对应几张物理盘,这样即使你的1byte记录的巨款在某个盘上丢了也没事,但这时候你说,万一地震了火灾了三体人入侵了怎么办(三体人入侵你就等着去澳大利亚吧),当然,尽管有这么多可能,镜像也比单张磁盘的可靠性高不少(平均丢失时间可以长达55~100年)[1]

 同时,RAID还可以提高并行性,就像使用Mycat进行数据库分片一样,我可以在多张磁盘进行数据拆分来提高传输速率,主要有以下几种:
 1.比特级拆分(听起来很厉害的样子):把每个字节都进行了拆分,将不同位存到不同的磁盘,比如第i位存到第i号磁盘。(好细致。。)
 2.块级拆分(最常用):把磁盘阵列看成一块单独的大磁盘,并且给块进行逻辑编号,比如将逻辑上的第i块存到物理磁盘(i mod n) + 1张磁盘上,有点意思了哈,读一个大文件的时候,可以从n张磁盘并行取n个块,这样不就快了吗。
 磁盘系统并行的两个目的:1 负载平衡多个小的访问操作(块访问)以提高访问操作吞吐量,2 并行执行大的访问操作,以减少访问操作的响应时间[1]。

RAID级别

 前面说道,镜像是比较烧钱的,拆分虽然提高了并行性,但是不能提高可用性。为了降低成本(省钱)提出了一些方案,分为若干个RAID级别(RAID level),具体的就不赘述了。

2. 文件组织

 数据库外表看起来这么高大上,其实底层还是用文件存储的,由操作系统进行维护,数据库中的记录都是存在块中的(而一个块可以包含很多记录),块是存储分配和数据传输的基本单元,大多数数据库默认块大小为4到8KB
 记录可以分成定长和变长记录


Reference

[1] DataBase System Concepts 6th Abraham Silberschatz

相关推荐

lightlanguage / 0评论 2020-04-22