一种小文件的定位方法及系统转让专利

申请号 : CN201410850201.0

文献号 : CN104965845B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 许焰周明伟江文龙

申请人 : 浙江大华技术股份有限公司

摘要 :

本发明涉及互联网领域,具体公开了一种小文件的定位方法及系统,用以提高小文件的定位能力。该方法为:接收客户端发送的小文件读取请求后,确定该小文件的目录对应的元数据文件,根据小文件的标识信息,以及预设的小文件的索引信息,确定小文件的元数据信息在元数据文件中的存储位置,并基于存储位置获取小文件的元数据信息,基于小文件的元数据信息,向该客户端通知保存有该容器的相关存储节点的位置,令该客户端从相关存储节点读取该小文件的切片数据和校验码。这样,可以提高小文件的定位能力,降低索引的复杂度,并提高系统的索引及存储性能。

权利要求 :

1.一种小文件的定位方法,其特征在于,包括:

文件管理平台接收客户端发送的小文件读取请求后,确定所述小文件的目录对应的元数据文件;

所述文件管理平台根据所述小文件的标识信息,以及预设的所述小文件的索引信息,确定所述小文件的元数据信息在所述元数据文件中的存储位置,并基于所述存储位置获取所述小文件的元数据信息;其中,所述小文件的索引信息用于描述所述小文件的标识信息和所述存储位置之间的映射关系,所述元数据信息中至少包括小文件的切片数据和检验码所属的容器和小文件的切片数据和校验码在容器中的偏移量;

所述文件管理平台基于所述小文件的元数据信息,向所述客户端通知保存有所述容器的相关存储节点的位置,令所述客户端从所述相关存储节点读取所述小文件的切片数据和校验码;

在接收到所述小文件读取请求之前,进一步包括:

所述文件管理平台接收到客户端发送的小文件存储请求时,为所述小文件分配可用的容器,并通过所述容器关联相应的存储节点,令所述客户端将小文件的切片数据和校验码分别发送至相应的存储节点,并指示所述相应的存储节点分别将接收到的小文件的切片数据和校验码存储至本地对应所述容器的存储文件中;

所述文件管理平台根据所述小文件的目录以及预设的目录与元数据文件的一一对应关系,确定所述小文件对应的元数据文件,并根据客户端反馈的存储结果,将所述小文件的元数据信息在所述元数据文件中进行更新,以及建立所述小文件的索引信息,其中,所述小文件的索引信息用于描述所述小文件的标识信息与所述小文件元数据信息的存储位置之间的映射关系。

2.如权利要求1所述的方法,其特征在于,所述文件管理平台为所述小文件分配可用的容器,并通过所述容器关联相应的存储节点,令所述客户端将小文件的切片数据和校验码分别发送至相应的存储节点,具体包括:所述文件管理平台为所述小文件分配可用的容器,并将所述容器中各个存储文件分别关联相应的存储节点,令所述客户端将小文件进行切片处理并按预设的容错方法计算校验码后,按照容器中各个存储文件与相应的存储节点的对齐顺序将各个切片数据和校验码分别向相应的存储节点发送,其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由所述文件管理平台预先配置的。

3.如权利要求1或2所述的方法,其特征在于,所述文件管理平台基于所述小文件的元数据信息,向所述客户端通知保存有所述容器的相关存储节点的位置,令所述客户端从所述相关存储节点读取所述小文件的切片数据和校验码,具体包括:所述文件管理平台基于所述小文件的元数据信息,确定小文件的各个切片数据和校验码所属的容器,以及小文件的各个切片数据和校验码在容器中的偏移量;

所述文件管理平台按照所述容器中的各个存储文件与各个存储节点的对齐顺序,分别确定小文件的各个切片数据和校验码对应的存储节点;其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由所述文件管理平台预先配置的;

所述文件管理平台向所述客户端通知所述对应的存储节点的位置,令所述客户端根据小文件的各个切片数据和校验码在容器中的偏移量,分别从所述对应的存储节点中读取各个切片数据和校验码。

4.如权利要求1或2所述的方法,其特征在于,进一步包括:

在建立小文件的索引信息之前,建立每一个元数据文件对应的头文件,所述头文件至少包括小文件的元数据信息在对应元数据文件中的存储位置信息,以及小文件数据的状态信息,所述状态信息用于指示小文件的元数据是否可读。

5.如权利要求4所述的方法,其特征在于,进一步包括:

在接收到客户端发送的删除小文件的请求后,获取小文件所在元数据文件对应的头文件,并将获得的头文件中小文件的元数据的状态信息更改为不可读。

6.一种小文件的定位系统,其特征在于,包括:

