数据库之存储

article/2025/10/22 10:30:46

       无论是什么数据库,其本质还是以数据的形式存储在计算机的物理介质上的,所以,我们先来看看什么是物理存储介质。

物理存储介质:高速缓冲存储器->主存储器->快闪存储器->磁盘->光盘->磁带,从左到右性能由高到低,价格也由高到低

 

1.磁盘性能的度量:容量,访问时间,数据传输率和可靠性

       平均寻道时间:磁盘臂移动到正确的磁道花费的时间的平均值

       平均等待时间:磁盘等待旋转到指定的扇区需要的平均时间,一般是旋转一圈花费时间的一半

       访问时间=平均寻道时间+平均旋转等待时间

       数据传输率:数据写入磁盘或者从磁盘中读取的速率。目前磁盘系统支持25~100MB的数据最大传输率

       平均故障时间(可靠性)

 

2.磁盘块访问的优化

       2.1缓冲:从磁盘读取的块暂时存储在内存缓冲区中,因为从缓冲中读取数据需要的时间成本比一次磁盘读写小了几个量级,基本上可以忽略不计。

 

       2.2盘预读:当一个磁盘块被访问时,相同磁道的连续块也会被读入到内存缓冲区,即对还未被访问的磁盘块预先读取到缓冲区中,为什么会设计磁盘预读?这样做能够有什么好处?

在实际的磁盘使用中,人们总结出一个规律:当一个磁盘块被访问时,下一次访问操作有80%的概率会读取上一个磁盘块周围的磁盘块(顺序读取的概率是远远大于随机读取的),针对这种规律,便设计出了磁盘预读这种操作。需要注意的四,对于随机块的访问,预读的效率并不好。

 

       2.3调度:优化磁盘性能度量的指标中的访问时间的影响因素之寻道时间

如果说当前需要访问的道的次序分别是:1 5 8  9 12 15,上一次访问的磁道是10号磁道,那么接下来该怎么调度能够在最少的时间内确保都能读取的情况?

最短寻道优先磁盘调度算法:每次都读取离当前磁道最近的磁道。这种算法思想下的确能够优化整体上的寻道时间,但是该算法的特性导致离当前磁道越远的磁盘读取需要的时间越远,这使得磁盘访问出现两极化(旱的旱死,涝的涝死)。

先来先服务:先请求的磁盘先访问,这种情况下能够确保很好的公平性,但是磁盘的访问时间很难优化。
电梯调度算法:确定一个方向,每次都从该方向上找到最近的磁道,就像电梯一样,每次都是朝着一个方向移动,电梯调度算法协调了效率和公平性这两个相互冲突的目标。

 

       2.4文件组织:为了减少块访问时间,我们可以按照与预期的数据访问方式最接近的方式来组织磁盘上的块。例如,我们预计一个文件将顺序访问,那么在理想情况下我们应该使文件的所有块存储在连续的相邻柱面上。

 

       2.5非易失性写缓冲区:因为主存储器中的内容在发生电源故障时将全部丢失,所以关于数据库更新的信息必须记录到磁盘上,这样才能在系统崩溃时得以保存。因此,更新操作密集的数据库应用的性能,如事务处理系统的性能,高度依赖于磁盘写操作的速度,这也是问什么Mysql会使用B+树结构存储的原因(后面会有专门的文章进行介绍)。实际上可以通过飞翼式新随机访问存储区大幅度家属写磁盘的操作。

 

       2.6日志磁盘:减少写等待时间另一种方法就是使用日志磁盘,即一种专门用于写顺序日志的磁盘,这和非易失性RAM缓冲区的使用非常相似。对日志磁盘的所有访问都是顺序的,这从根本上消除了寻道时间,并且一次可以写连续几个的块,使得写日志磁盘比随机的写要快许多倍。

    在数据库系统中,不需要等待写操作的完成,日志磁盘会在之后完成写操作(操作延时),进一步说,日志磁盘可以为了最少化磁盘臂的移动而重排写操作的顺序(就是先收集一些写操作,然后最这些写操作进行重新排序,使得写入性能提高)。支持这种日志磁盘的文件系统统称为日志文件系统。

 

