大量小文件的存储场景,有什么优化办法


可以参考Google的GFS以及变种HDFS、淘宝TFS以及腾讯TencentFS的设计。这些都是处理大量小文件的典范。

大家知道传统的文件系统下,每个文件都要被创建对应的inode之类元数据,但是在海量文件场景下,传统FS已经无法承载如此多的元数据IO量以及如此庞大的元数据搜索计算量了,唯一的做法就是降低元数据量,那么势必就要降低文件实体的数量,所以这些文件系统无一例外的都是用了这样一种变通的方法,即在文件中再创建文件,比如一个64MB的大文件,比如其中可以包含16384个4KB的小文件,但是这个64MB的大文件只占用了1个inode,而如果存放4KB的文件的话,就需要16384个inode了。

那么如何寻址这个大文件中的小文件呢?方法就是利用一个旁路数据库来记录每个小文件在这个大文件中的起始位置和长度等信息,也就是说将传统文件系统的大部分元数据剥离了开来,拿到了单独的数据库中存放,这样通过查询外部数据库先找到小文件具体对应在哪个大文件中的从哪开始的多长,然后直接发起对这个大文件的对应地址段的读写操作即可。另外还可以创建索引以加速文件查找动作。

在一个海量分布式文件系统中,元数据就像上面的思想一样是分级的,中控节点,也就是MDS,存储一级元数据,也就是大文件与底层块的对应关系,而数据节点则存放二级元数据,也就是最终的用户文件在这些一级大块中的存储位置对应关系,经过两级寻址从而读写数据。其实这些一级大文件,就可以认为它们是卷了,也就是在卷管理层之上再存放文件,这样就降低了单一空间下的文件总数量从而提高性能。


作者:张冬
链接:https://www.zhihu.com/question/26504749/answer/33012474


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值