目录服务器,用于在接收客户端发送的小文件读取请求后,确定所述小文件的目录对应的元数据文件;以及,用于根据所述小文件的标识信息,以及预设的所述小文件的索引信息,确定所述小文件的元数据信息在所述元数据文件中的存储位置,并基于所述存储位置获取所述小文件的元数据信息;其中,所述索引信息用于描述所述小文件的标识信息和所述存储位置之间的映射关系,所述元数据信息中至少包括小文件的切片数据和检验码所属的容器和小文件的切片数据和校验码在容器中的偏移量;

元数据服务器,用于基于所述小文件的元数据信息,向所述客户端通知保存有所述容器的相关存储节点的位置,令所述客户端从所述相关存储节点读取所述小文件的切片数据和校验码;

在接收到所述小文件读取请求之前,所述元数据服务器进一步用于:在接收到客户端发送的小文件存储请求时,为所述小文件分配可用的容器,并通过所述容器关联相应的存储节点,令所述客户端将小文件的切片数据和校验码分别发送至相应的存储节点,并指示所述相应的存储节点分别将接收到的小文件的切片数据和校验码存储至本地对应所述容器的存储文件中;

所述目录服务器器进一步用于:根据所述小文件的目录以及预设的目录与元数据文件的一一对应关系,确定所述小文件对应的元数据文件,并根据客户端反馈的存储结果,将所述小文件的元数据信息在所述元数据文件中进行更新,以及建立所述小文件的索引信息,其中,所述小文件的索引信息用于描述所述小文件的标识信息与所述小文件元数据信息的存储位置之间的映射关系。

7.如权利要求6所述的系统,其特征在于,在为所述小文件分配可用的容器,并通过所述容器关联相应的存储节点,令所述客户端将小文件的切片数据和校验码分别发送至相应的存储节点时,所述元数据服务器具体用于:为所述小文件分配可用的容器,并将所述容器中各个存储文件分别关联相应的存储节点,令所述客户端将小文件进行切片处理并按预设的容错方法计算校验码后,按照容器中各个存储文件与相应的存储节点的对齐顺序将各个切片数据和校验码分别向相应的存储节点发送,其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由所述文件管理平台预先配置的。

8.如权利要求6或7所述的系统,其特征在于,在定位小文件的过程中:

所述目录服务器具体用于:根据获得的所述小文件的元数据信息,确定小文件的各个切片数据和校验码所属的容器,以及小文件的各个切片数据和校验码在容器中的偏移量;

所述元数据服务器具体用于:按照所述容器中的各个存储文件与相应的存储节点的对齐顺序,分别确定小文件的各个切片数据和校验码对应的存储节点,并向所述客户端通知所述对应的存储节点的位置,令所述客户端根据小文件的各个切片数据和校验码在容器中的偏移量,分别从所述对应的存储节点中读取各个切片数据和校验码,其中,各个切片数据及相应校验码,与各个存储文件之间的对应关系是由本系统预先配置的。

9.如权利要求6或7所述的系统,其特征在于,所述目录服务器进一步用于:

在建立小文件的索引信息之前,建立每一个元数据文件对应的头文件,所述头文件至少包括小文件的元数据信息在对应元数据文件中的位置信息,以及小文件数据的状态信息,所述状态信息用于指示小文件的元数据是否可读。

10.如权利要求9所述的系统,其特征在于,所述目录服务器进一步用于:

在接收到客户端发送的删除小文件的请求后,获取小文件所在元数据文件对应的头文件,并将获得的头文件中小文件的元数据的状态信息更改为不可读。

说明书 :

一种小文件的定位方法及系统

技术领域

[0001] 本发明涉及互联网领域,特别涉及一种小文件的定位方法及系统。

背景技术

