前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10分钟!搞懂计算机磁盘实现原理

10分钟!搞懂计算机磁盘实现原理

作者头像
林老师带你学编程
发布2022-09-23 16:11:35
3650
发布2022-09-23 16:11:35
举报
文章被收录于专栏:强仔仔强仔仔

很多面试题都会问,MySQL的索引数据结构是什么,答案很简单,是B+Tree,然后又会问,为什么是采用B+Tree,而不是一般二叉树呢,原因也很简单,降低树的高度,可以减少io交互次数,也就是减少读写磁盘的次数。那问题来了:为什么读写磁盘速度会慢呢?它是一个怎样的过程,它到底慢在哪里呢?

一、磁盘组成

在解释磁盘读写慢之前,我们首先要了解它底层到底是个什么东西,数据到底是如何存储在物理设备上面,是以一个什么的形式存在。所以我们先来了解一下:磁盘究竟是什么,是用什么介质来存储数据的,数据在介质中的形式是什么样的?

1.1 磁盘是什么

磁盘(disk)是指利用磁记录技术存储数据的存储器。磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。

来源《百度百科》

1.2 磁盘存储介质

所以存储介质是:用一堆可以存储正负电极的磁性材料组成,因为正负电极可以代表计算机中0和1。所以我们所熟知的视频、语音、图片、文字等这些 ,在磁盘存储形式都是0和1,映射到存储介质中,就是一堆的正负磁性材料。

二、磁盘寻址过程

磁盘的存储介质了解之后,那回到我们刚才说的问题,为什么进行磁盘io读写会慢,要回答这个问题之前,我们先来了解一下,磁盘到底是如何寻址的,如下图所示:

目前市面上一般有两种磁盘,一种是机械磁盘(又叫做HDD),另外一种是固态磁盘(又叫做SSD)。后者比前者速度快,稳定性要好,当然价格相对也更贵。我们今天主要介绍经典的HDD磁盘是如何寻址的。

2.1 机械磁盘物理结构

机械磁盘是由很多盘片组成的圆柱体,每个盘面有很多的磁道,磁道里面又可以划分为很多的扇区,扇区才是真正存储数据的地方。所以地址寻址本质上,是指从一个个扇区中找到所需数据的过程。

2.2 机器磁盘的寻址过程

机械磁盘存在两组运动,一组是磁盘的旋转运动(旋转时间),一组是机械臂控制磁头的沿半经方向的直线运动(寻道时间),其中寻道时间远大于旋转时间。所以我们在寻址时优先考虑磁盘旋转,而后再考虑磁头移动。

因为读取数据,本质上是通过磁头读取介质中的正负磁性,然后通过电流传输回去,这个读取过程是非常快速的,相对旋转时间和寻道时间几何可以忽略不计。所以读取速度的瓶颈就是如何减少寻址的时间。

在我们不知道具体物理地址之前,需要进行全盘遍历寻址,那如何遍历寻址才会高效呢?上头我们介绍到,机械磁盘其实是圆柱体,是由很多盘片组成,又因为寻道时间大于旋转时间远,所以是并发同时进行最外层磁道的读取,如果整个圆柱体的当前磁道都读取不到数据的情况下,再移动磁头,也就是进行寻道,然后再接着继续旋转读取磁道信息,这样一直反复直到找到对应的数据。

但是不管是旋转还是寻道对比内存和cpu处理时间,都不在一个数量级上面,所以这也是数据库索引为什么用B+Tree,以此来降低树的高度,减少磁盘访问次数的原因。

2.3 固态磁盘的区别

固态磁盘和机械磁盘物理结构有着本质的区别,它没有扇区、盘片、圆柱体这些概念,从名字就可以看出,它不是机械来驱动的,它是采用存储芯片进行数据存储。固态磁盘的存储芯片主要分为两种:一种是采用闪存作为存储介质的;另一种是采用DRAM作为存储介质的。目前使用较多的主要是采用闪存作为存储介质的固态磁盘。

