顺序读写和随机读写

之前学习数据库相关知识的时候经常看到一个结论:随机读写的性能相比顺序读写差很多,要尽量避免。然而对于“随机读写和顺序读写之间的差异有多大,差异的原因是什么”一直是一知半解,这次有时间就好好学习一下相关知识。

1. 磁盘读写的两种情况

1.1 顺序读写

顺序读写是指,要读写的数据存储在磁盘的一整块连续的地址上。举个例子老师发卷子的例子,老师按座位发卷子,找到坐在第一个的同学,一路走下去就能正确的把卷子发到每位同学的手里。简单来说就是只需要找一次,就可以完成读写数据。

1.2 随机读写

磁盘的随机读写是指,要读写的数据分布在磁盘中多个不连续的地址上。还是老师在班里发试卷,老师按学号发卷子,1号2号3号4号一个个发过去。但是学生的座位并不是根据学号来安排的,所以老师就需要先跑到1号的座位发给他试卷,再去找2号发试卷,以此类推。简单的说就是边找数据边读写。

1.3 磁盘读写参考速度

通过网上搜到的图片对两种读写方式的速度有个大概的印象,数据是否特别精准其实不是特别重要。

1.3.1 顺序读写速度

在这里插入图片描述

固态硬盘(SSD)顺序读数据的速度大概在470-2300M/S,机械硬盘(HDD)则是200M/S。固态硬盘(SSD)顺序写的速度是160-1300M/S,机械硬盘(HDD)则是130M/S。

1.3.2 随机读写速度

在这里插入图片描述

这是随机读写的速度,固态硬盘(SSD)读取数据的速度在20-50M/S,而机械硬盘(HDD)的速度就比较低了只有0.6M/S。固态硬盘(SSD)随机写入数据的速度大约在60-200M/S,机械硬盘(HHD)则在1M/S。

1.3.3 对比

读对比

硬盘类型顺序读随机读
机械硬盘2000.6
固态硬盘479~230020~50

写对比

硬盘类型顺序写随机写
机械硬盘1301
固态硬盘160-130060-200

不论是固态硬盘(SSD)还是机械硬盘(HDD),顺序读写相比随机读写都要快几十上百倍。所以很多对性能有要求的底层应用都会想办法避免随机读写(之前在Mysql的书中看到过一些磁盘读写的内容,当时一知半解,这也是为什么找这方面资料的原因)。
对结论有了概念之后,接下来要看看是什么导致了这样的结果。

2. 随机读写耗时原因

随机读写和顺序读写的差异在于定位数据的次数。顺序读写只需做一次数据定位的操作,剩下就是数据传输的时间。随机读写由于数据的物理位置分散所以需要不断的进行重新定位,定位操作会消耗大量的时间。

2.1 机械硬盘

硬盘读写耗费的时间可以分为:寻道时间、旋转延迟、数据传输。
寻道时间:硬盘收到指令调动磁头摆臂,将摆臂移动到指定磁道的时间。
旋转延迟:主轴旋转,将数据所在的扇区移动到磁头下方所花费的时间。
数据传输:磁头读取数据传输到主控的时间。
其中寻道时间和旋转延迟主要依赖机械移动(寻道时间是机械臂移动而旋转延迟是主轴转动),机械移动的耗时远大于数据传输,是机械硬盘读写慢的主要原因。目前磁盘的平均寻道时间一般在315ms,一般都在10ms左右,磁盘旋转一圈大约需要811ms ,由此得出定位一次数据就需要10~25ms。

2.2 固态硬盘

固态硬盘在内部维护了Mapping Table用来存储逻辑地址和物理地址之间的映射关系,确定了物理地址后可以直接对硬盘上的Page进行读写。固态硬盘虽不像机械硬盘一样每次定位数据都需进行机械运动,但访问Mapping Table也会中断读写操作,相比持续进行数据传输的顺序读写还是会慢不少。

4. 参考资料

“下载速度变慢、卡99%、电脑变卡”竟然是因为它!
程序员需要知道的SSD基本原理
SSD固态硬盘的结构和基本工作原理概述
硬盘三大种类(SSD;HHD;HDD)
《数据库系统实现 第二版》
机械硬盘拆解实录
浅谈机械磁盘相关概念:磁道、柱面、扇区、寻道时间、旋转延迟、数据传输时间
硬盘基本知识(磁头、磁道、扇区、柱面)
深入了解机械硬盘的读写原理和碎片的产生
科技简章032-机械硬盘

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值