3.独立磁盘冗余阵列RAID

       如果一个系统中使用大量的磁盘为提高数据读写速率提供了机会,如果并行访问磁盘的话,很多独立的读和写操作可以并发执行。此外,这种组织方式提供了提高数据存储可靠性的潜力,因为可以在多张磁盘中存储冗余信息,因此一个磁盘的故障不会导致数据的丢失。这种为了提高性能和可靠性而允许冗余的技术就是独立磁盘冗余阵列RAID。

       通过冗余提高可靠性:首先从可靠性方面切入,N张磁盘集合中的某张磁盘发生故障的概率比特定的一张磁盘发生故障的概率要高。假设一张磁盘发生故障的平均时间是100小时,那么由100张磁盘组成的阵列发生磁盘故障的平均时间是1小时。引入冗余是解决这个可靠性问题的解决方法,实现冗余最简单的方法就是镜像:复制一张磁盘,这样的话,一张逻辑磁盘对应两张物理磁盘,并且每一次写操作都要在两张磁盘上执行。两个磁盘同时故障的情况下才会导致数据丢失,忽略故障磁盘的恢复的话,发生磁盘故障的平均时间是100*100/2=5000小时,但实际上故障的发生的独立性并不是那么高的。

 

      3.1.通过并行提高性能

通过磁盘镜像,处理读请求的速度将翻倍,因为读请求可以发送到任意一张磁盘上(只要组成一对的两张磁盘都有用),每个读操作的操作速率和单一磁盘系统中的传输速率是一样的,但是每单位时间内读操作的数目将翻倍。

我们可以通过在多张磁盘上进行数据拆分来提高传输速率。数据拆分最简单的形式是将每个字节按比特分开,存储到多个磁盘上。这种拆分成为比特级拆分:例如,有8个磁盘的阵列中,将每一字节的第i位存储到第i个磁盘中,这8张磁盘组成的阵列可以看做一个逻辑上的单独的磁盘,这张逻辑磁盘的扇区大小将是一般扇区的8倍。

除了比特级拆分,还有块级拆分,块级拆分是将块拆分到多张磁盘中,把磁盘阵列看做一个单独的大磁盘。块级拆分是最常用的数据拆分形式。

       磁盘系统中的并行有两个主要的目的:

              1.负载平衡多个小的访问操作(块访问),以提高这种访问操作的吞吐量。

              2.并行执行大的访问操作,以减少大访问操作的响应时间。

              数据拆分提供高传输率,但不确保可靠性;镜像提供了高可靠性,但他十分昂贵(重复的写操作的代价)

 

      3.2RAID级别:

       通过结合“奇偶校验位”和磁盘拆分思想,从而以较低的代价提供数据冗余,人们提出不同的方案,这些方案具有不同的成本和性能之间的权衡,并且分为若干RAID级别。

              RAID0级:指块级拆分但没有任何冗余的磁盘阵列。

              RAID1级:指的是使用块级拆分的磁盘镜像(每张磁盘都有镜像)

              RAID2级:内存风格的纠错码组织结构,使用奇偶检验位(汉明码校验)。

                     以汉明码(Hamming Code)的方式将数据进行编码后分区为独立的比特,并将数据分别写入硬盘中。因为在数据              中加入了错误修正码(ECC,Error Correction Code),所以数据整体的容量会比原始数据大一些,RAID2最少要三台磁              盘驱动器方能运作。实际中并不使用此级别。         
1364022397_2235.png (300Ã150)

              RAID3级:位交叉的奇偶检验组织结构。数据内的比特分散在不同的硬盘上,每张磁盘都要参与I每个I/O请求,每秒钟支              持的I/O操作数较少,所以这种规格比较适于读取大量数据时使用。如果一个扇区被破坏,系统能准确地知道是哪个扇区              坏了,并且对扇区中的每一位,系统可以通过计算其他磁盘上的对应扇区的对应位的奇偶值来推断出该位是1还是0。

              如果 其余位的奇偶校验位等于存储的奇偶校验位,则丢失的位是0,反之为1。

1364022914_1976.png (220Ã163)

              RAID4级:块交叉的奇偶校验组织结构。RAID4使用块交叉的奇偶校验组织结构,而RAID3是位交叉奇偶校验组织结构。它像RAID0一样使用块级拆分,此外在一张独立的磁盘上为其他N张磁盘上对应的块保留一个奇偶校验块。它读取一个块只访问一张磁盘,因此允许其他的请求在其他磁盘上执行,有较高的总I/O传输率。

