能解决你80%关于存储的疑惑

news2025/1/16 4:00:34

概述

在计算机系统中,常用的存储介质包括寄存器、内存、SSD、磁盘等,寄存器的速写速度与CPU相同,一个时钟周期是0.3纳秒,而内存访问需要120纳秒,寄存器的读写速度比内存要快几百倍,固态硬盘访问需要50~150μs,磁盘访问需要一到十几毫秒,磁盘的读写速度比内存慢了几万倍,网络访问则更慢,需要几十到上百毫秒。

如果把CPU的一个时间周期当作一秒,磁盘访问需要几个月才能完成。

1 ns = 10-9 seconds
1 ms = 10-3 seconds
* Assuming ~1GB/sec SSD

磁盘在存储金字塔所处的位置

越是底层存储,容量越大,价格越低,但读写的速度越慢。越是顶端存储,容量越小,价格越高,但性能越好。
在这里插入图片描述

从磁盘结构角度理解为何顺序读写比较快?

磁盘的读写速度通常是毫秒级别的

磁盘由很多**盘面(Platter)**组成,我们用运动场的跑道类比,每个盘面上面有很多同心圆磁道,就像运动场里面的跑道一样。

每个磁道(Track)上面又划分了多个扇区(Sector),就像把一个400m的跑道划分成4个100m的跑道。每个扇区大小是相同的,通常是512字节。

在这里插入图片描述
很多盘面堆叠在一起组成磁盘,这些到轴心相同半径的磁道组成一个柱面(Cylinder)。

什么是寻道?

磁头通过在不同的柱面上来回移动读写数据,这个过程称为寻道。

读写耗时的计算公式

磁盘读写的耗时等于寻道时间(找到柱面)+旋转时间(找到扇区)+传送时间(包括数据读写时间)

读写影响因素

寻道时间通常为几毫秒,旋转时间是移动到对应的扇区,最长为“1/转速×60×1000”毫秒,通常磁盘转速在每分钟5400~15000转(RPM),传送时间又等于“1/转速×60×1000/每个磁道扇区数”,主要取决于磁盘转速和每个磁道的扇区数。

每次数据读取的速度主要取决于三个方面:寻道时间、磁盘转速和每个磁道扇区数。伴随着磁盘密度不断上升、转速越来越快,寻道时间成为最大的影响因素,所以,为了提高磁盘的读写速度,应该顺序读取,从而降低磁头来回切换的频率
操作系统为此设计了相关的磁盘调度算法,其中,“电梯调度”是最常用的调度算法。

增加磁盘的容量通常有两种方式

  • 增加盘片的尺寸或盘面数量
    当前磁盘的规格和服务器插槽大小是统一的,调整盘面数(厚度增加)或者改变盘面大小(增加直径)都会导致兼容问题,而且盘面直径增大还会导致磁头的寻道路径加长

  • 增加存储的密度
    提高单位面积的存储容量,这种方案目前比较流行,并且每年保持100%的提升

什么是逻辑块

512个字节的扇区是磁盘的最小管理单元,但这些扇区分布在不同的盘面上,如果每次读写扇区都需要通过柱面(Cylinder)、磁头(Head)、扇区(Sector)三元组去定位数据就太复杂了。所以,集成在存储设备里面的存储控制器抽象了一个简单数据管理单元“逻辑块”,这就是块存储的来历。

什么是LBA?

这些逻辑块通过数组方式暴露给操作系统,每次操作系统需要读取某一个扇区的数据时,发送逻辑块的编号**(LBA,Logical Block Address)**,存储控制器将它翻译成为CHS(柱面、磁头、扇区)三元组,从而读取磁盘的数据。SCSI就是采用了这种寻址方式。

它的优点除了上述的简单管理以外,还能够兼容不同的硬件设备,例如,磁带或网络存储就没有上面的三元组,通过这种抽象能统一管理各种存储

如果知道了LBA地址,对于磁盘来说,可以使用下面公式获取c柱面、h磁头、s扇区的具体值,其中,H代表磁头数,S代表扇区数:

●#c=#lba/(S*H)
●#h=(#lba/S)%H
●#s=(#lba%S)+1

