「数据库系列三」磁盘、内存和带宽

聊聊影响流量的三大物质因素:磁盘、带宽、内存

速度上内存 》带宽(带宽可以看作网络的吞吐量)》磁盘

 google 工程师Jeff Dean 首先在他关于分布式系统的ppt文档列出来的,到处被引用的很多。

磁盘:

①寻址--毫秒ms级别的。

对于磁盘来说一个完整的IO操作是这样进行的:当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(Actuator Arm)带读写磁头(Head)离开着陆区(Landing Zone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking)对应消耗的时间被称为寻址时间(Seek Time);但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(Rotational Delay);接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(Data Transfer),对应的时间称为传送时间(Transfer Time)。完成这三个步骤之后一次IO操作也就完成了。

衡量磁盘的性能最重要的两个参数就是IOPS和吞吐量。

因此只要给定了单次 IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IO Chunk Size / Max Transfer Rate。

现在我们就可以得出这样的计算单次IO时间的公式。

  IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate

于是我们可以这样计算出IOPS。

  IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)

IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(Online Transaction Processing),IOPS是关键衡量指标。另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。

简而言之:

  • 磁盘的 IOPS,也就是在一秒内,磁盘进行多少次 I/O 读写。
  • 磁盘的吞吐量(指的是硬盘或设备(路由器/交换机)在传输数据的时候数据流的速度即使同一块硬盘在写入不同大小的数据时、表现出来的带宽也是不同的),也就是每秒磁盘 I/O 的流量,即磁盘写入加上读出的数据的大小。

从上面的数据可以看出,当单次IO越小的时候,单次IO所耗费的时间也越少,相应的IOPS也就越大。但是,上面我们的数据都是在一个比较理想的假设下得出来的,这里的理想的情况就是磁盘要花费平均大小的寻址时间和平均的旋转延时,这个假设其实是比较符合我们实际情况中的随机读写,在随机读写中,每次IO操作的寻址时间和旋转延时都不能忽略不计。

写入10000个大小为1KB的文件,比写入一个10MB的文件耗费更多的时间。因为10000个文件需要做好几万次IO,而写入10MB的大文件,因为是连续存放,所以只需要几十个IO。

对于写入10000个小文件,因为每秒需要的IO非常高,如果用具有较高IOPS的磁盘,将提速不少。

写入10MB文件,就算用了较高的IOPS也不会提升速度。因为只需要少量的IO。只有用较大传输带宽的才会体现优势。

②带宽--单位时间内能传输的字节流能有多少,几个G或几M。

  • 高传输带宽在传输大块连续数据时具有优势 
  • 高IOPS在传输小块不连续的数据时具有优势

内存:

①寻址--纳秒ns级别的。秒=1000毫秒=1000*1000微妙=1000*1000*1000纳秒。在寻址上,磁盘比内存慢了10万倍。

磁盘I/O存在机械运动耗费,因此磁盘I/O的时间消耗是巨大的。而内存是晶体管制作的(CPU也是晶体管做的),而晶体管的特性就是我们平时常说的用开关的开和关来表示1,0,通过一些门电路的组合可用来表示数字和实现复杂的逻辑功能,而内存主要是用来临时保存数据,CPU就是处理一些逻辑关系。晶体管由于必须得通电,然后用电流的有无状态来表示信息,充放电后电荷的多少(电势高低)分别对应二进制数据0和1,所以只有通电的时候可以保存数据,电一断内存里的晶体管状态就处未知状态就啥用处也没了,而磁盘断电后磁性物质还存在。

但现在也正出现一些非易失性存储介质,及时掉电也不会失去数据。

下面是我总结的目前一些主流的存储介质:

②带宽

生活中我们经常听到宽带或者是带宽之类的东西

宽带:即接入到广域网的线路,可简单理解为电信接的光纤接入。

带宽:接入宽带的理论网速上限,比如常说的100Mbps家庭宽带

为什么我们经常说我们的前兆宽带,但是却很慢呢?因为你用的实际上是多有这个光纤的分时多路复用,所有人都在用。

再来聊聊单位问题:

大家都知道计算机存储设备不论内存、硬盘存储数据最终都是通过0和1实现的,这叫1位(1 bit)。而保存一个汉字需要8位(8 bit)也就是1字节(1 Byte)。位/字节都可以缩写成b/B,而大B和小b又喜欢被人混用,通常大B缩写指的是字节,小b缩写指的是位,这样很容易混淆概念。

速度单位(字节每秒 Byte/s)

有了上面的介绍就清晰了。通常下载东西,10MB/s是标准的说法,也就是每秒千万字节。不要用什么Mb/s、mB/s、mb/s这些幺蛾子单位。

带宽单位(位每秒bit/s)

和速度单位不同,带宽也可以说是位宽100Mbps(100Mb/s)是标准的说法,也就是一千万兆位每秒。注意这里用到了位。所以100Mbps的带宽换算成理论最大速度是12.5MB/s,这里又变回了大B,也就是字节。

那么我们平时的千兆光纤说的是1000Mbps,这里的是指bit位而不是字节(千兆宽带理论上的下载速度是1000Mbps/8=125Mb/S)。

机械硬盘读写速度平均60---80MB每秒

固态硬盘不同品牌型号之间,平均大约在150---300MB每秒

也就是说一般的家庭网络,使用上ssd就达到上网的极限了。

什么时候会造成网络拥堵呢?

如果你使用内存数据库,如果传输数据很大笔网络带宽大很多的话就会堵死你的网络,

举例DDR3  1600HMZ的内存带宽速度就=1600HMZX64/8=12.8GB/S

可以看到内存带宽是非常之高的,基本上可以满足我们对平常对数据的所有要求。

内存带宽=内存等效频率X64/8

I/O Buffer:

磁盘中的磁道和扇区,一扇区512字节byte,如果磁盘容量很大,而扇区很小,势必会增大索引(相当于我给扇区编的号)成本。操作系统无论从磁盘读取多少数据都是以4K为单位。

随着文件变大,速度会越慢,磁盘IO会成为瓶颈。

数据库:

数据库的出现是为了改善磁盘IO的瓶颈。但整体而言,磁盘IO和数据库的IO总量是相等的,因此就有了索引的概念,如果没有索引,仅仅只是建了数据库和表,不会有太大帮助,依旧很慢。

数据库中最小的单位为page页,以4k为单位。

关系型数据库建表,必须先给出schema,数据类型(字节宽度),存数据时倾向于行级存储。先给出字节宽度的好处时,保留了位置,在插入或更新数据时直接进行覆写而不用进行数据移动。

索引也是数据,和表数据一样都存储在硬盘中。在内存中创建一棵B+树用于将索引的区间和偏移存储起来,索引和数据存在磁盘,因为内存有限,存不下这么多的数据,利用索引提高遍历查找的速度,减少磁盘IO和寻址的过程,但数据还是从磁盘获取。

内存数据库

内存虽然掉电会失去,但是如果仅仅作为查询临时存储一些小东西,可以大大减少磁盘io和增大并发量。所以内存数据库诸如redis出现了。

引用:

平均吞吐量计算公式_磁盘性能评价指标—IOPS和吞吐量_洛阳小散户的博客-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值