基于元数据存储的二维表组织方法
技术领域
本发明涉及一种二维表,具体地说,是涉及一种基于元数据存储的二维表组织方法。
背景技术
现有的大型分布式存储系统中,系统需要对大量的元数据进行存储,而元数据的存储方法会直接影响系统的性能,因此,元数据的存储方法对系统来说非常重要。
现有技术中,大多数存储系统采用Hash算法或目录子树分区算法来实现元数据在元数据集群内的存储,但是这两种算法在对元数据进行修改、删除等操作时系统开销较大,会对系统性能造成不利影响;也可以采用路径名Hash算法来存放元数据,然而这种算法在修改某一目录后,该目录子目录的修改可能造成元数据不一致。
发明内容
本发明的目的在于提供一种基于元数据存储的二维表组织方法,解决现有技术中存在的元数据存储时开销较大,且对系统性能造成不利影响的问题。
为了实现上述目的,本发明采用的技术方案如下:
基于元数据存储的二维表,包括桶表:用于存储元数据服务器对应的所有Hash规则中映射到元数据服务器的桶;用户表:用于存储映射到元数据服务器的用户以及该用户对应桶号;文件表:存储文件的元数据信息;用户布局表:存储某一用户的目录子树与文件表的映射关系;文件片表:存储每个文件分片后的片信息。
进一步地,所述桶表的字段包括桶号和桶的状态;所述用户表的字段包括用户ID和该用户对应的桶号;所述文件表的字段包括元数据服务器内部全局唯一ID、父目录ID、文件类型、文件名和文件的容量大小、文件唯一的key、文件的checksum;所述用户布局表的字段包括主键、文件路径前缀,和该文件路径前缀对应的文件表名、指定的子树的根结点ID;所述文件片表的字段包括主键、用户ID、文件片映射于文件表的ID以及文件片的偏移量。
以上述二维表为基础,本发明提供的基于元数据存储的二维表组织方法,包括以下步骤:
(1)系统初始化,将Hash规则存储在元数据服务器的桶表中;
(2)利用映射到元数据服务器中的所有用户的全局唯一ID和桶号建立用户表,之后建立用户布局表;
(3)建立所述用户布局表中目录映射的文件表,将文件表的表名存入用户布局表并对应于该文件表存储的根目录。
进一步地,所述基于元数据存储的二维表组织方法,还包括文件表中子树的拆分方法,包括以下步骤:
(a)设定文件表中目录的Size属性的上限值,并由定时器自动遍历文件表中每个目录的Size属性;
(b)当目录的Size属性超过设定的上限值时,则建立一个新文件表,并将超出所设上限值的根目录存入到用户布局表,把该根目录下剩余的所有目录和文件信息存入新建立的文件表中;
(c)将新文件表的表名和超出所设上限值的目录的父目录ID存入用户布局表,并删除原目录下超出所设上限值的目录及元数据。
再进一步地,所述基于元数据存储的二维表组织方法,还包括文件表中子树的收缩方法,包括以下步骤:
(1)设定文件表中目录的Size属性的下限值,并由定时器自动遍历文件表中每个目录的Size属性;
(2)当目录的Size属性低于设定的下限值时,先获取该目录在文件表中的父目录ID,然后将该目录ID和父目录ID存入原有的另一个文件表,其次将该目录对应的文件表中的所有子目录和元数据转存入原有的另一个文件表中;
(3)删除该目录对应的文件表和用户布局表中该目录的所有信息。
与现有技术相比,本发明具有以下有益效果:
1.本发明通过创建二维表,实现对元数据的存储,这种存储方法简单易行且成本低,也不会对系统性能造成不利影响;
2.本发明中,二维表的组织方法简单,还能根据实际情况对二维表中文件的子树进行拆分和收缩,这种方式提高了元数据的存储效率,也增加了元数据存储的灵活性和稳定度;
3.本发明通过Hash映射规则对元数据进行存储,能够把同一目录下具体的文件信息均匀地分布到不同的文件片表中,避免了文件分布不均匀的情况发生。
附图说明
图1为元数据服务器、桶表、文件片表的对应关系图。
图2为用户表、用户布局表和文件表的对应关系图。
具体实施方式
下面结合附图和实施例对本发明作进一步说明,本发明的实施方式包括但不限于下列实施例。
实施例
如图1、2所示,基于元数据存储的二维表,包括桶表:用于存储元数据服务器对应的所有Hash规则中映射到本台元数据服务器的桶;用户表:用于存储映射到元数据服务器的用户以及该用户对应桶号;文件表:存储文件的元数据信息;用户布局表:存储某一用户的目录子树与文件表的映射关系;文件片表:存储每个文件分片后的片信息。
进一步地,所述桶表的字段包括桶号和桶的状态,其中,桶号用BID表示,桶的状态用State表示;所述用户表的字段包括用户ID和该用户对应的桶号,其中,用户ID使用UID表示;所述文件表的字段包括元数据服务器内部全局唯一ID、父目录ID、文件类型、文件名和文件的容量大小、文件唯一的key、文件的checksum,其中,父目录ID用ParentID表示,文件类型用Type表示,文件名用Name表示,文件的容量大小用Size表示;所述用户布局表的字段包括主键、文件路径前缀,和该文件路径前缀对应的文件表名、指定的子树的根结点ID,其中,主键用ID表示,文件路径前缀用Prefix表示,前缀对应的文件表名用Tablename表示,前缀指定的子树的根结点ID用RootID表示;所述文件片表的字段包括主键、用户ID、文件片映射于文件表的ID以及文件片的偏移量,其中,用户ID用USERID表示,文件片映射于文件表的ID用MUFILEID表示,文件片的偏移量用FILEPIECEOFFSET表示。
基于元数据存储的二维表组织方法,包括以下步骤:
(1)系统初始化,将Hash规则存储在元数据服务器的桶表中;
(2)利用映射到元数据服务器中的所有用户的全局唯一ID和桶号建立用户表,之后建立用户布局表;
(3)建立所述用户布局表中目录映射的文件表,将文件表的表名存入用户布局表并对应于该文件表存储的根目录。
具体地说,系统初始化时,Hash规则表存储在元数据服务器上,利用元数据服务器上对应于Hash规则表的桶号和桶的状态建立桶表,作为优选,在Hash规则表中每个桶对应两个IP,假设系统中存在桶1、桶2、桶3,则桶1、桶2、桶3与IP的对应关系可下表所示:
如图1所示,根据桶表中存储的桶号,建立多个与其相映射的文件片表,在此,我们选择每个桶号映射相同数目的文件片表;如图2所示,假设利用映射到元数据服务器中的所有用户的全局唯一ID和桶号建立用户表5600、6600、7600,在创建用户时将用户的全局唯一ID存入用户表5600、6600、7600后建立与用户表相对应的5600的用户布局表、6600的用户布局表、7600的用户布局表,当用户布局表建立完成后则建立用户布局表中目录映射的文件表,其中文件表的表名会存入用户布局表并对应于该文件表存储的根目录,如此便完成了二维表的组织。
上述基于元数据存储的二维表组织方法中,本发明还提供了一种文件表中子树的拆分方法,包括以下步骤:(a)设定文件表中目录的Size属性的上限值,并由定时器自动遍历文件表中每个目录的Size属性;(b)当目录的Size属性超过设定的上限值时,则建立一个新文件表,并将超出所设上限值的根目录存入到用户布局表,其余目录和文件信息存入建立的新文件表中;(c)将新文件表的表名和超出所设上限值的目录的父目录ID存入用户布局表,并删除原目录下超出所设上限值的目录及元数据。
具体地说,假设某文件表中现有一个目录,目录的Size属性为子目录数量,而元数据服务器设定该文件表中目录的子目录数量上限值为10。在元数据存储过程中,该目录的子目录数量将会随存储数据的变化而变化,为了避免因该目录过大而导致在执行目录改名或修改访问授权等操作时系统性能开销太大,元数据服务器的定时器会在空闲时间段自动检查该目录的子目录数量,并在该目录的子目录数量超过10时,对该目录进行拆分。比如,定时器在某一空闲时间段检查到该目录的子目录数量为15,则在二维表中建立一个新文件表,将该目录下超出的5个子目录及子目录下的文件元数据存入该新文件表中,同时将该目录的父目录ID、根目录名及新文件表的表名存入用户布局表中;最后删除该目录中已被存入新文件表的这5个子目录及对应的元数据,使该目录的子目录数量控制在10个以内。
通过上述对文件表中目录的拆分,使文件表中每个目录均控制在不影响系统操作的范围之内,从而解决现有技术中对文件表中目录进行操作时性能开销过大的问题,以及对子目录的修改可能引起元数据不一致的问题,确保了系统的整体运行速度。
上述基于元数据存储的二维表组织方法中,本发明还提供了一种文件表中子树的收缩方法,包括以下步骤:(1)设定文件表中目录的Size属性的下限值,并由定时器自动遍历文件表中每个目录的Size属性;(2)当目录的Size属性低于设定的下限值时,先获取该目录在文件表中的父目录ID,然后将该目录ID和父目录ID存入原有的另一个文件表,其次将该目录对应的文件表中的所有子目录和文件元数据转存入原有的另一个文件表中;(3)删除该目录对应的文件表和用户布局表中该目录的所有信息。
具体地说,假设某文件表中现有一个目录,目录的Size属性为子目录数量,而元数据服务器设定该文件表中目录的子目录数量下限值为8。在元数据存储过程中,该目录的子目录数量将会随存储数据的变化而变化,为了避免因该目录过小而导致存储容量的浪费,元数据服务器的定时器会在空闲时间段自动检查该目录的子目录数量,并在该目录的子目录数量低于8时,对该目录进行收缩。比如,定时器在某一空闲时间段检查到该目录的子目录数量为5,系统则获取这5个目录在文件表中的父目录ID,然后将该目录ID和父目录ID存入原有的另一个可以容纳它们的文件表,并将该目录对应的文件表中的所有子目录和文件元数据转存入容纳该目录ID和父目录ID的文件表;最后删除该目录对应的文件表和用户布局表中该目录的所有信息。
同样地,通过上述收缩方法,可以对元数据服务器中信息含量很少的文件表进行调整,从而在保证正常使用的前提下减少了元数据服务器中文件表的数量,进而减少了对元数据服务器进行操作时占用的系统开销,提高了系统的运行效率。
按照上述实施例,便可很好地实现本发明。