固态硬盘SSD是闪存技术。目前已经出现了全闪存的存储系统,在未来将有可能取代硬盘,目前主要受限于价格和容量,在当前的数据中心内,还是以磁盘为主。由于SSD采用闪存芯片取代了机械臂移动和盘片旋转,读写速度非常快,普通的SSD读写都在500MB/s以上

什么是raid?

RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列),它的基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使得性能达到甚至超过一个价格昂贵、容量巨大的硬盘。RAID技术提供了一种高性能、高可靠的数据存储技术,通过RAID技术组合多个盘,当数据读写时可以分散到多个磁盘,从而提高读写速度。并且配合校验、纠错技术,当有一个磁盘出现故障后,能恢复数据,从而保证数据的高可靠。

RAID核心技术

条带指将数据拆分成多个子块,分别保存到不同的磁盘中。

例如,1GB的数据可以拆分成5个200MB的数据块,分别存储到5个硬盘上面,这样可以并行写入。

分布式存储和RAID有相同的设计思想

分布式存储和RAID有相同的设计思想:数据拆分存储。通过条带极大地提高了I/O的性能,但也存在明显的单点故障,导致数据丢失。

避免单点故障校验码

校验码原理是通过算法结合数据分块得出校验块,然后将数据块和校验块分布到不同磁盘上面,如果某一个或者多个磁盘损坏,通过数据校验算法逆向生产数据块,常用的算法是海明校验和异或校验。异或校验是通过将一个有效信息与一个给定的初始值进行异或运算,得到校验信息。如果有效信息出现错误,通过校验信息与初始值的异或运算还原之前的有效信息。

raid的分类

RAID等级从RAID0~RAID6七个等级。其中,RAID 0只做条带化,没有数据高可用保障
RAID 1通过镜像技术将数据同时原样写入两个磁盘,保障数据高可靠性;而RAID 5通过校验码的方式保存数据

raid1

RAID 1采用的就是镜像技术,它的写入速度会比较慢,但读取速度会比较快,如图所示。读取速度可以接近所有磁盘吞吐量的总和,写入速度受限于最慢的磁盘,没有校验数据。RAID1由于是数据镜像,所以浪费了一组磁盘,并且写性能不好,而读性能提升了。
在这里插入图片描述

raid5

RAID 5是当前最流行的RAID,RAID 5是通过计算数据的校验和,如果图所示数据文件A被拆分成A1、A2、A3三个数据块,通过校验算法计算出校验块Ap,并将这四个数据块保存到四个磁盘上面。无论是哪一个磁盘发生故障,都可以通过逆向生成数据块,从而保障数据的安全,RAID 5可以允许一个磁盘发生故障。
在这里插入图片描述

什么是存储总线?

总线是贯穿整个计算机系统的一组电子管道,它负责在各个部件之间传输字节信息,通常是8个字节(64位)。当CPU需要读取存储数据的时候,先通过内存总线从内存中获取数据。如果数据不在内存中,则通过主机I/O总线去获取,于是请求便到了I/O控制器,也就是常说的HBA卡(可能是集成在系统主板上面的,也可能是独立的插槽),例如,iSCSI适配卡,接下来我们能看到存储I/O总线,下面连接着物理存储设备
在这里插入图片描述

如果是网络存储设备,则会进入网络适配器,例如网卡,经过网络传输,连接到存储服务器的网络适配器上,然后经过与上面相似的路径写入存储设备

在这里插入图片描述

iSCSI协议

SCSI(Small Computer System Interface,小型计算机系统接口)是一种用于计算机及其周边设备之间(硬盘、软驱、光驱、打印机、扫描仪等)数据传输和通信的协议。SCSI协议已经被广泛应用到很多高端的SAN存储系统中,但成本很高,需要专用的光纤交换机等设备,而大部分机房的建设都是基于相对廉价的以太网交换设备的。随着软件定义存储被推广,使用TCP/IP去承载SCSI协议的方案逐渐成熟,这就是iSCSI协议又被称为IP-SAN的原因

在这里插入图片描述

文件系统

分散的数据块不能直接被程序读写,还需要一种更加直观的管理方式。文件系统是一种存储和组织计算机数据的方法,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据,不必关心数据实际保存在硬盘(或者光盘)地址为多少,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的哪个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写到了哪个文件中

在这里插入图片描述