[0002] 随着互联网、物联网、云计算等高速发展,大量的互联网企业涌入人们的生活,很多互联网企业都会遇到海量小文件(Lost of Small Files,LOSF)的问题,例如,文本、图片以及音乐等,如此海量的小文件必然会要求更高的系统存取性能,以及会面临小文件的备份与恢复困难等问题。另外,社会化网络、移动通信、网络视频音频、传感器网络等各种应用产生的数据量很大,往往能够产生千万级、亿级甚至十亿、百亿级的海量小文件,而且大多海量小文件都是混合存储,因此,在元数据管理、访问性能、存储效率等方面面临着巨大的挑战。
[0003] 目前,小文件的存储方法主要是采用多副本的方式进行备份并存储,对于海量的小文件来说,主要特点就是数据量大,同时存在大量的元数据,因此,在此种情况下,小文件的存储会占用大量的存储空间。另外,为了提供标准的文件目录结构,还需配备一个目录服务器,目录服务器多采用数据库或者目录树进行管理。
[0004] 下面以现有技术中两种小文件系统为例,介绍现有技术中的小文件的存取方法。
[0005] 第一种小文件系统主要通过将海量的小文件(如图片、文本等)打包进大文件进行存储,并通过多副本的方式来解决数据的可靠性,其中,用于存储多个小文件的大文件可称作一个Block,通常64MB大小,Block内部存储的每个文件用一个File id标识,下面将TFS中小文件存储的过程分两个步骤进行介绍。
[0006] 小文件写的过程:
[0007] 客户端向名称服务器(称为Name Server)发送写请求;
[0008] Name Server根据Block的负载情况,向客户端提供可用的Block、File id以及该Block所属的数据服务器(称为Data Server);
[0009] 客户端向相应的Data Server发送数据,Data Server通过管道运输(即pipeline)模式将数据复制到其他的Data Server。
[0010] 小文件读的过程:
[0011] 客户端通过编码将文件名转换为Block id和File id,然后向名称服务器(即Name Server)索要数据服务器(即Data Server);
[0012] Data Server收到请求后,通过接收到的Block id和File id定位到Block的具体位置,并读取数据,将读取的数据返回客户端。
[0013] 第二种小文件系统以Haystack为例,其针对存储图片的数量巨大的网站,Haystack的主要架构主要有三个部分:Haystack目录(即Haystack Directory),Haystack存储(即Haystack Store)以及Haystack贮存区(即Haystack Cache)。其中,Haystack Store是物理存储节点,以物理卷轴的形式组织存储空间,每个物理卷轴一般很大(例如100GB),每一个物理卷轴对应一个物理文件,因此,每个存储节点上的物理文件的元数据信息都很小,多个物理存储节点上的物理卷轴组成一个逻辑卷轴,用于备份,Haystack Directory用于存放逻辑卷轴和物理卷轴的对应关系。
[0014] 下面将Haystack中小文件存储的流程分两个步骤进行介绍。
[0015] 小文件写的过程(例如图片上传的过程)为:
[0016] 网页服务器(称为Web Server)首先请求Haystack Directory获取图片的id和可写的逻辑卷轴,接着将数据写入对应的每一个物理卷轴,一般备份数为3;
[0017] 小文件读的过程(例如图片下载或浏览的过程)为:
[0018] 当用户访问一个页面时,Web Server请求Haystack Directory构造一个URL:http://///,后续根据各个部分的信息一次访问内容分发网络(Content Delivery Network,CDN),Cache和后端的Haystack Store存储节点。
[0019] Haystack Directory的实现采用Replicated Database做持久化存储,前面增加一个Memcache集群满足查询需求。
[0020] 综上所述,现有技术中,在进行小文件存储时,多采用多副本的方式,这样,会占用很大的内存,增加系统开销,从而导致存储空间利用率很低。另外,目录服务采用数据库作底层架构时,虽然数据库很灵活,可以实现目录服务的增删改查功能,但是,在对海量小文件进行记录时,数据库的性能会很差,同时,整个系统的稳定性非常依赖于数据库的稳定性,随着系统规模的扩大,数据库必将成为整个系统的瓶颈。

发明内容