1364023165_2004.png (220Ã163)

              RAID5级:块交叉的分步奇偶检验位的组织结构。RAID5在RAID4的基础上进行了改进,将数据和奇偶校验位都分布到所有的N+1张磁盘中,而不是在N张磁盘上存储数据并在一张磁盘上存储奇偶校验位。实际中一般用RAID5而不用RAID4。

 

              RAID6级:P+Q冗余方案。与RAID 5相比,RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效也不会影响数据的使用。但RAID 6需要分配给奇偶校验信息更大的磁盘空间,相对于RAID 5有更大的“写损失”,因此“写性能”非常差。较差的性能和复杂的实作方式使得RAID 6很少得到实际应用。

              RAID1+0:RAID 1+0是先镜像再拆分数据,再将所有硬盘分为两组,视为是RAID 0的最低组合,然后将这两组各自视为RAID 1运作。

1364023606_5420.png (220Ã220)

              RAID0+1:RAID 0+1则是跟RAID 1+0的程序相反,是先分区再将数据镜射到两组硬盘。它将所有的硬盘分为两组,变成RAID 1的最低组合,而将两组硬盘各自视为RAID 0运作。

1364023700_9394.png (220Ã220)

性能上,RAID 0+1比RAID 1+0有着更快的读写速度。
可靠性上,当RAID 1+0有一个硬盘受损,其余三个硬盘会继续运作。RAID 0+1 只要有一个硬盘受损,同组RAID 0的另一只硬盘亦会停止运作,只剩下两个硬盘运作,可靠性较低。
 

3.3RAID级别的选择:

应当考虑的因素:

1.所需的额外磁盘存储带来的花费

2.在I/O操作数量方面的性能需求

3.磁盘故障时的性能

4.数据重建过程

       RAID0级用于数据安全性不是很重要的高性能应用。因为RAID2和RAID4被RAID3和RAID5所包含,所以RAID级别的选择只限于在剩下的级别中进行。比特级拆分(RAID3)不如块级拆分(RAID5),这是因为块级拆分对于大量数据的传输有与RAID3级同样好的数据传输率,同时对于小量数据的传输使用更少的磁盘。对于小量数据传输,磁盘访问时间占主要地位,所以并行读取并没有好处。RAID6提供比RAID5更高的可靠性,可以用于数据安全十分重要的应用。在RAID1和RAID5中选择十分困难。RAID1(包括RAID0+1和RAID1+0)提供最好的写操作性能。RAID5与RAID1相比具有较低的存储负载,但写操作需要更高的时间开销。对于经常进行读操作而很少进行写操作的应用,RAID5是首选。随着磁盘存储容量快速的发展,RAID1应用变广。

 

 

 

 


http://chatgpt.dhexx.cn/article/qjnin1Jd.shtml

相关文章

数据库存储介绍

数据存储在存储设备中,在实际应用中,有多种存储设备,下面我们一一介绍。同时在保存数据时,有特定的组织方式,在下面我也做简单介绍。 一 存储设备介绍 1.1 高速缓存 Cache,计算机拥有1M或跟多的高速…

Excel|给某一列添加同一个字

如图所示给新型冠状病毒肺炎数据中“武汉”这一列都加上“市”字: 先在D列打两行:“武汉市”、“孝感市” 然后在D3按CtrlE,即可全部填充 ps:如果删除某列同一个字的话用替换即可

鼠标单击就选中一个字的解决办法

有时候我们想在两个字中间插入一个字,点击鼠标时却总是选中一个字。 解决办法: 按一下键盘的Insert键就好了。 造成这种情况的原因:极大可能是因为我们删除文字时不小心碰到了Insert键。 看完如果对你有帮助,感谢点赞支持&…

什么是字节