在这里插入图片描述
整个存储I/O从上到下主要分为:
VFS、Block层、I/O调度层、SCSI驱动层。
其中VFS为了兼容各种文件系统,例如:ext4、xfs、proc等,对上层提供统一的open、write、read等接口。对文件的读写最终都会转化为Block层的数据库的读写,在Block层,可以对多个读写请求进行合并,从而降低读写次数。I/O调度层通过I/O调度算法(电梯算法、NOOP等)控制读取顺序。最终将请求发送到SCSI驱动。如果底层是磁盘设备,那么将会通过控制磁头移动来读写数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3基础(26)___defineProps、defineEmits、defineExpose组件通信

defineProps、defineEmits、defineExpose组件通信 在使用这个之前&#xff0c;我们需要知道setup的语法糖写法&#xff0c;因为上面的三个api需要在这个语法糖中才能使用&#xff1a; <script setup>console.log(LiuQing) </script>里面的代码会被编译成组件 set…

m分别通过GA遗传优化算法对企业不同产品订单生产进行时间优化

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB代码预览 4.完整MATLAB程序 1.算法概述 首先介绍MATLAB部分的遗传算法的优化算法介绍&#xff1a; 遗传算法的原理 遗传算法GA把问题的解表示成“染色体”&#xff0c;在算法中也即是以二进制编码的串。并且&#xff0c;在执行…

WhatsApp营销引流-SendWS拓客系统功能后台介绍(五):WhatsApp素材管理

WhatsApp营销引流 很多新创的品牌想在海外推广自家产品&#xff0c;由于自己的品牌影响力不及其他老牌大牌&#xff0c;想在海外打开名气首先可以选择利用WhatsApp来进行营销引流&#xff0c;这是最简单最直接的方法&#xff0c;只需要低成本即可实现高回报。 据统计WhatsApp…

Python面向对象

目录 1.初识对象 2. 类的成员方法 3. 类和对象 4. 构造方法 5. 其它内置方法 6. 封装 7. 继承 7.1 继承的基础语法 7.2 复写和调用父类成员 8. 多态 1.初识对象 1. 生活中或是程序中&#xff0c;我们都可以使用设计表格、生产表格、填写表格的形式组织数据。 2. 进…

【2011】408联考操作系统真题整理

2011年 23 题目 满足短作业优先且不会发生饥饿现象的调度算法&#xff1a;高响应比优先 解析 24 题目 用户态执行的是命令解释程序 解析 法一&#xff1a;正向选择 DOS对应联机命令接口 法二&#xff1a;逆向排除 非用户态 -> 内核态 25 题目 在支持多线程的…

vs2019搭建与配置Qt,并实现影像显示

vs2019搭建与配置Qt&#xff0c;并实现影像显示 1.关于qt在vs2019的配置 主要参考了这个博客 其中有一个我在配置过程中出现的问题&#xff0c;在此记录一下 Qt Visual Studio Tools 在vs2019一直无法加载&#xff0c;一直在initializing,且提示"未能正确加载qtvstools…

数据库的基本操作(4)

先总结一下上一章的内容。 1.修改 update 表名 set 列名 值... where 条件&#xff1b; 2.删除 delete from 表名 where 条件&#xff1b; 3.mysql的约束 约束&#xff1a;数据库对数据本身有一些要求和限制。 NOT NULL 数据不能为空。 UNIQUE 数据唯一&#xff08;针…

【目标检测】目标检测的评价指标(七个)

目录&#xff1a;目标检测的评价指标一、正样本与负样本二、真正(TP)、假正(FP)、真负(TN)、假负(FN)&#xff08;1&#xff09;正确的正向预测&#xff08;True Positive&#xff0c;TP&#xff09;&#xff1a;正样本被正确检测的数量&#xff08;2&#xff09;错误的正向预测…

国际海运详解:国际海运的发货方式有哪些?区别是什么?

在跨境物流运输中&#xff0c;海运是一个种常用的运输方式&#xff0c;下面来重点介绍国际海运的几种发货方式和区别&#xff1a; 一、电放提单 是电报放货的缩写。提单信息以电子报纸或电子信息的形式发送给目的港船公司&#xff0c;收货人可以更换加盖电子印章的提单和电子保…