固态磁盘啥都好,就是价格贵(哈哈哈),还有一个非常核心的问题,就是存在写入次数上限,这个和它的工作原理有关(有兴趣的同学可以自行百度),超过一定次数,就会损坏。但是这边写入次数,并不是指文件写入次数,而是写入超多多少的量才算一次,一般的SSD的寿命在10-20年之间。

固态磁盘虽然和机械磁盘很不一样,但是为了保证计算机的兼容性,不需要对上层程序进行更改,固态磁盘实际寻址方法和机械磁盘寻址方法是一样(软件层面上),只是磁盘内部做了兼容处理。最有力的证据就是:如果二者不兼容,旧电脑的磁盘是无法变更为固态磁盘的,因为硬件程序不兼容。

三、文件系统

计算机磁盘我们现在清楚了,但是我们不可能每打开一个文件,就全局遍历所有的内容,这样会导致打开一个文件,就要等很长一段时间,效率太差。而且磁盘存储数据是0和1,文件是各种格式的数据,需要有一个数据解析转化的过程。那谁来实现这个过程呢,对就是文件系统。

3.1 什么是文件系统

像我们不管是开发程序还是日常使用软件,对于文件的读写,都不需要考虑底层存储细节,而且速度非常快,实现这一切的功臣就是我们所熟知的操作系统。

每个操作系统都提供了成熟的文件系统。不管是linux,还是win系统,都有自己的文件系统来处理文件的读写操作。下面我们就来介绍一下,文件系统到底是如何工作,一个文件要怎么做,才能快速的找到存储地址,从而快速的读写。

那什么是文件系统呢?说白了就是:介于磁盘上层的一个读写数据系统,让应用层不需要知道磁盘复杂结构,就可以快速寻址并解析原始数据,返回文件对应格式数据。

3.2 如何解决寻址问题

那文件系统到底怎么解决快速寻址的问题?大家有没有发现,每当我们初始化系统之后,就莫名其妙少了一部分的磁盘空间,这部分的磁盘空间是无法存储数据,是操作系统独享的。这里面除了操作系统所需要的空间外,还有一部分空间是用来存储元数据。

上面的磁盘空间是1T的,也就是有1024GB空间,现在只有931G空间,其中一部分就是被元数据所占用。

什么是元数据的,首先我们系统中所有的文件都在某一个目录上面,所以最基础的文件结构就是:目录--》文件,再复杂点,就是目录--》子目录--》子目录....--》文件。所以我们只要确定文件到底存储在哪个目录下,就可以直接跳转到这个地址去读取文件。

元数据就是这些目录和文件对应的磁盘物理地址。当然目录和文件也是一个海量的数据,不可能一股脑全部放到一起,每次全量扫描这种。它也是采用上下级的形式,从最顶层一直到最底层。上层的元数据在系统启动之后会初始化到内存中,并结构化为方便查询的数据结构。

这样打开一个文件就变成,从内存/磁盘中找到文件的物理地址,然后通过磁盘读写,将数据读取出来,通过文件系统转译为文件本身格式,将数据返回给调用者。

上述只是简单地对文件系统做一个介绍,文件系统的内容永不止这些,目前比较主流的是FAT和EXT2文件系统,有兴趣的同学可以阅读:文件系统是怎么通过路径来知道文件所在的磁盘位置? - 知乎

四、复盘总结

了解底层存储原理和文件系统之后,我们再去学习各类数据库就会事半功倍。童靴们要明白,在物理存储介质没有突破之前,任何一款数据库想要达到优质的性能,除了不断优化框架和算法之外,必然是采用空间换时间的办法。

因为单台计算机是有上限的,但我们的数据量又是没有上限。所以必然要采取分布式存储的架构来扩展系统。但是如果采用分布式,要保证CAP,就必须要多副本、多机器,这本身就是一个很大的成本在里面。CAP 理论是针对分布式数据库而言的,它是指在一个分布式系统中,一致性(Consistency, C)、可用性(Availability, A)、分区容错性(Partition Tolerance, P)三者不可兼得。所以同学们如果有机会作为架构师来选择数据库的时候,就要把握好这个度了,目前没有一款产品,可以完美的解决各种大数据问题,都是某一方面存在特性,但是又不完美,需要根据业务场景来确定,而不是简单的拍脑袋。

-----------------------

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档