400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

如何利用leveldb实现文件系统的目录树

本篇文章给大家分享的是有关如何利用leveldb实现文件系统的目录树,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

创新互联建站专注于企业网络营销推广、网站重做改版、东安网站定制设计、自适应品牌网站建设、H5响应式网站成都商城网站开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为东安等各大城市提供网站开发制作服务。

利用leveldb实现文件系统的目录树

目录树维护了整个文件系统的元信息,所有对文件系统中文件的增删查改操作都首先需要经过目录树的操作才能进行。百度开源的分布式文件系统BFS(开源地址:https://github.com/baidu/bfs)利用leveldb,实现了目录树的管理,使得目录树的实现非常简洁,同时对目录树的操作十分高效。本文将为你解析其具体设计及实现思路。

目录树为一个树型结构,而leveldb是一个kv存储引擎,因此,如果想用通过leveldb实现目录树,则需要把树型结构映射成kv的扁平化结构。

单独就每个文件或者目录来讲,其信息只需要一条kv记录即可保存,而这条kv中的value需要保存该目录或文件的属性信息,可变动的空间不大。所以,从树型结构到kv记录的映射 ,关键在于key的选取。

在BFS的目录树中,定义了一个int64_t的整型数字作为EntryID,每个文件或目录拥有一个EntryID,并且全局唯一,根目录的EntryID规定为1。假设有如下目录结构:

/home/dirx/
          /filex
      diry/
          /filey
/tmp/
     filez

按照创建顺序,我们依次给/home分配的EntryID为2,/tmpEntryID为3,/home/dirxEntryId为4,/home/diryEntryID为5,/home/tmp/filezEntryID为6,/home/dirx/filexEntryID为7,/home/diry/fileyEntryID为8。

注意到每个目录拥有一个自己的EntryID的同时,又肯定拥有一个父目录,其父目录又肯定拥有一个EntryID,可以利用这一点,通过父目录的EntryID和子目录中的文件名,来确定一条记录的key:对于每个文件或者目录,我们规定:每条kv记录的key为 "父目录的EntryID+自身文件名",同时在value中存储自己的EntryID这样编码后,上述目录树便可以表示为如下kv记录:

1home -> 2 + xxx
1tmp -> 3 + xxx
2dirx -> 4 + xxx
2diry -> 5 + xxx
3filez -> 6 + xxx
4filex -> 7 + xxx
5filey -> 8 + xxx

其中,xxx表示该目录或文件的其它信息,如大小,创建时间,实际数据存放位置等。

到此,目录树这个树型结构,便已经平展成为一条条的kv记录,对目录树的操作,便转化成了对某几条kv记录的操作:

这样,一个目录树所需要的基本操作便已经支持,由于leveldb引擎本身写入速度较快,并且在读取时,内部本身已经有cache来缓存住较热的kv数据,并且缓存大小可配置,所以一个非常简洁高效的目录树便实现了~

以上就是如何利用leveldb实现文件系统的目录树,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。


文章题目:如何利用leveldb实现文件系统的目录树
文章链接:http://mzwzsj.com/article/jpedgp.html

其他资讯

让你的专属顾问为你服务