LeetCode-775-全局倒置与局部倒置

1、数学方法 根据题意&#xff0c;显然全局倒置的值大于等于局部倒置的值。因此我们不必求出具体的全局倒置的值和局部倒置的值&#xff0c;我们只需要证明全局倒置的值大于局部倒置的值即可。 因此我们可以从后往前进行查询&#xff0c;只要我们能够证明区间[i1,n−1][i1,n-…

小啊呜产品读书笔记001:《邱岳的产品手记-02》开篇词010203讲

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-02》 开篇词&01&02&03讲一、今日阅读计划二、泛读&知识摘录1、开篇词 产品经理的世界没有对错2、01讲 验证码是个好设计吗&#xff1f;3、02讲 产品经理工具指南4、03讲 产品案例分析Trigraphy的设计哲学三…

VS2019编码修改为UTF-8的方法

1.修改windows系统配置 设置 时区和语言 语言 》 管理语言设置 2. 修改VS2019 在扩展里安装Force UTF-8(No BOM) 和 Fix File Encoding 插件 解决控制台中文乱码问题 1.按下winr&#xff0c;输出regedit&#xff0c;打开注册表编辑器 2.在注册表编辑器中打开路径HKE…

VBA调用宏的方式总结大全

文章目录背景方式一 : Excel菜单执行宏方式二 : 按钮绑定宏1. 插入按钮2. 绑定宏方式三 : 窗体绑定宏1. 插入窗体2. 拖入按钮3. 绑定按钮点击事件触发宏(写代码)方式四 : 事件绑定宏背景 很多小伙伴在拿到模型之后, 看着满屏的代码, 却不知道如何下手使用这些代码. 这篇文章就…

【DOTS学习笔记】面向数据设计DOD

目录前言程序设计方法ODD->DODCache的3C与3R面向数据设计需要思考的问题AOSSOADOTS面向数据设计原则前言 本文是Metaverse大衍神君的《DOTS之路》系列课程的学习笔记 程序设计方法 Instructional Programming 指令化编程 脱离指令打孔输入后&#xff0c;伴随着机器汇编语言…

操作系统4小时速成:进程同步,临界资源,互斥,信号量的作用,死锁产生的四个条件,安全状态,银行家算法

操作系统4小时速成&#xff1a;进程同步&#xff0c;临界资源&#xff0c;互斥&#xff0c;信号量的作用&#xff0c;死锁产生的四个条件&#xff0c;安全状态&#xff0c;银行家算法 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&am…

vhost dpdk 共享内存

struct kvm_memory_slot http://tinylab.org/kvm-intro-part1 https://www.cnblogs.com/LoyenWang/p/13943005.html &#xff08;免费订阅,永久学习&#xff09;学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂 更多DPDK相关学习资料有…

Mybatis-Plus——分页+模糊查询

建表&#xff1a; create table pms_brand (brand_id bigint not null auto_increment comment 品牌id,name char(50) comment 品牌名,logo varchar(2000) comment 品牌logo地址,descript longtext comment 介绍,sh…

使用ReentrantLock中的条件变量让多个线程顺序执行

一. 前言 近日壹哥的一个学生在参加某公司校招面试时&#xff0c;遇到一个多个线程顺序执行的面试题&#xff0c;特意记录下来和大家分享一下&#xff0c;这个题目的具体要求是这样的&#xff1a; 假设有3个线程 a,b,c&#xff0c;要求三个线程一起进入到就绪态&#xff0c;执…

【LeetCode】775. 全局倒置与局部倒置

题目描述 给你一个长度为 n 的整数数组 nums &#xff0c;表示由范围 [0, n - 1] 内所有整数组成的一个排列。 全局倒置 的数目等于满足下述条件不同下标对 (i, j) 的数目&#xff1a; 0 < i < j < n nums[i] > nums[j] 局部倒置 的数目等于满足下述条件的下标 i 的…

01-Linux

1 初识Linux 在前面的课程中&#xff0c;我们无论是开发、测试。部署、存储都在Windwos操作系统的环境中&#xff0c;从今天开始我们一起学习下Linux,Linux系统和Windows系统最大的区别就是图形化界面操作和用途上有所差异&#xff0c;除了这两点&#xff0c;两者有异曲同工之…