后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
3682 人已学习
课程目录
已更新 16 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (6讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
13丨软件设计的里氏替换原则:正方形可以继承长方形吗?
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

05丨文件系统原理:如何用1分钟遍历一个100TB的文件?

李智慧 2019-11-27
文件及硬盘管理是计算机操作系统的重要组成部分,让微软走上成功之路的正是微软最早推出的个人电脑 PC 操作系统,这个操作系统就叫 DOS,即 Disk Operating System,硬盘操作系统。我们每天使用电脑都离不开硬盘,硬盘既有大小的限制,通常大一点的硬盘也不过几 T,又有速度限制,快一点的硬盘也不过每秒几百 M。
文件是存储在硬盘上的,文件的读写访问速度必然受到硬盘的物理限制,那么如何才能 1 分钟完成一个 100T 大文件的遍历呢?
想要知道这个问题的答案,我们就必须知道文件系统的原理。
做软件开发时,必然要经常和文件系统打交道,而文件系统也是一个软件,了解文件系统的设计原理,可以帮助我们更好地使用文件系统,另外设计文件系统时的各种考量,也对我们自己做软件设计有诸多借鉴意义。
让我们先从硬盘的物理结构说起。

硬盘

硬盘是一种可持久保存、多次读写数据的存储介质。硬盘的形式主要两种,一种是机械式硬盘,一种是固态硬盘。
机械式硬盘的结构,主要包含盘片、主轴、磁头臂,主轴带动盘片高速旋转,当需要读写盘上的数据的时候,磁头臂会移动磁头到盘片所在的磁道上,磁头读取磁道上的数据。读写数据需要移动磁头,这样一个机械的动作,至少需要花费数毫秒的时间,这是机械式硬盘访问延迟的主要原因。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(19)

  • miracle
    老师可以每篇最后问答下上篇文章结尾留下的问题吗
    2019-11-27
    4
    10
  • Geek_22cbf4
    老师,针对校验数据的生成过程还是不太理解!能帮忙解释的详细一些么?

    作者回复: 就是异或运算

    所有数据的bit位,逐位进行异或,得到的就是校验位。

    如果丢失部分数据,用校验数据和其余数据逐位进行异或运算,可到丢失部分数据。

    举例,5块磁盘做RAID5,四块磁盘上的bit为:0 1 1 1 ,那么异或计算后,校验位为 1,如果丢失了第一块盘上的bit位0,那么校验位1和其他三块盘上的bit位进行异或运算,可以算出0

    2019-11-28
    2
    6
  • 奔奔奔跑
    老师好,关于为什么P分散存储的问题我认为原因有以下两点:
    1.高可用,避免检验盘损坏了所有都用不了了。
    2.读取速度快,实现了检验数据的并行访问,大大加快了检验速度。
    2019-11-27
    4
  • vouv
    校验数据分散存储在不同磁盘上最主要目的是为了提高并发IO
    2019-11-27
    4
  • 龙哥
    我觉得螺旋存储校验位是为了提高磁盘使用率,校验位应该比数据块要小。如果校验位只存一块,应该会有数据盘满了,而校验盘还有一大块空间的情况
    2019-11-27
    3
  • golangboy
    老师讲的透彻,成体系,感谢!分布式存储对数据的读写,都要经过元数据节点,此后的数据读写能力会提升很多。但元数据节点应该有性能瓶颈问题,找的过程会限制读写能力,请教老师,这种一般怎么处理?

    作者回复: 元数据节点NameNode只提供类似文件控制块的数据读写,数据量非常小,不会成为瓶颈。一个数据块Block大小64M,对应的NameNode控制块数据大概只有几十个字节。

    2019-11-27
    3
  • 禾斗君
    主要为了优化数据读取吧,如果校验码都放在同一块硬盘上,那么业务数据读取只有N-1块硬盘可以提供服务。 采用螺旋式分布时,N块硬盘都可以提供服务。
    2019-11-27
    2
  • 灰灰
    粗读,打卡。
    2019-12-16
  • 蓝魔丶
    求证老师一个问题:
    我看网上解释Ext4 文件系统中13级block满满 4K 的指针。Block 指针是 32bit 的,一个 block 可以存储 4K/32bit = 1024个 Block 指针,文中是256个,这个是因为文件系统不同吗?

    作者回复: 32位指针只有4G寻址空间,应该是不够管理硬盘空间的。

    2019-12-13
  • 芒果
    这样,每个 inode 最多可以存储 12+256+256*25+256*256*256 个数据块

    这里的公式写漏了,应该是12+256+256*256+256*256*256 个数据块

    作者回复: 收到,尽快修正,谢谢~

    2019-12-13
  • 木风
    均匀的数据分布,可以n个硬盘同时读取,速度更快
    2019-12-06
  • Paul Shan
    Raid 0 将磁盘并行写入
    Raid 1 就是两块盘互为备份
    Raid 10就是两组硬盘,并行写入,互为备份。
    Raid 5 ((n-1)/n)信息并行写入,1/n信息校验备份
    Raid 6 ((n-2)/n)信息并行写入,2/n信息校验备份
    分布式:无数组信息并行写入,每组自己校验备份。
    2019-12-05
  • 星辰
    针对校验数据的螺旋式存储 和 真正的数据存储一样 ,也是为了防止某块硬盘坏了 在丢了校验数据 和 某部分真实数据的时候 可以通过其他硬盘上的这部分备份 或 校验数据 来恢复吧
    2019-11-30
  • 俊伟
    老师,RAID那里图没看懂,D,a,t,p,Q都是什么意思?图有点没太明白。

    作者回复: d a t a表示需要写入RAID的数据,p q表示两种不同校验算法得到的校验数据。

    2019-11-29
  • 老王的老李头
    我觉得题目改成,如何完整的将100T的数据存起来,更搭
    2019-11-29
  • 丁丁历险记
    为啥我的硬盘是顺序读3700M
    2019-11-28
  •  扬帆丶启航 
    校验数据P存储在所有硬盘上,这样每一块数据丢失后都能通过校验数据与其他硬盘的数据进行运算获得丢失的数据。
    2019-11-28
  • 老男孩
    突然发现专栏的名字好像变了?😁这估计是平台改的,这个名字目的性更强一些吧。今天的内容,老师从文件系统到RAID再到分布式文件系统讲解很系统也很全面。这里我有个问题想问一下,在分布式文件系统中,一个文件被分成多个数据块保存在不同datanode上,而且对这些数据块进行了备份。那么我们是否可以直接用RAID 0的方式把单节点的读写速度扩大N倍?还是采用RAID 5在速度和容错性之间做一个权衡?

    作者回复: HDFS缺省的高可用策略是RAID0,数据会做多个备份,应用可以指定备份数,如果想要加快读的速度,可以增加备份个数。

    2019-11-28
  • 苏志辉
    因为是每行的校验所以一行一个,为了防止一个坏了影响最小,所以每一块一个
    2019-11-27
收起评论
19
返回
顶部