[0021] 本发明实施例提供一种小文件的定位方法及系统,用以提高小文件的定位能力,以及提高空间存储利用率。
[0022] 本发明实施例提供的具体技术方案如下:
[0023] 一种小文件的定位方法,包括:
[0024] 文件管理平台接收客户端发送的小文件读取请求后,确定所述小文件的目录对应的元数据文件;
[0025] 所述文件管理平台根据所述小文件的标识信息,以及预设的所述小文件的索引信息,确定所述小文件的元数据信息在所述元数据文件中的存储位置,并基于所述存储位置获取所述小文件的元数据信息;其中,所述小文件的索引信息用于描述所述小文件的标识信息和所述存储位置之间的映射关系,所述元数据信息中至少包括小文件的切片数据和检验码所属的容器和小文件的切片数据和校验码在容器中的偏移量;
[0026] 所述文件管理平台基于所述小文件的元数据信息,向所述客户端通知保存有所述容器的相关存储节点的位置,令所述客户端从所述相关存储节点读取所述小文件的切片数据和校验码。
[0027] 这样,可以提高小文件的定位能力,降低索引的复杂度,并提高系统的索引及存储性能。
[0028] 较佳地,在接收到所述小文件读取请求之前,进一步包括:
[0029] 所述文件管理平台接收到客户端发送的小文件存储请求时,为所述小文件分配可用的容器,并通过所述容器关联相应的存储节点,令客户端将小文件的切片数据和校验码分别发送至相应的存储节点,并指示所述相应的存储节点分别将接收到的小文件的切片数据和校验码存储至本地对应所述容器的存储文件中;
[0030] 所述文件管理平台根据所述小文件的目录以及预设的目录与元数据文件的一一对应关系,确定所述小文件对应的元数据文件,并根据客户端反馈的存储结果,将所述小文件的元数据信息在所述元数据文件中进行更新,以及建立所述小文件的索引信息,其中,所述小文件的索引信息用于描述所述小文件的标识信息与所述小文件元数据信息的存储位置之间的映射关系。
[0031] 较佳地,所述文件管理平台为所述小文件分配可用的容器,并通过所述容器关联相应的存储节点,令所述客户端将小文件的切片数据和校验码分别发送至相应的存储节点,具体包括:
[0032] 所述文件管理平台为所述小文件分配可用的容器,并将所述容器中各个存储文件分别关联相应的存储节点,令所述客户端将小文件进行切片处理并按预设的容错方法计算校验码后,按照容器中各个存储文件与相应的存储节点的对齐顺序将各个切片数据和校验码分别向相应的存储节点发送,其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由所述文件管理平台预先配置的容器。
[0033] 这样,能够大大提升存储空间利用率,降低了系统的存储开销,提升了系统的存储性能。
[0034] 较佳地,所述文件管理平台基于所述小文件的元数据信息,向所述客户端通知保存有所述容器的相关存储节点的位置,令所述客户端从所述相关存储节点读取所述小文件的切片数据和校验码,具体包括:
[0035] 所述文件管理平台基于所述小文件的元数据信息,确定小文件的各个切片数据和校验码所属的容器,以及小文件的各个切片数据和校验码在容器中的偏移量;
[0036] 所述文件管理平台按照所述容器中的各个存储文件与各个存储节点的对齐顺序,分别确定小文件的各个切片数据和校验码对应的存储节点;其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由所述文件管理平台预先配置的;
[0037] 所述文件管理平台向所述客户端通知所述对应的存储节点的位置,令所述客户端根据小文件的各个切片数据和校验码在容器中的偏移量,分别从所述对应的存储节点中读取各个切片数据和校验码。
[0038] 较佳地,进一步包括:
[0039] 在建立小文件的索引信息之前,建立每一个元数据文件对应的头文件,所述头文件至少包括小文件的元数据信息在对应元数据文件中的位置信息,以及小文件数据的状态信息,所述状态信息用于指示小文件的元数据是否可读。
[0040] 较佳地,进一步包括:
[0041] 在接收到客户端发送的删除小文件的请求后,获取小文件所在元数据文件对应的头文件,并将获得的头文件中小文件的元数据的状态信息更改为不可读。
[0042] 这样,可以采用集中式处理,降低了系统的开销,提升系统的性能。
[0043] 一种小文件的定位系统,包括:
[0044] 目录服务器,用于在接收客户端发送的小文件读取请求后,确定所述小文件的目录对应的元数据文件;以及,
[0045] 用于根据所述小文件的标识信息,以及预设的所述小文件的索引信息,确定所述小文件在所述元数据文件中的元数据信息的存储位置,并基于所述存储位置获取所述小文件的元数据信息;其中,所述小文件的索引信息用于描述所述小文件的标识信息和所述存储位置之间的映射关系,所述元数据信息中至少包括小文件的切片数据和检验码所属的容器和小文件的切片数据和校验码在容器中的偏移量;
[0046] 元数据服务器,用于基于所述小文件的元数据信息,向所述客户端通知保存有所述容器的相关存储节点的位置,令所述客户端从所述相关存储节点读取所述小文件的切片数据和校验码。
[0047] 这样,可以提高小文件的定位能力,降低索引的复杂度,并提高系统的索引及存储性能。
[0048] 较佳地,在接收到所述小文件读取请求之前:
[0049] 所述元数据服务器进一步用于:在接收到客户端发送的小文件存储请求时,为所述小文件分配可用的容器,并通过该容器关联相应的存储节点,令所述客户端将小文件的切片数据和校验码分别发送至相应的存储节点,并指示所述相应的存储节点分别将接收到的小文件的切片数据和校验码存储至本地对应所述容器的存储文件中;
[0050] 所述目录服务器进一步用于:根据所述小文件的目录以及预设的目录与元数据文件的一一对应关系,确定所述小文件对应的元数据文件,并根据客户端反馈的存储结果,将所述小文件的元数据信息在所述元数据文件中进行更新,以及建立小文件的索引信息,其中,所述小文件的索引信息用于描述所述小文件的标识信息与所述小文件元数据信息的存储位置之间的映射关系。
[0051] 较佳地,在为所述小文件分配可用的容器,并通过所述容器关联相应的存储节点,令所述客户端将小文件的切片数据和校验码分别发送至相应的存储节点时,所述元数据服务器具体用于:
[0052] 为所述小文件分配可用的容器,并将所述容器中各个存储文件分别关联相应的存储节点,令所述客户端将小文件进行切片处理并按预设的容错方法计算校验码后,按照容器中各个存储文件与相应的存储节点的对齐顺序将各个切片数据和校验码分别向相应的存储节点发送,其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由所述文件管理平台预先配置的容器。
[0053] 这样,能够大大提升存储空间利用率,降低了系统的存储开销,提升了系统的存储性能。
[0054] 较佳地,在定位小文件的过程中:
[0055] 所述目录服务器具体用于:根据获得的所述小文件的元数据信息,确定小文件的各个切片数据和校验码所属的容器,以及小文件的各个切片数据和校验码在容器中的偏移量;
[0056] 所述元数据服务器具体用于:按照所述容器中的各个存储文件与相应的存储节点的对齐顺序,分别确定小文件的各个切片数据和校验码对应的存储节点,并向所述客户端通知所述对应的存储节点的位置,令所述客户端根据小文件的各个切片数据和校验码在容器中的偏移量,分别从所述对应的存储节点中读取各个切片数据和校验码,其中,各个切片数据及相应校验码,与各个存储文件之间的对应关系是由本系统预先配置的;
[0057] 较佳地,所述目录服务器进一步用于:
[0058] 在建立小文件的索引信息之前,建立每一个元数据文件对应的头文件,所述头文件至少包括小文件的元数据信息在对应元数据文件中的位置信息,以及小文件数据的状态信息,所述状态信息用于指示小文件的元数据是否可读。
[0059] 较佳地,所述目录服务器进一步用于:
[0060] 在接收到客户端发送的删除小文件的请求后,获取小文件所在元数据文件对应的头文件,并将获得的头文件中小文件的元数据的状态信息更改为不可读。
[0061] 这样,可以采用集中式处理,降低了系统的开销,提升系统的性能。

