淘宝分布式文件系统引擎(三) 淘宝的大文件存储结构


完整的源码在下面这个链接哟
github源码

什么是大文件

其实就是小文件的升级版,存储空间更大,里面有多个部分有:索引文件,一个主块文件和扩展块组成

设计思路

  • 以block文件的形式存放数据文件(一般64M一个block),以下简称为“块”,每个块都有唯一的一个整数编号,块在使用之前所用到的存储空间都会预先分配和初始化(磁盘插进去执行初始化脚本时就会进行块的初始化以及分配(劈块😆))。

  • 每一个块由一个索引文件一个主块文件和若干个扩展块组成,“小文件”主要存放在主块中,扩展块主要用来存放溢出的数据。

  • 每个索引文件存放对应的块信息和“小文件”索引信息,索引文件会在服务启动是映射(mmap)到内存,以便极大的提高文件检索速度。 “小文件”索引信息采用在索引文件中的数据结构哈希链表来实现。

  • 每个文件有对应的文件编号,文件编号从1开始编号,依次递增,同时作为哈希查找算法的Key 来定位“小文件”在主块和扩展块中的偏移量。

明白为什么要磁盘一插进去就把块文件给初始化好吗?: ①那是为了避免磁盘碎片如果一插入磁盘我们就初始化那么我们的块文件就会一块接着一块放非常的规整②提高效率,如果当用户使用的时候再去初始化那速度就慢下来了

在这里插入图片描述

大文件存储结构图

在这里插入图片描述

块索引

每个索引文件存放对应的块信息和“小文件”索引信息

块信息的关键数据结构

在这里插入图片描述

特别说明一下该数据结构中已删除文件的数量
由于我们在主块中存储的小文件就像是和数组的排列类似,我们知道在数组中删除一个元素那么我们就得把其后面的元素全部往前移动,在这也一样如果我们要删除文件2那么后面的为了充分利用空间文件3还有文件4…文件n就要往前移动,这样效率就慢的一批,所以我们就给文件2做个已删除的标记不进行立即删除,已删除的文件数量就拿来记录下我们已经删了多少个文件了,等到数量达到一定的指标就在一个特定的非常少人使用淘宝的时间点进行统一的处理
在这里插入图片描述


小文件索引信息的数据结构

在这里插入图片描述
下个章节就来讲讲淘宝文件系统哈希链表结构,还有关于内存映射的一些基本操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值