一种海量小文件合并存储方法和系统与流程

文档序号:11677545阅读:212来源:国知局
一种海量小文件合并存储方法和系统与流程

本发明涉及数据存储领域,尤其涉及一种海量小文件合并存储方法和系统。



背景技术:

随着科技的发展和电子设备的进步,我们正处于数据爆炸的时代,普通的网络服务器中的图片数据、附件、帖子的数量都在急剧增长,一般网站服务器的各类文件总量按1tb计算,普通网站图片为30kb左右,那结果会是3500多万个文件,传统方式是将上述文件直接存储在服务器硬盘中,容易造成部分文件损坏并无法读取,因为文件数量巨大导致无法备份等严重困扰企业和运维人员的难题。

目前已有的文件存储方案,例如gfs、hdfs、lustre、ceph、mogilefs、fastdfs、hadoop,hive等都只能部署于liunx系统的ext2、ext3等文件系统中,而windows的fat、ntfs几乎没有能用的存储方案。本专利中提供的存储方案会抛开具体的磁盘格式,在liunx和windows平台都能适用。

专利库中检索到的已有专利,虽然解决了在windows平台上部署的问题,但是在存储结构和存储方案上存在着严重的缺陷,虽然能对文件正常的写入和读取,但是在文件的修改,删除方面存在严重缺陷。另外,已有专利在存储定位头文件时,使用了类似链表结构,当访问最尾部的文件时存在效率问题。



技术实现要素:

本发明的实施例提供了一种海量小文件合并存储方法和系统。具体方案如下:

预先建立图文件作为定位文件索引库文件,其中,图文件和库文件按二维族序列建立映射关系;

接收小文件;

根据所述图文件确定所述库文件中闲置的存储空间;

采用所述闲置的存储空间合并存储所述小文件。

根据本发明的上述方法,所述图文件和库文件按二维族序列建立映射关系,包括:

对每个图文件映射建立一个行列数相同的二维族序列,其中,每个图文件对应一个库文件,所述二维族序列中每个族对应记录一个库单元。

根据本发明的上述方法,所述根据所述图文件确定所述库文件中闲置的存储空间,包括:

根据所述二维族序列中族的数量和族对应记录的库单元的存储量确定每个库文件的存储量,根据所述二维族序列对应记录的库单元的被占用的情况确定库文件中闲置的存储空间。

根据本发明的上述方法,所述采用所述闲置的存储空间合并存储所述小文件,包括:

当小文件的所占用的存储空间大于一个族对应记录的库单元的存储量,且,当库文件中存在连续的闲置的存储空间的存储段,且,所述连续的闲置的存储空间的存储段大于小文件的所需要占用的存储空间,采用所述连续的闲置的存储空间的存储段存储所述小文件;

当小文件的所占用的存储空间大于一个族对应记录的库单元的存储量,且,当库文件中存在连续的闲置的存储空间的存储段,且,所述连续的闲置的存储空间的存储段小于小文件的所需要占用的存储空间,选择多个连续闲置的存储空间的存储段,其闲置的存储空间累加大于所述小文件所占用的存储空间,采用所述连续闲置的存储空间的存储段存储所述小文件。

根据本发明的上述方法,还包括:

所述图文件记录所述小文件在所述库文件中的位置和长度,并返回对应的小文件的标识;

通过所述图文件返回的小文件的标识确定所述小文件的在所述库文件中的位置和长度。

根据本发明的上述方法,所述小文件的标识,包括:

所述小文件存储的服务器id、所述小文件存储的库文件id、所述小文件存储的族id以及所述小文件的流水号。

根据本发明的另一方面,还提供一种海量小文件合并存储系统,包括:

建立模块:其用于预先建立图文件作为定位文件索引库文件;其中,图文件和库文件按二维族序列建立映射关系;

接收模块:其用于接收小文件;

确定模块:其用于根据所述图文件确定库文件中闲置的存储空间;

存储模块:其用于采用所述闲置的存储空间合并存储所述小文件。

根据本发明的另一方面,所述建立模块,具体用于:

对每个图文件映射建立一个行列数相同的二维族序列,其中,每个图文件对应一个库文件,所述二维族序列中每个族对应记录一个库单元。根据权利根据本发明的另一方面,所述确定模块,具体用于:

根据所述二维族序列中族的数量和族对应记录的库单元的存储量确定每个库文件的存储量,根据所述二维族序列对应记录的库单元的被占用的情况确定库文件中闲置的存储空间。

根据本发明的另一方面,所述存储模块,具体用于:

当小文件的所占用的存储空间大于一个族对应记录的库单元的存储量,且,当库文件中存在连续的闲置的存储空间的存储段,且,所述连续的闲置的存储空间的存储段大于小文件的所需要占用的存储空间,采用所述连续的闲置的存储空间的存储段存储所述小文件;

当小文件的所占用的存储空间大于一个族对应记录的库单元的存储量,且,当库文件中存在连续的闲置的存储空间的存储段,且,所述连续的闲置的存储空间的存储段小于小文件的所需要占用的存储空间,选择多个连续闲置的存储空间的存储段,其闲置的存储空间累加大于所述小文件所占用的存储空间,采用所述连续闲置的存储空间的存储段存储所述小文件。

根据本发明的另一方面,还包括:

记录模块:其用于使所述图文件记录所述小文件在所述库文件中的位置和长度,并返回对应的小文件的标识;其还用于通过所述图文件返回的小文件的标识确定所述小文件的在所述库文件中的位置和长度。

根据本发明的另一方面,所述小文件的标识,包括:

所述小文件存储的服务器id、所述小文件存储的库文件id、所述小文件存储的族id以及所述小文件的流水号。由上述本发明的实施例提供的技术方案可以看出,本发明实施例通过预先建立图文件作为定位文件索引库文件,其中,图文件和库文件按二维族序列建立映射关系;接收小文件;根据所述图文件确定所述库文件中闲置的存储空间;采用所述闲置的存储空间合并存储所述小文件,其中,所述图文件记录所述小文件在所述库文件中的位置和长度,并返回对应的小文件的标识;通过所述图文件返回的小文件的标识确定所述小文件的在所述库文件中的位置和长度。解决海量小文件的存储问题,实现了文件备份容易、运行占用内存少,访问速度快,cpu占有率低,可并发写入或读取,为企业带来低成本运营和高效率处理能力。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例一提供的一种海量小文件合并存储方法的处理流程图;

图2为本发明实施例一提供的图文件和库文件的对应图;

图3为实施例二提供的一种海量小文件合并存储系统的系统模块图。

具体实施方式

为便于对本发明实施例的理解,下面将结合附图以几个具体实施例为例做进一步的解释说明,且各个实施例并不构成对本发明实施例的限定。

实施例一

批量小文件连续读取速度慢的原因在于对文件头的频繁读取或者是各个小文件在磁盘上存储的空间不连续。因此为了解决上述两条缺陷,需要将小文件合并为大文件然后存储,本实施中对于合并后的文件我们简称库文件。

该实施例提供了一种海量小文件合并存储方法的处理流程如图1所示,本实施例中,其处理步骤如下:

步骤11、预先建立图文件作为定位文件索引库文件;其中,图文件和库文件按二维族序列建立映射关系;如图2所示,对每个图文件映射建立一个行列数相同的二维族序列,其中,每个图文件对应一个库文件,所述二维族序列中每个族对应记录一个库单元。本实施例中,每个库文件对应一个图文件,库文件中存储实际的有效数据,可以理解为一个仓库,而图文件可以理解为这个仓库的清单,记录具体的存放内容和位置等信息。

步骤12、接收小文件;

步骤13、根据所述图文件确定所述库文件中闲置的存储空间;所述根据所述图文件确定所述库文件中闲置的存储空间,包括:

根据所述二维族序列中族的数量和族对应记录的库单元的存储量确定每个库文件的存储量,根据所述二维族序列对应记录的库单元的被占用的情况确定库文件中闲置的存储空间。

本实施例中,在合并存储过程中,需要能顺利区分小文件在文件库中的位置和长度,新增一个定位文件,本实施例中简称图文件。如图2所示,每个库文件都会对应一个定位文件。此定位文件比较特殊之处在于他不是一个链表式的记录文件。而是一个图文件,类似于二维数组。也就是本实施中,对每个图文件映射建立一个行列数相同的二维族序列,在图文件中,采用图文件中设定的族来监控库文件中数据的存储和分配情况。本实施例中,假设图文件中的每个族占用了4bit存储空间;例如我们假设图文件中族的总数为128*128=16384个,仍然如图2所示,每个族对应记录一个库单元,每个族对应记录的库单元的存储量为16kb,那么当前库文件最大存储空间为256mb。此时图文件存储空间为64kb。