** 什么是字节 ** 位(bit):是计算机 内部数据 存储的最小单位 11001100是一个八位数的二进制数。 字节(byte ):是计算机中 数据处理的基本单位,习惯上用大写B来表示; 1B(byte,字节…

关于“一个字等于多少字节?“的问题解答

网上有人说这个问法不严谨,我觉得严格说确实是这样,但是我个人觉得不能这样说! 举个例子,这个问题就好比你上初中的时候那些证明题很多其实是很不严谨的,但是限于知识体系,到高中你会发现好像不是那么一回…

键盘打字时,打一个字后面少一个字如何解决

键盘敲字时,如果光标在中间,输入一个字后面就少一个字 文字输入的例子 只需要按INS键就可以恢复正常了 注:如果是手提笔记本电脑,一个键盘有两下两行,先按一下FN按键,再按INS即可切换为正常状态了

“一个字等于多少个字节?”是一个不严谨的问法

“一个字等于多少个字节?”是一个不严谨的问法 直接回答一个字等于多少个字节,也是不严谨的答法。 相关概念: 1、位(bit) 来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位。…

parted分区命令行形式

一、pared分区实例 1、第一个主分区3G parted -s /dev/sdc mklabel gpt (标签为gpt,小于2t用msdos) parted -s /dev/sdc mkpart primary 0 3G 2、剩余空间给扩展分区 parted -s /dev/sdc mkpart entended 3 100% (从3G开始后面都做扩展分区)…

centos通过parted对2T以上硬盘分区并对根目录进行扩容

GPT的分区表很好了解决了传统MBR无法逾越2TB的限制。但是在Linux系统中,传统的fdisk命令无法支持gpt分区方式,这时候我们就要用到parted命令 需求: 将一个4t的硬盘(sdb)分为3个区,并将sdb1挂载在根目录下进行扩容 1…

Linux Command parted 创建分区

Linux Command parted 创建分区 tags: lvm 文章目录 Linux Command parted 创建分区1. 简介2. 交互模式2.1 常见命令2.2 查看分区表2.3 修改成 GPT 分区表2.4 建立分区2.5 建立文件系统2.6 调整分区大小2.7 删除分区 3. 命令行模式 1. 简介 虽然我们可以使用 fdisk命令对硬…

parted分区详解

---------- Linux中有两种常用的分区表MBR分区表(主引导记录分区表)和GPT分区表(GUID分区表),其中: MBR分区表:支持的最大分区时2TB,最多支持4个主分区,或3个主分区和1个拓展分区。 GPT分区表:支持最大18…

parted磁盘分区 教程

Linux parted磁盘分区实现步骤解析 相对于fdisk,parted用的比较少,主要用于大于2T的分区。 1.开始分区 help是查看帮助信息。 2.查看磁盘信息 可以看到当前磁盘没有分区,需要将分区表(Partition Table)类型更改为g…

【Windows环境下使用fvm管理多版本Flutter(flutter版本升级回退)】

Windows环境下使用fvm管理多版本Flutter(flutter版本升级回退) 安装FVM升级版本升级后,使用方法二再次安装fvm 安装FVM 方式一: 使用choco安装fvm(当时环境中Flutter版本是1.22.4,Dart是2.10.4&#xff0…

一个很好用的Flutter SDK版本管理神器fvm

前言 目前Flutter SDK正式版本已经更新到2.2.了,当升级了最新版运行之前的项目,其中最大的变化应该是要适配空安全了,这时如果项目又比较紧急暂不做适配,又只能降级Flutter版本了,然后新项目又要在最新Flutter版本去开…

在MacOS上不用FVM的Flutter多版本管理

网上看到都是用fvm进行多版本管理。 我用的方式没那么复杂,非常简单。 从下面url下载各版本的Flutter: https://flutter.dev/docs/development/tools/sdk/releases?tabmacos 按常规方式配置Flutter的环境。 将下载的Flutter包解压成文件夹后,都放到…

从FVM上线前的测试网统计报告中看前景,Filecoin将会迎来什么变化?

FEVM将在2023/03/14主网上线! 在Calibration网络升级正式完成后,Filecoin V18 Hygge升级将于2023年3月14日(π日)正式上线!此次升级将正式为Filecoin网络带来智能合约。基于FVM的可编程性。此次更新升级将释放数据经济…

fvm的管理多版本Flutter sdk

fvm简介 当多个项目使用不同的Flutter版本,或者Flutter发布新版本时,需要改变本地的Flutter版本,频繁的切换,非常消耗时间(upgrade),fvm的出现很好的解决多个版本来回切换的问题,并且对指定指定…

SecOc之Fvm新鲜度管理模块

Fvm新鲜度管理模块: 字段同步计数器(TirpCounter)重置计数器(ResetCounter)消息计数器(MessageCounter)重置低位(ResetFlag)描述MASTER FVM所在ECU会通过新鲜度值同步消息…

win下使用fvm实现多个Flutter版本的切换

win下使用fvm实现多个Flutter版本的切换 配置前说明:Win环境下,下载FVM时,需要先配置一个Dart环境,因为用到 dart pub命令 配置Dart环境 a. 方式一:可以去Dart官网下载安装 官网地址:https://gekorm.com/d…

FVM in CFD 学习笔记_第7章_OpenFOAM和uFVM中的有限体积网格

学习自F. Moukalled, L. Mangani, M. Darwish所著The Finite Volume Method in Computational Fluid Dynamics - An Advanced Introduction with OpenFOAM and Matlab Chapter 7 The Finite Volume Mesh in OpenFOAM and uFVM OpenFOAM是强大高效的开源代码,而uFVM…