附图说明

[0062] 图1为本发明实施例中小文件切片定位示意图;
[0063] 图2为本发明实施例中小文件索引示意图;
[0064] 图3为本发明实施例中小文件定位流程图;
[0065] 图4为本发明实施例中小文件存储流程图;
[0066] 图5为本发明实施例中小文件读取流程图;
[0067] 图6为本发明实施例中文件管理平台结构图。

具体实施方式

[0068] 本发明实施例设计了一种小文件的定位方法及系统,利用纠删码(Erasure Coding,EC)的方法,将小文件进行切片以后的切片数据和校验码分别存储在不同的存储节点上,并建立小文件的标识信息与小文件元数据信息的存储位置之间的映射关系,从而在进行小文件索引时,可通过元数据文件对应的头文件进行快速索引,这样,可避免传统的数据库查找等动作,提高小文件定位的能力,降低索引复杂度,并提高了空间利用率,从而提高了系统的存储和读取性能。
[0069] 本发明实施例中,为方便描述,将存取小文件的系统称作文件管理平台,该文件管理平台可以是服务器的集群。
[0070] 下面结合附图对本发明实施例优选的实施方式做进一步详细的说明。
[0071] 本发明实施例中,在进行小文件存储时,具体过程如下:
[0072] 步骤一、文件管理平台接收到客户端发送的小文件存储请求时,为该小文件分配可用的容器(可称为container),并通过该容器关联相应的存储节点,令该客户端将小文件的切片数据和校验码分别发送至相应的存储节点,并指示相应的存储节点分别将接收到的小文件的切片数据和校验码存储至本地对应容器的存储文件中。
[0073] 具体地,文件管理平台接收到客户端发送的小文件存储请求后,执行以下操作:
[0074] 1)首先判断是否可以创建该小文件,若是,则继续执行步骤2),否则,向客户端返回结果为创建失败。
[0075] 例如,若客户端发送的小文件名称与已储存的其他小文件名称相同,即重名,则向客户端反馈创建失败,并提示创建失败的原因为重名,以提示客户端进行更换名称后重新发送创建请求。
[0076] 2)文件管理平台为该小文件分配可用的容器和存储节点列表,令该客户端将小文件进行切片处理并按预设的容错方法计算校验码后,按照容器中各个存储文件与各个存储节点的对齐顺序将各个切片数据和校验码分别向相应的存储节点发送,其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由文件管理平台预先配置的。其中,一个容器只能同时分配给一个客户端使用。
[0077] 具体地,参阅图1所示,预设的容错方法可以是纠删码(即Erasure Coding)的方法,例如将小文件进行切片后,利用Reed Solomon算法,计算出冗余校验码,再按照顺序对齐对应的容器中不同存储文件文件,每一个存储文件按顺序对齐对应的存储节点,该存储节点由文件管理平台预先分配的。这样,每一个切片数据或者校验码都分别对应一个存储节点。
[0078] 如图1所示采用4+1的算法,如一个小文件大小为1M,每一个片段大小为4k,具体的实施方式为:
[0079] 1、按照每一个分片的大小为4k将小文件进行切片,那么1M的小文件可以产生256个切片。
[0080] 2、按照4个切片一组进行分组,可将所有切片分为64个分组。
[0081] 3、每一组的4个切片根据EC算法,可计算出1个校验码。
[0082] 这样,存储空间有效利用率为4/(4+1)=80%,,而传统的双副本的存储方法的存储空间利用率仅为1/2=50%,因此,采用EC容错方法进行小文件的存储,存储空间利用率为双副本存储方法空间利用率的1.6倍,从而大大降低了系统的存储开销,提升了系统的存储性能,并且,如果采用更高容错的模式,空间利用率将得到更大的提升。
[0083] 3)各个存储节点分别将接收到的各个小文件的切片数据和校验码存储至本地对应的容器的存储文件中。
[0084] 其中,各个存储节点将接收到的各个切片数据和校验码追加到本地的存储文件之后,进行保存。
[0085] 步骤二、文件管理平台根据小文件的目录以及预设的目录与元数据文件的一一对应关系,确定该小文件对应的元数据文件,并根据客户端反馈的存储结果,将该小文件的元数据信息在对应的元数据文件中进行更新,以及建立小文件的索引信息,该索引信息用于描述小文件的标识信息与小文件元数据信息的存储位置之间的映射关系。
[0086] 具体地,每一个目录都对应一个元数据文件,例如,参阅图2所示,本发明实施例可以但不限于采用通过哈希算法(即hash算法)建立目录与元数据文件的对应关系,可以采用key/value模式对所有的目录与元数据文件建立对应关系,如,目录A可通过哈希算法对应/mnt/data1/file1,目录A/B可通过哈希算法对应/mnt/data1/file2,目录A/B/C可通过哈希算法对应/mnt/data1/file3,目录A/B/C/D可通过哈希算法对应/mnt/data1/file4,其中目录B为目录A下的子目录,目录C为目录B下的子目录,目录D为目录C下的子目录。
[0087] 每一个元数据文件中包含了这个目录下的子目录名、子文件名以及子文件对应的元数据信息,并且,若根目录的子目录下还有次子目录,则此根目录对应的元数据文件中不包含子目录下的次级目录的信息。
[0088] 文件管理平台确定该小文件所属的目录对应的元数据文件,并接收客户端反馈的该小文件的各切片数据和校验码所在的容器、分别在容器中的偏移量,以及容器在写入各切片数据和校验码后的大小,文件管理平台根据接收的这些信息在对应的元数据文件以及各存储节点进行更新。并且,文件管理平台建立小文件的索引信息,即在小文件的标识信息(如小文件名称)与小文件的元数据的存储位置之间建立映射关系,这样,就可以在输入小文件的标识信息时,快速索引到小文件的元数据信息在对应元数据文件中的位置,快速读取小文件的元数据信息,并进一步根据小文件的元数据信息确定小文件在本地存储文件中的真实位置。
[0089] 具体地,在建立小文件的索引信息之前,建立每一个元数据文件对应的头文件,该头文件至少包括小文件的元数据信息在对应元数据文件中的存储位置信息,以及小文件数据的状态信息,该状态信息用于指示小文件的元数据是否可读。例如,可通过哈希算法,建立小文件的标识信息与对应元数据文件的头文件之间的映射关系,通过头文件快速索引到小文件的元数据信息在对应元数据文件中的具体位置。
[0090] 参阅图2所示,/mnt/data1/file1这个文件对应一个头文件/mnt/data1/file1.meta,这个头文件中记录这小文件的元数据信息在对应元数据文件中的位置信息(用第一列数据表示),以及小文件数据的状态信息(用第二列数据表示)。
[0091] 其中,状态信息即表示小文件数据是否可读,若小文件的状态信息为0,表示该小文件的数据不可读;若小文件的状态信息为1,表示该小文件的数据可读。这样,在进行文件删除时,就可以采用延迟删除的策略,具体为:
[0092] 在接收到客户端发送的删除小文件的请求后,获取小文件所在元数据文件对应的头文件,并将获得的头文件中小文件的元数据的状态信息更改为不可读。
[0093] 即,若小文件需要被删除,并不立即将其删除,先将小文件所在元数据文件对应的头文件中小文件的元数据的状态信息更改为0,这样,在索引该小文件时,该小文件的元数据信息不能被读取。文件管理平台在一定时间通过一定的触发条件进行空间回收时,统一将状态信息为0的小文件进行删除,释放相应的小文件的占用空间,这样,可以采用集中式处理,降低了系统的开销,提升系统的性能。
[0094] 参阅图3所示,本发明实施例中,在进行小文件读取时,通过预设的算法进行索引,可以但不限于采用哈希算法。具体地,文件管理平台执行以下操作:
[0095] 步骤300:文件管理平台接收客户端发送的小文件读取请求后,确定该小文件的目录对应的元数据文件。
[0096] 例如,参阅图2所示,在接收到A/e这个小文件的读取请求时,首先确定A/e这个小文件所在的目录为A,进一步确定目录A对应的元数据文件为/mnt/data1/file1。
[0097] 步骤310:文件管理平台根据该小文件的标识信息,以及预设的小文件的索引信息,确定小文件的元数据信息的存储位置,并基于该存储位置获取小文件的元数据信息;其中,元数据信息中至少包括小文件的切片数据和检验码所属的容器和小文件的切片数据和校验码在容器中的偏移量。
[0098] 例如,参阅图2所示,仍然以接收到A/e这个小文件的读取请求为例,根据A/e这个小文件携带的标识信息,通过哈希算法,假设得到的值为0,表示A/e这个小文件可定位到/mnt/data1/file1.meta这个头文件中第0个槽位,第0个槽位里记录这该小文件的元数据信息在/mnt/data1/file1中的位置为第0行,且状态信息为0。
[0099] 进一步地,在/mnt/data1/file1这个文件中,定位到第0行,即为A/e这个小文件的元数据信息的位置,可查询到A/e这个小文件的切片数据和校验码所在的容器为123(第2列数据)及其在123这个容器中的偏移量为0(第3列数据),另外还可以查询到A/e这个小文件的大小信息(第4列数据),以及A/e是否为目录(第5列数据)等信息。
[0100] 这样,可通过读取小文件对应元数据文件的头文件来快速定位小文件元数据信息的存储位置,进一步获取小文件的数据,整个事件复杂度为O(1),相比传统B tree的复杂度大大降低。并避免了传统数据库的查找等动作,提高了系统的索引性能。
[0101] 步骤320:文件管理平台基于小文件的元数据信息,向所述客户端通知保存有所述容器的相关存储节点的位置,令所述客户端从所述相关存储节点读取所述小文件的切片数据和校验码。
[0102] 具体地,文件管理平台基于小文件的元数据信息,确定小文件的各个切片数据和校验码所属的容器,以及小文件的各个切片数据和校验码在容器中的偏移量;
[0103] 参阅图1所示,文件管理平台按照该容器中的各个存储文件与各个存储节点的对齐顺序,分别确定小文件的各个切片数据和校验码对应的存储节点;其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由文件管理平台预先配置的;
[0104] 文件管理平台指示各个存储节点定位相应的容器中的各个存储文件,结合小文件的各个切片数据和校验码在容器中偏移量,分别读取各个切片数据和校验码,并将获得的各个切片数据和校验码组合后返回客户端。
[0105] 本发明实施例中,文件管理平台可以是一个服务器集群,,例如,文件管理平台可包括目录服务器、元数据服务器以及数据存储节点。其中,元数据服务器可以负责包含小文件的容器(可称为container)的管理、系统的异常处理(例如硬盘损坏、存储节点硬件故障等)以及空间的回收管理等;目录服务器负责小文件到container的映射;数据存储节点负责所有用户数据的存储。
[0106] 下面对在上述服务器集群的管理下对小文件的存取进行详细说明。
[0107] 参阅图4所示,小文件的写入(即存储)流程具体如下:
[0108] 步骤401:客户端向目录服务器发送创建小文件的请求。
[0109] 步骤402:目录服务器检查是否可以创建小文件,若是,则继续执行步骤403;否则,程序终止,且返回错误信息,如重名,则创建失败。
[0110] 步骤403:目录服务器向客户端返回创建成功。
[0111] 步骤404:客户端向元数据服务器发送容器的请求。
[0112] 步骤405:元数据服务器从可用的容器列表中选出一个容器,并选出可用的数据存储节点。
[0113] 步骤406:元数据服务器向客户端返回容器和存储节点列表。
[0114] 步骤407:客户端根据容错算法(比如EC算法)将待上传的小文件进行切片,然后计算冗余校验码,将切片数据和校验码按照顺序对齐container中的存储文件,接着按顺序对齐收到的各个存储节点,并向存储节点分别发送。
[0115] 步骤408:各个存储节点收到数据以后,根据container查找到本地的存储文件,并将数据追加到该存储文件之后,进行保存。
[0116] 步骤409:客户端向存储节点和目录服务器确认数据发送完毕。
[0117] 步骤410:客户端根据向container中写入的数据量,确认container的大小,以及各个切片数据和校验码在相应的container中的偏移量等信息,并将确认的信息向目录服务器和存储节点发送,目录服务器和存储节点根据接收到的信息,将小文件数据的大小和小文件数据在container中的偏移量等参数进行更新。
[0118] 参阅图5所示,小文件的读取流程具体如下:
[0119] 步骤501:客户端向目录服务器发送小文件的读取请求。
[0120] 步骤502:目录服务器根据待读取的小文件的标识信息和哈希算法,定位小文件的元数据所在的存储位置。
[0121] 步骤503:目录服务器根据获得的小文件的元数据信息,向客户端返回小文件数据所在的container以及小文件数据在container中的偏移量。
[0122] 步骤504:客户端向元数据服务器发送在步骤503中接收到的container对应的存储节点的请求。
[0123] 步骤505:元数据服务器根据该container以及预设的container与存储节点的映射关系,快速定位出相应的存储节点。
[0124] 步骤506:元数据服务器将存储节点信息向客户端返回。
[0125] 步骤507:客户端向相应的存储节点分别发送读取请求。
[0126] 步骤508:存储节点根据与container的对齐顺序,分别定位对应的本地的存储文件,然后结合小文件的数据在container中的偏移量确定其在本地存储文件中的偏移,然后读取小文件的切片数据及校验码,并进行组合后,向客户端返回小文件的数据。
[0127] 基于上述实施例,参阅图6所示,本发明实施例中,文件管理平台包括:目录服务器600和元数据服务器610。其中:
[0128] 目录服务器600,用于在接收客户端发送的小文件读取请求后,确定小文件的目录对应的元数据文件;以及,
[0129] 用于根据小文件的标识信息,以及预设的小文件的索引信息,确定小文件的元数据信息在元数据文件中的存储位置,并基于存储位置获取小文件的元数据信息;其中,小文件的索引信息用于描述小文件的标识信息和该存储位置之间的映射关系,元数据信息中至少包括小文件的切片数据和检验码所属的容器和小文件的切片数据和校验码在容器中的偏移量;
[0130] 元数据服务器610,用于基于小文件的元数据信息,向该客户端通知保存有该容器的相关存储节点的位置,令该客户端从相关存储节点读取该小文件的切片数据和校验码。
[0131] 这样,可以提高小文件的定位能力,降低索引的复杂度,并提高系统的索引及存储性能。
[0132] 较佳地,在接收到小文件读取请求之前:
[0133] 元数据服务器610进一步用于:在接收到客户端发送的小文件存储请求时,为小文件分配可用的容器,并通过该容器关联相应的存储节点,令该客户端将小文件的切片数据和校验码分别发送至相应的存储节点,并指示相应的存储节点分别将接收到的小文件的切片数据和校验码存储至本地对应容器的存储文件中;
[0134] 目录服务器600进一步用于:根据文件的目录以及预设的目录与元数据文件的一一对应关系,确定小文件对应的元数据文件,并根据客户端反馈的存储结果,将小文件的元数据信息在元数据文件中进行更新,以及建立小文件的索引信息,该索引信息用于描述小文件的标识信息与小文件元数据信息的存储位置之间的映射关系。
[0135] 较佳地,在为该小文件分配可用的容器,并通过该容器关联相应的存储节点,令该客户端将小文件的切片数据和校验码分别发送至相应的存储节点时,元数据服务器610具体用于:
[0136] 为该小文件分配可用的容器,并将该容器中各个存储文件分别关联相应的存储节点,令该客户端将小文件进行切片处理并按预设的容错方法计算校验码后,按照容器中各个存储文件与相应的存储节点的对齐顺序将各个切片数据和校验码分别向相应的存储节点发送,其中,各个切片数据及相应检验码,与各个存储文件之间的对应关系是由文件管理平台预先配置的。
[0137] 这样,能够大大提升存储空间利用率,降低了系统的存储开销,提升了系统的存储性能。
[0138] 较佳地,在定位小文件的过程中:
[0139] 目录服务器600具体用于:根据获得的小文件的元数据信息,确定小文件的各个切片数据和校验码所属的容器,以及小文件的各个切片数据和校验码在容器中的偏移量;
[0140] 元数据服务器610具体用于:按照容器中的各个存储文件与相应的存储节点的对齐顺序,分别确定小文件的各个切片数据和校验码对应的存储节点,并向所述客户端通知所述对应的存储节点的位置,令所述客户端根据小文件的各个切片数据和校验码在容器中的偏移量,分别从所述对应的存储节点中读取各个切片数据和校验码,其中,各个切片数据及相应校验码,与各个存储文件之间的对应关系是由本系统预先配置的;
[0141] 较佳地,目录服务器600进一步用于:
[0142] 在建立小文件的索引信息之前,建立每一个元数据文件对应的头文件,头文件至少包括小文件的元数据信息在对应元数据文件中的位置信息,以及小文件数据的状态信息,状态信息用于指示小文件的元数据是否可读。
[0143] 较佳地,目录服务器600进一步用于:
[0144] 在接收到客户端发送的删除小文件的请求后,获取小文件所在元数据文件对应的头文件,并将获得的头文件中小文件的元数据的状态信息更改为不可读。
[0145] 这样,可以采用集中式处理,降低了系统的开销,提升系统的性能。
[0146] 综上所述,本发明实施例中,文件管理平台接收客户端发送的小文件读取请求后,确定小文件的目录对应的元数据文件后,根据该小文件的标识信息,以及预设的小文件的索引信息,确定小文件的元数据信息的存储位置,并基于存储位置获取小文件的元数据信息,其中,该元数据信息中至少包括小文件的切片数据和检验码所属的容器和小文件的切片数据和校验码在容器中的偏移量,然后基于小文件的元数据信息,向该客户端通知保存有该容器的相关存储节点的位置,令该客户端从相关存储节点读取该小文件的切片数据和校验码。这样,可以提高小文件的定位能力,降低索引的复杂度,并提高系统的索引及存储性能。
[0147] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0148] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0149] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0150] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0151] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0152] 显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。