1.机械磁盘
连续读写能力强,随机读取能力弱。
2.固态磁盘
比机械磁盘读写能力高出一个数量级。
连续读写能力强,随机读取能力弱。
连续读写能力强,随机读取能力弱。
比机械磁盘读写能力高出一个数量级。
连续读写能力强,随机读取能力弱。
解析:场景:数据库存储==数据存储在文件中,文件存储在磁盘上==>传统数据库使用 B+树方式存储。
B+树==>排序树(索引树)==>每个节点存储文件块。 每个磁盘块存储多个数据。多个磁盘块构成 B+树。
如图所示:
1.(X<17)=====>p1 指针
2. (17<X<35)==>p2 指针
3.(X>35)=====>p3 指针
查找数据方法:二分查找法==>对应的指针查找数据范围。
每次读取一个磁盘块==>然后在磁盘块内查找==>找到对应的指针==>再去查找指针对应的磁盘块。
如果树的深度为 4,3 次查找就可以找到叶子节点。
优点:连续读写能力强
缺点:随机读写能力弱。如果树的深度为 4,需要 3 次查找找到叶子节点。如果 3 个磁盘块离散存储,每次读取磁盘块的时候,都需要移动磁臂。
移动磁臂需要几毫秒时间。然后读取数据,几千万数据中查找数据需要几毫秒时间。======>读性能比较差。
写,需要先查找,确定数据写入的位置,需要先查询 B+树。写的性能比较差。
问题:离散随机读写,导致性能差。
解决方法:尽量避免离散随机读写。尽量顺序连续读写。
尽量顺序读写。Log:连续的数据结构。
文件系统将磁盘空间以块为单位进行划分,每个文件占据若干个块,然后在通过一个文件控制块 FCB 记录每个文件占据的磁盘数据块。
inode 中记录着文件权限,所有者,修改时间,文件大小等文件属性信息,以及文件数据块磁盘地址索引。
inode 是固定结构的,能够记录的磁盘地址索引数也是固定的,只有 15 个索引。
每个 inode 最多可以存储 12+256+256*256+256*256*256 个数据块,如果每个数据块的大小为 4K,也就是单个文件最大不超过 70G。
缺点:索引越多,访问路径越长,读取数据块的速度越慢。
问题:如何提高文件的读写速度?
分析:单个硬盘读写速度比较慢,能不能把多个硬盘同时数据读写?多个硬盘组成一个阵列,共同对操作系统提供服务。
写入时,可以在多个硬盘上同时写入。写入速度就提高,性能提升。通过磁盘阵列,同时读写,提升性能-RAID-独立磁盘冗余阵列。
解析: RAID:目的:组成磁盘阵列,同时读写,提高读写性能。
比如:一个文件分成 8 份,8 份写入 8 个磁盘,同时写入,写入性能提升 8 倍。8 个磁盘同时读,读性能提升 8 倍。 8 个磁盘组成磁盘阵列-RAID
RAID 0 :多磁盘同时读写。如图 RAID0:三个磁盘,每个磁盘均分 3 份。一个 Data 文件分成四份,对三个磁盘同时读写。性能提升 2 倍。
—-D/a/t 三份同时写入三个磁盘需要一个单位时间,a 写入需要一个单位时间。
—-最后数据 a,写入需要一个单位时间。 d/a/t/a 四份数据写入三个磁盘,总共需要两个单位时间。
—-d/a/t/a 四份数据顺序写入一个磁盘,需要 4 个单位时间。
==>性能提升比例:4 单位时间/2 单位时间=2 倍。
优点:提升数据读写性能。
缺点:数据安全性降低。比如:一个文件四份数据,写入三个磁盘,其中一个磁盘损坏,则四份数据无法完成读取,导致整个文件损坏,整体数据不可用,相当于其他两个磁盘的数据也不可用。数据安全性降低。单个磁盘的使用寿命为 1 年,RAID0 磁盘阵列使用寿命更短。
假设:单块磁盘的损坏概率为 1 年内 50%, 正常使用概率 50%, 整体损坏概率=1-三个磁盘正常概率=1-50%*50%*50%=87.5%。磁盘阵列的可用性=12.5%,整个系统的可用性=12.5%. 系统可用性急剧降低。==>数据安全性得不到保证。生产环境很少使用。
RAID 1:目的:解决 RAID0 数据安全性降低的问题,增强数据安全性。采用备份数据策略。
数据同时写入两块磁盘,互为完整备份。如果磁盘 1 损坏,磁盘 2 数据还在,还可以提供完整数据对外提供服务。
==>提升了数据安全性。
优点:极大提升了数据安全性。
缺点:性能降低。
问题:怎么保证数据安全性?又要保证读写性能?
分析:RAID0 优点,读写性能高; RAID1 数据安全性高。结合两种方案的优点:RAID 10
RAID 10:磁盘阵列分组,写入时,每个分组数据再做一次备份。
比如:8 个磁盘组成阵列。每 2 个磁盘一组,共 4 组。数据分 4 片,每片都有自己的备份。====>读写性能提升 4 倍。
每片数据都有自己的备份====>提升了数据可用性
优点:高性能,高可用。
缺点:磁盘浪费。磁盘空间有效利用率=50%。比如:8T 磁盘空间。真实有效数据 4T,另外 4T 备份数据。
问题:在高性能,高可用的前提下,如何提高磁盘利用率?
分析:数据校验。
RAID 5: 业界使用比较广泛。
多个数据计算一个校验位。记录校验位。
比如:8 块磁盘,数据分成 7 片,存储在 7 个不同磁盘上,第 8 个磁盘不记录数据,记录前 7 片数据的校验信息。
任何一个磁盘损坏,通过校验信息和其他 6 个磁盘数据信息,可以计算出损坏数据,以便恢复。
数据分 7 片================>提升磁盘利用率
7 片数据同时读写,性能提升 7 倍===>高性能。
数据通过校验恢复============>高可用。
校验算法:异或。 0,1 异或。
如何得到校验位?====>7 片数据”异或”操作等到结果====>校验位。
损失数据:校验位,异或,其他 6 片数据,得到损失数据。
实际存储,校验位螺旋存储在所有磁盘上。
缺点:如果两块硬盘损坏,不能通过校验恢复。
RAID 6: 目的:如果损坏两块磁盘,仍然可以恢复。
方法:记录两个校验信息。
比如:8 块盘,6 块写数据,2 块写校验信息。
读写速度降低一点,可用性提高一点。
RAID 类型 访问速度 数据可靠性 磁盘利用率
RAID0 很快 很低 100%
RAID1 很慢 很高 50%
RAID10 很高 很高 50%
RAID5 较快 较高 (N-1)/N
RAID6 较快 较(RAID5)高 (N-2)/N
RAID 在单台服务器上,增强磁盘阵列。如果要达到 T 级别的吞吐能力,单台服务器不能提供这么大的读写能力。
要解决 T 级别的磁盘吞吐能力,要使用分布式文件系统 HDFS。
解析: 分布式文件系统核心思路:数据分片存储在多个服务器上。(RAID VS HDFS)。
RAID:以磁盘为单位记录数据分片。
HDFS:以服务器为单位记录数据分片。
一个大文件被切分成很多片,这些数据片分布存储在多个服务器上。每个服务器可以并发读写操作。服务器越多,读写性能就越高,整个系统性能提升上百倍千倍。
NameNode:文件控制块—记录文件信息(文件数据的分片信息)
原理:Linux 的 INode 文件控制块类似。
DataNode:数据块。每块 64M。
数据可用性:复制。数据复制三份到不同的服务器上。跨机架复制。
空间利用率比较低。
宕机失效检测:DataNode1->心跳检测->NameNode。NameNode 长时间没有收到 DataNode1 的心跳检测,标记失效。
数据备份<3 份,可用性降低。丢失的数据重新复制到其他服务器上。保持数据的高可用。 NameNode 记录 DataNode 上所有的数据块 ID。然后检查这些数据块 ID 还在哪些服务器上存储,找到数据块后,然后复制数据到其他服务器上。
声明
友情链接
QQ交流群