步骤14、采用所述闲置的存储空间合并存储所述小文件;

当小文件的所占用的存储空间大于一个族对应记录的库单元的存储量,且,当库文件中存在连续的闲置的存储空间的存储段,且,所述连续的闲置的存储空间的存储段大于小文件的所需要占用的存储空间,采用所述连续的闲置的存储空间的存储段存储所述小文件;

当小文件的所占用的存储空间大于一个族对应记录的库单元的存储量,且,当库文件中存在连续的闲置的存储空间的存储段,且,所述连续的闲置的存储空间的存储段小于小文件的所需要占用的存储空间,选择多个连续闲置的存储空间的存储段,其闲置的存储空间累加大于所述小文件所占用的存储空间,采用所述连续闲置的存储空间的存储段存储所述小文件。

此外,图文件记录所述小文件在所述库文件中的位置和长度,并返回对应的小文件的标识;通过所述图文件返回的小文件的标识确定所述小文件的在所述库文件中的位置和长度。所述小文件存储的服务器id、所述小文件存储的库文件id、所述小文件存储的族id以及所述小文件的流水号。

实施例二

该实施例提供了一种海量小文件合并存储系统,其具体实现结构如图3所示,具体可以包括如下的模块:建立模块31、接收模块32、确定模块33、以及存储模块34;其中,

建立模块31:其用于预先建立图文件作为定位文件索引库文件;其中,图文件和库文件按二维族序列建立映射关系;

建立模块31:其具体用于对每个图文件映射建立一个行列数相同的二维族序列,其中,每个图文件对应一个库文件,所述二维族序列中每个族对应记录一个库单元。

接收模块32:其用于接收小文件;

确定模块33:其用于根据所述图文件确定库文件中闲置的存储空间;

确定模块33:其具体用于根据所述二维族序列中族的数量和族对应记录的库单元的存储量确定每个库文件的存储量,根据所述二维族序列对应记录的库单元的被占用的情况确定库文件中闲置的存储空间。

存储模块34:其用于采用所述闲置的存储空间合并存储所述小文件;

存储模块34,其具体用于当小文件的所占用的存储空间大于一个族对应记录的库单元的存储量,且,当库文件中存在连续的闲置的存储空间的存储段,且,所述连续的闲置的存储空间的存储段大于小文件的所需要占用的存储空间,采用所述连续的闲置的存储空间的存储段存储所述小文件;

其还具体用于当小文件的所占用的存储空间大于一个族对应记录的库单元的存储量,且,当库文件中存在连续的闲置的存储空间的存储段,且,所述连续的闲置的存储空间的存储段小于小文件的所需要占用的存储空间,选择多个连续闲置的存储空间的存储段,其闲置的存储空间累加大于所述小文件所占用的存储空间,采用所述连续闲置的存储空间的存储段存储所述小文件。

本实施例的一种海量小文件合并存储系统,还包括:

记录模块35:其用于使所述图文件记录所述小文件在所述库文件中的位置和长度,并返回对应的小文件的标识;其还用于通过所述图文件返回的小文件的标识确定所述小文件的在所述库文件中的位置和长度。

其中,小文件存储的服务器id、所述小文件存储的库文件id、所述小文件存储的族id以及所述小文件的流水号。用本发明实施例的系统进行海量小文件合并存储的具体过程与前述方法实施例类似,此处不再赘述。

综上所述,本发明实施例通过预先建立图文件作为定位文件索引库文件,其中,图文件和库文件按二维族序列建立映射关系;接收小文件;根据所述图文件确定所述库文件中闲置的存储空间;采用所述闲置的存储空间合并存储所述小文件,其中,所述图文件记录所述小文件在所述库文件中的位置和长度,并返回对应的小文件的标识;通过所述图文件返回的小文件的标识确定所述小文件的在所述库文件中的位置和长度。解决海量小文件的存储问题,实现了文件备份容易、运行占用内存少,访问速度快,cpu占有率低,可并发写入或读取,为企业带来低成本运营和高效率处理能力。本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1