法律状态公告日
法律状态信息
法律状态
2012-11-14
授权
授权
2011-08-10
实质审查的生效 IPC(主分类):G06F17/30 申请日:20110216
实质审查的生效
2011-06-29
公开
公开
技术领域
本发明涉及文件系统领域,特别涉及一种基于键值key-value存储的分布式文件系统元数据存储管理方法。
背景技术
文件系统的元数据包括目录和文件的元数据,以及目录结构等。文件的元数据包括:文件名,权限,时间,文件大小,以及数据块的分布等。目录的元数据包括:目录名、权限、时间等主要属性,以及它所包含的子文件和子目录等目录结构相关内容。文件系统元数据管理的一个难点是既要提供高效的元数据访问,又要为元数据的修改提供灵活的接口。
分布式文件系统因其海量存储的优势,在互联网领域正逐渐取代传统的本地文件系统。Ceph是典型的分布式文件系统,其采用基于对象的分布式存储集群(RADOS,Reliable Autonomic Distributed Object Storage)来存储文件系统的元数据;RADOS可以为Ceph提供可扩展、可靠的对象存储,但是Ceph把目录也作为一个单独的对象,目录的子对象的关联信息都存储在目录对象中;当很多进程并发地在Ceph的某个目录中创建大量子对象时,为了保证元数据的一致性,这些操作只能串行进行,造成系统性能瓶颈。
key-value存储可以为分布式文件系统元数据存储管理带来更好的扩展性,如果要处理的数据持续增加,多加机器就可以了,不存在系统瓶颈问题。但是基于key-value存储的分布式文件系统元数据存储管理会带来一些新的挑战:分布式文件系统元数据的操作一般涉及多个步骤,涉及多个key-value操作,而key-value存储不支持多个key-value的事务操作。因此如何保证在某个步骤中断后,能够通过一定的措施实现垃圾清理,保证元数据的一致性,是一个需要解决的技术问题。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何提供一种基于键值key-value存储的分布式文件系统元数据管理方法,并且保证在对元数据的操作过程中,保持元数据的一致性。
(二)技术方案
为解决上述技术问题,本发明提供一种基于键值key-value存储的分布式文件系统元数据管理方法,该方法包括以下步骤:
S1:服务器存储文件和目录的元数据,并以位图的方式存储目录的子对象;所述子对象包括子文件和子目录;
S2:对子对象的元数据进行修改操作;在进行所述修改操作之前,以所述子对象的父目录的目录内容标识dirhdl-ID和所述子对象的位图索引构造键key,以当前时间为值value,记录到操作日志中;
S3:后台进程定期扫描所述操作日志,对超时操作进行垃圾回收。
优选地,所述服务器中存储三个key-value表:日志表log.tbl、元表meta.tbl和目表entry.tbl;
所述文件和目录的元数据的基本属性记录,以及所述目录的元数据的目录内容记录存储在所述元表meta.tbl中;
所述目录与其子对象的关联关系存储在所述目表entry.tbl中。
优选地,所述文件的元数据的基本属性记录,以文件标识doc-ID为键key,以文件的基本属性信息为值value;
所述目录的元数据的基本属性记录,以目录标识dir-ID为键key,以目录的基本属性信息为值value;
所述目录的元数据的目录内容记录,以目录内容标识dirhdl-ID为键key,以目录所包含的子对象的位图结构为值value。
优选地,所述目录与其子对象的关联关系包括:
所述目录标识dir-ID与第一分割字符构成键key,所述目录内容标识dirhdl-ID为值value,两者构成第一关联;
所述目录内容标识dirhdl-ID通过第二分割字符连接所述子对象的位图索引构成键key,子对象标识和子对象名构成值value,两者构成第二关联;
所述目录内容标识dirhdl-ID通过第三分割字符连接所述子对象名构成键key,子对象位图索引为值value,两者构成第三关联。
优选地,所述步骤S2中,所述对子对象的元数据进行修改包括:创建所述子对象的元数据和删除所述子对象的元数据。
优选地,创建所述子对象的元数据具体包括以下步骤:
S2.1.1:创建所述子对象的基本属性记录;如果所述子对象为目录,创建其目录内容记录和第一关联;
S2.1.2:写操作日志;
S2.1.3:创建所述第三关联、第二关联,修改所述子对象的父目录的目录内容记录;
S2.1.4:删除操作日志。
优选地,删除所述子对象的元数据具体包括以下步骤:
S2.2.1:写操作日志;
S2.2.2:修改所述子对象的父目录的目录内容记录,删除所述第三关联、第二关联;
S2.2.3:删除操作日志;
S2.2.4:删除所述子对象的基本属性记录;如果所述子对象为目录,删除其目录内容记录和第一关联。
优选地,所述步骤S3中,所述垃圾回收具体包括以下步骤:
S3.1.1:修改所述父目录的目录内容记录;
S3.1.2:解析所述操作日志中的键key,得到所述子对象标识和所述子对象名,删除所述第三关联、第二关联;
S3.1.3:删除子对象的基本属性记录;如果所述子对象为目录,解析得到其目录内容标识,删除其目录内容记录和第一关联;
S3.1.4:从操作日志中删除超时记录。
优选地,所述步骤S2中,所述键key由第四分割字符连接所述父目录的目录内容标识dirhdl-ID和所述子对象的位图索引构成。
优选地,所述步骤S3中,判断操作是否超时包括以下步骤:
S3.0.1:解析所述键key,得到操作时间opTime;
S3.0.2:用当前时间curTime减去所述操作时间opTime,判断其差值是否大于超时标准值timeout;如果大于,则操作超时;否则,操作未超时。
(三)有益效果
本发明提供了一种基于键值key-value存储的分布式文件系统元数据存储管理方法,其采用键值key-value存储对分布式文件系统的元数据进行管理,具有比传统分布式文件系统更好的扩展性。同时,其采用日志记录和垃圾回收的管理模式,在对元数据修改过程中,保持了元数据的一致性。
附图说明
图1是本发明实施例所述基于键值key-value存储的分布式文件系统元数据存储管理方法流程图;
图2是本发明实施例所述基于键值key-value存储的分布式文件系统元数据存储结构图;
图3是本发明实施例所述创建子对象过程数据结构图;
图4是本发明实施例所述删除子对象过程数据结构图;
图5是本发明实施例所述垃圾回收过程数据结构图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
图1是本发明实施例所述基于键值key-value存储的分布式文件系统元数据管理方法流程图,如图1所示,该方法包括以下步骤:
S1:服务器存储文件和目录的元数据,并以位图的方式存储目录的子对象;所述子对象包括子文件和子目录。
S2:对子对象的元数据进行修改操作;在进行所述修改操作之前,以所述子对象的父目录的目录内容标识dirhdl-ID和所述子对象的位图索引构造键key,以当前时间为值value,记录到操作日志中。所述键key和值value作为日志记录存储在所述服务器的日志表log.tbl中。
S3:后台进程定期扫描所述操作日志,对超时操作进行垃圾回收。
本发明实施例的方法采用键值key-value存储,对分布式文件系统的元数据进行管理,其具有比传统分布式文件系统更好的扩展性。同时,步骤S2中的日志记录和步骤S3中的垃圾回收,保证了在对元数据修改过程中,始终保持元数据的一致性。
图2是本发明实施例所述基于键值key-value存储的分布式文件系统元数据存储结构图,如图2所示,其表示目录I包括目录b和文件c。所述服务器中存储三个key-value表:日志表log.tbl、元表meta.tbl1和目表entry.tbl2。目录I、目录b和文件c的元数据的基本属性记录,以及目录I和目录b的元数据的目录内容记录存储在元表meta.tbl1中。目录I与目录b、文件c的关联关系存储在所述目表entry.tbl2中。
文件c的元数据的基本属性记录中,键key为5,值value为文件c的基本属性信息;所述文件的基本属性信息包括:访问权限、创建时间、访问时间和内容分布等信息。
目录I的元数据的基本属性记录,键key为1,值value为目录I的基本属性信息;所述目录的基本属性信息包括:访问权限、创建时间、访问时间等信息。
目录I的元数据的目录内容记录,键key为2,值value为目录I所包含的子对象的位图结构。图2中目录I的位图结构[1100...]中置位为1的两位分别对应目录b和文件c。
目录I与其子对象目录b和文件c的关联关系包括:
目录I的目录标识dir-ID即1与第一分割字符“$”构成键key,目录I的目录内容标识dirhdl-ID即2为值value,两者构成第一关联,对应图2目表entry.tbl 2中记录<1+“$”,2>。所述第一分割字符还可以为“*”、“#”、“@”等其他字符,但是其必须区分于本发明实施例的其他特殊字符。
目录I的目录内容标识dirhdl-ID即2通过第二分割字符“@”连接所述子对象目录b的位图索引即0构成键key,目录b的目录标识dir-ID即3和目录b的名称“b”构成值value,两者构成第二关联,对应图2目表entry.tbl 2中记录<2+“@”+0,{3,“b”}>。所述第二分割字符还可以为“*”、“#”、“$”等其他字符,但是其必须区分于本发明实施例的其他特殊字符。
目录I的目录内容标识dirhdl-ID即2通过第三分割字符“#”连接子对象目录b的名称“b”构成键key,目录b的位图索引即0为值value,两者构成第三关联,对应图2目表entry.tbl 2中记录<2+“#”+“b”,0>。所述第三分割字符还可以为“*”、“@”、“$”等其他字符,但是其必须区分于本发明实施例的其他特殊字符。
优选地,所述步骤S2中,所述对子对象的元数据进行修改包括:创建所述子对象的元数据和删除所述子对象的元数据。
图3是本发明实施例所述创建子对象过程数据结构图,如图3所示,创建目录I的子对象目录b的元数据具体包括以下步骤:
S2’.1.1:创建目录b的基本属性记录;如表格1中StepC1;图3中元表meta.tbl 1增加记录<3,{DIR...}>。
创建目录b的目录内容记录和其第一关联;如表格1中StepC2和StepC3;对应图3中元表meta.tbl 1增加记录<4,{[0000...]}>,图3中目表entry.tbl 2增加记录<3+“$”,4>。
S2’.1.2:写操作日志;如表格1中StepC4;对应图3中日志表log.tbl3中增加记录<2+“^”+0,curTime>。
S2’.1.3:创建所述第三关联、第二关联,修改目录I的目录内容记录;如表格1中StepC5~StepC7;对应图3中目表entry.tbl 2增加记录<2+“#”+“b”,0>和<2+“@”+0,{3,“b”}>,元表meta.tbl1中修改记录<2,{[0000...]}>为<2,{[1000...]}>。
S2’.1.4:删除操作日志;如表格1中StepC8;对应图3中日志表log.tbl 3中删除记录<2+“^”+0,curTime>,恢复至创建操作前的状态。
表1创建子对象的元数据相关步骤
图4是本发明实施例所述删除子对象过程数据结构图,如图4所示,删除目录I的子对象目录b的元数据具体包括以下步骤:
S2’.2.1:写操作日志;如表格2中StepR0~StepR1;对应图4中日志表log.tbl 3中增加记录<2+“^”+0,curTime>。步骤StepR0用于根据目录I的目录内容标识dirhdl-ID即2与被删除子对象目录b的文件名为键key查询目表entry.tbl 2,以获得目录b的位图索引,其索引值为0。
S2’.2.2:修改所述目录I的目录内容记录,删除所述第二关联、第三关联;如表格2中StepR2StepR4;对应图4中目表entry.tbl 2删除记录<2+“#”+“b”,0>和<2+“@”+0,{3,“b”}>,元表meta.tbl1中修改记录<2,{[1000...]}>为<2,{[0000...]}>。
S2’.2.3:删除操作日志;如表格2中StepR5;对应图4中日志表log.tbl 3中删除记录<2+“^”+0,curTime>,恢复至删除操作前的状态。
S2’.2.4:删除目录b的基本属性记录、目录内容记录和第一关联;如表格2中StepR6StepR8;对应图3中目表entry.tbl 2删除记录<3+“$”,4>,图3中元表meta.tbl 1删除记录<4,{[0000...]}>和<3,{DIR...}>。
表2删除子对象的元数据相关步骤
图5是本发明实施例所述垃圾回收过程数据结构图,如图5所示,
假设创建目录I的子对象目录b过程超时,其垃圾回收过程具体包括以下步骤:
S3’.1.1:修改目录I的目录内容记录;如表格3中Step1;对应图5中元表meta.tbl 1中修改记录<2,{[1000...]}>为<2,{[0000...]}>。
S3’.1.2:解析操作日志中的键key,得到目录b的目录标识dir-ID即3和其名称“b”,删除所述第三关联、第二关联;如表格3中Step2~Step3;对应图5中目表entry.tbl 2删除记录<2+“#”+“b”,0>和<2+“@”+0,{3,“b”}>。
S3’.1.3:解析得到目录b的目录内容标识dirhdl-ID即4,删除目录b的目录内容记录,删除其第一关联和基本属性记录;如表格3中Step4~Step7;对应图5中元表meta.tbl 1中删除记录<4,{[0000...]}>和<3,{DIR...}>,目表entry.tbl 2中删除记录<3+“$”,4>。
S3’.1.4:从操作日志中删除超时记录;如表格3中Step8;对应图5中日志表log.tbl 3中删除记录<2+“^”+0,timestamp>。
表3垃圾回收过程相关步骤
优选地,所述步骤S2中,所述键key由第四分割字符“^”连接所述父目录的目录内容标识dirhdl-ID和所述子对象的位图索引构成。所述第四分割字符还可以为“*”、“@”、“$”等其他字符,但是其必须区分于本发明实施例的其他特殊字符。
优选地,所述步骤S3中,判断操作是否超时包括以下步骤:
S3.0.1:解析所述键key,得到操作时间opTime;
S3.0.2:用当前时间curTime减去所述操作时间opTime,判断其差值是否大于超时标准值timeout;如果大于,则操作超时;否则,操作未超时。
步骤S2中的日志记录和步骤S3中的垃圾回收,保证了在对元数据修改过程中,始终保持元数据的一致性。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
机译: 使用共享的低延迟持久键值元数据存储的群集文件系统的分布式元数据服务器
机译: 利用键值存储在分布式文件系统中有效存储数据和元数据的系统和方法
机译: -利用键值存储在分布式文件系统中有效存储数据和元数据的系统和方法