一种数据存储方法及装置与流程

文档序号:11134085阅读:299来源:国知局
一种数据存储方法及装置与制造工艺

本发明涉及数据处理技术领域,尤其涉及一种数据存储方法及装置。



背景技术:

文件存储是当前比较常见的系统功能。由于企业内部的各种类型业务繁多,每日会产生大量不同格式、不同大小的数据文件。这些数据往往需要长期保存。因此,如何有效的管理这些文件就成为了企业办公系统的一个重要课题。

目前,主要是利用近年来兴起的大数据相关的分布式数据库来进行企业级文件管理。分布式数据库,通过计算机网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库,并将文件以数据块的形式存储在数据存储单元中,以获取更大的存储容量和并发访问量。分布式数据库通常采取客户机/服务器模式,客户机负责将用户访问操作与服务器交互,服务器从其管理的数据存储单元中获取数据。目前常见的分布式数据库包括基于HDFS开发的HBase,基于ZFS开发的Z-DataMart等。分布式数据库在存储时,将小文件以数据块的方式组合成大文件存储,可满足企业海量小文件的存储需求。但是,由于在对大文件的存储过程中,也需要将大文件拆分成文件数据块,需对文件数据块进行频繁的切分和合并。因此,分布式数据库对大文件的处理效率很不理想。



技术实现要素:

有鉴于此,本发明提供了一种数据存储方法及装置,以解决现有的分布式数据库在满足大量小文件存储需求的基础上,对大文件的处理效率低下的问题。

本发明实施例提供的一种数据存储方法,包括:

接收数据存储请求,所述数据存储请求携带有待处理数据;

获取所述待处理数据的大小;

当所述待处理数据的大小小于第一预设值时,将所述待处理数据保存至第一存储区域;

当所述待处理数据的大小大于第二预设值时,将所述待处理数据保存至第二存储区域,并将第一元数据保存至所述第一存储区域,所述第一元数据包括第一存储路径,所述第一存储路径为所述待处理数据在所述第二存储区域中的存储路径;

当所述待处理数据的大小大于或等于所述第一预设值且所述待处理数据的大小小于或等于所述第二预设值时,根据预设规则,将所述待处理数据拆分成至少一个子数据后,分别将每个子数据保存至第三存储区域,并按照所述每个子数据在所述待处理数据中的排列顺序,将所述每个子数据的第二元数据保存至所述第一存储区域,所述第二元数据包括第二存储路径,所述第二存储路径为该子数据在所述第三存储区域中的存储路径;

其中,所述第一预设值小于所述第二预设值。

优选地,还包括:

生成临时目录和第一路径事务队列,并将所述临时目录路径添加至所述第一路径事务队列;

当所述待处理数据的大小大于或等于所述第一预设值时,将所述待处理数据写入所述临时目录保存;

当所述待处理数据未成功写入所述临时目录时,执行事务处理流程,所述事务处理流程,包括:按照所述第一路径事务队列中的临时目录路径,删除所述临时目录。

优选地,所述将所述待处理数据保存至第二存储区域,之后还包括:

生成第二路径事务队列;

判断所述待处理数据是否成功保存在所述第二存储区域;

如果是,则获取所述第一存储路径,并将所述第一存储路径添加至所述第二路径事务队列;

如果否,则执行所述事务处理流程。

优选地,所述并将第一元数据保存至所述第一存储区域,之后还包括:

判断所述第一元数据是否成功保存至所述第一存储区域;

如果是,则删除所述临时目录;

如果否,则执行所述事务处理流程,所述事务处理流程,还包括:根据所述第二路径事务队列中的第一存储路径,删除所述第二存储区域中保存的待处理数据。

优选地,所述分别将每个子数据保存至第三存储区域,之后还包括:

生成第三路径事务队列;

判断所述每个子数据是否成功保存在所述第三存储区域;

如果是,则获取所述每个子数据的第二存储路径,并按照所述每个子数据在所述待处理数据中的排列顺序,将所述每个子数据的第二存储路径添加至所述第三路径事务队列;

如果否,则执行所述事务处理流程。

优选地,所述将所述每个子数据的第二元数据保存至所述第一存储区域,之后还包括:

判断所述每个子数据的第二元数据是否成功保存至所述第一存储区域;

如果是,则删除所述临时目录;

如果否,则执行所述事务处理流程,所述事务处理流程,还包括:根据所述第三路径事务队列中的第二存储路径,删除所述第三存储区域中保存的子数据。

优选地,所述将所述待处理数据保存至所述第一存储区域,之后还包括:

当所述待处理数据未成功保存至所述第一存储区域时,执行事务处理流程,所述事务处理流程,包括:执行所述第一存储区域的事务回滚。

本发明实施例还提供了一种数据存储装置,包括:请求接收模块、数据检测模块、第一比较模块、第二比较模块、第一数据处理模块、第二数据处理模块和第三数据处理模块;

所述请求接收模块,用于接收数据存储请求,所述数据存储请求携带有待处理数据;

所述数据检测模块,用于获取所述待处理数据的大小;

所述第一比较模块,用于比较所述待处理数据的大小与第一预设值的大小关系;

所述第二比较模块,用于比较所述待处理数据的大小与第二预设值的大小关系;

所述第一数据处理模块,用于当所述第一比较模块判断所述待处理数据的大小小于所述第一预设值时,将所述待处理数据保存至第一存储区域;

所述第二数据处理模块,用于当所述第二比较模块判断所述待处理数据的大小大于所述第二预设值时,将所述待处理数据保存至第二存储区域,并将第一元数据保存至所述第一存储区域,所述第一元数据包括第一存储路径,所述第一存储路径为所述待处理数据在所述第二存储区域中的存储路径;

所述第三数据处理模块,用于当所述第一比较模块判断所述待处理数据的大小大于或等于所述第一预设值且所述第二比较模块判断所述待处理数据的大小小于或等于所述第二预设值时,根据预设规则,将所述待处理数据拆分成至少一个子数据后,分别将每个子数据保存至第三存储区域,并按照所述每个子数据在所述待处理数据中的排列顺序,将所述每个子数据的第二元数据保存至所述第一存储区域,所述第二元数据包括第二存储路径,所述第二存储路径为该子数据在所述第三存储区域中的存储路径;

其中,所述第一预设值小于所述第二预设值。

优选地,还包括:临时目录处理模块、判断模块、路径处理模块和事务处理模块;

所述临时目录处理模块,用于生成临时目录;

所述路径处理模块,用于生成第一路径事务队列,并将所述临时目录路径添加至所述第一路径事务队列;

所述临时目录处理模块,还用于当所述第一比较模块判断所述待处理数据的大小大于或等于所述第一预设值时,将所述待处理数据写入所述临时目录保存;

所述判断模块,用于判断所述待处理数据是否成功写入所述临时目录;

所述事务处理模块,用于当所述判断模块判断所述待处理数据未成功写入所述临时目录时,执行事务处理流程,所述事务处理流程,包括:按照所述第一路径事务队列中的临时目录路径,删除所述临时目录。

优选地,所述第二数据处理模块,包括:第一判断子模块;

所述路径处理模块,还用于生成第二路径事务队列;

所述第一判断子模块,用于判断所述待处理数据是否成功保存在所述第二存储区域;

所述路径处理模块,还用于当所述第一判断子模块判断所述待处理数据成功保存在所述第二存储区域时,获取所述第一存储路径,并将所述第一存储路径添加至所述第二路径事务队列;

所述事务处理模块,还用于当所述第一判断子模块判断所述待处理数据未成功保存在所述第二存储区域时,执行所述事务处理流程。

优选地,所述第二数据处理模块,还包括:第二判断子模块;

所述第二判断子模块,用于判断所述第一元数据是否成功保存至所述第一存储区域;

所述临时目录处理模块,还用于当所述第二判断子模块判断所述第一元数据成功保存至所述第一存储区域时,删除所述临时目录;

所述事务处理模块,还用于当所述第二判断子模块判断所述第一元数据未成功保存至所述第一存储区域时,执行所述事务处理流程,所述事务处理流程,还包括:根据所述第二路径事务队列中的第一存储路径,删除所述第二存储区域中保存的待处理数据。

优选地,所述第三数据处理模块,包括:第三判断子模块;

所述路径处理模块,还用于生成第三路径事务队列;

所述第三判断子模块,用于判断所述每个子数据是否成功保存在所述第三存储区域;

所述路径处理模块,还用于当所述第三判断子模块判断所述每个子数据成功保存在所述第三存储区域时,获取所述每个子数据的第二存储路径,并按照所述每个子数据在所述待处理数据中的排列顺序,将所述每个子数据的第二存储路径添加至所述第三路径事务队列;

所述事务处理模块,还用于当所述第三判断子模块判断所述每个子数据未成功保存在所述第三存储区域时,执行所述事务处理流程。

优选地,所述第三数据处理模块,还包括:第四判断子模块;

所述第四判断子模块,用于判断所述每个子数据的第二元数据是否成功保存至所述第一存储区域;

所述临时目录处理模块,还用于当所述第四判断子模块判断所述每个子数据的第二元数据成功保存至所述第一存储区域时,删除所述临时目录;

所述事务处理模块,还用于当所述第四判断子模块判断所述每个子数据的第二元数据未成功保存至所述第一存储区域时,执行所述事务处理流程,所述事务处理流程,还包括:根据所述第三路径事务队列中的第二存储路径,删除所述第三存储区域中保存的子数据。

优选地,所述第一数据处理模块,包括:第五判断子模块;

所述第五判断子模块,用于判断所述待处理数据是否成功保存至所述第一存储区域;

所述事务处理模块,还用于当所述第五判断子模块判断所述待处理数据未成功保存至所述第一存储区域时,执行事务处理流程,所述事务处理流程,包括:执行所述第一存储区域的事务回滚。

与现有技术相比,本发明至少具有以下优点:

本发明实施例提供的数据存储方法,按照待处理数据的大小,将待处理数据分为小文件、大文件和超大文件三个级别,每个级别的存储方法及存储地址均不相同。将小文件直接存储于第一存储区域;将超大文件实体直接存储于第二存储区域,并将其存储路径保存在第一存储区域;将大文件拆分成大小近似的数据块后保存在第三存储区域,并将其存储路径按顺序保存在第一存储区域。这样,既能满足对大量小文件的存储需求,还能保证对大文件的处理效率。例如,当待处理数据为小文件时,将其以文件表的形式保存在分布式数据库的相应区域。当待处理数据为超大文件时,将其保存在分布式文件系统的文件目录中,并将其存储路径以文件表的形式保存在分布式数据库的相应区域。当待处理数据为大文件时,将大文件拆分成大小近似的数据块后以数据块表的形式保存在分布式数据库的相应区域,并将其存储路径按顺序以文件表的形式保存在分布式数据块的相应区域。一方面利用了分布式文件系统和分布式数据库自身的高可靠性特点,使得文件存储的可靠性大大提升;另一方面充分利用分布式数据库和分布式文件系统进行文件存储的处理,充分发挥了二者的高效特点,提高了文件存储系统的性能。

附图说明

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

图1(a)为现有的分布式文件系统的架构示意图;

图1(b)为现有的分布式数据库的架构示意图;

图2为本发明实施例提供的数据存储方法中不同大小的数据其存储位置的示意图;

图3为本发明实施例提供的事务处理的流程示意图;

图4为本发明提供的数据存储方法实施例的流程示意图;

图5为本发明提供的数据存储装置实施例的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

首先需要说明的是,现有的分布式文件管理系统主要分为分布式文件系统和分布式数据库。分布式文件系统在存储数据时,多将文件元数据信息(如存储路径或偏移量)保存在主服务器内存,并将文件实体分布保存在底层的块存储介质上。常见的分布式文件系统如ZFS、NFS、DFS、HDFS等。然而,受制于主服务器内存容量的限制,分布式文件系统存储的文件总容量必然受到限制。若企业内部数据以小文件为主,将大大限制分布式文件系统的存储规模。因此,为了满足小文件的存储需求,在分布式文件系统的基础上又产生了分布式数据库。分布式数据库,类似分布式文件系统,通过计算机网络将物理上分散的多个数据存储单元连接起来组成一个逻辑上统一的数据库,以获取更大的存储容量和并发访问量。目前常见的分布式数据库包括基于HDFS开发的HBase,基于ZFS开发的Z-DataMart等。分布式数据库在存储数据时,通过将小文件以数据块的方式组合成大文件,并存储在分布式文件系统上,以满足企业海量小文件的存储需求。但是,由于在对大文件的存储过程中,也需要将大文件拆分成文件数据块,并对文件数据块进行频繁的切分和合并,对大文件的处理效率很不理想。因此单独使用分布式文件系统或分布式数据库都无法同时满足企业对不同大小文件存储的业务需求。

下面,以HDFS和HBase为例,介绍分布式文件系统和分布式数据库的基本架构。

HDFS集群有两类节点,并以管理者-工作者模式运行。HDFS服务器包括Namenode(管理者)、Datanode(工作者)角色。其中,Namenode用于管理文件目录、文件与块以及块和Datanode的对应关系;Datanode用于存储文件实体,文件实体是以块的形式来存储。具体架构如图1(a)所示。

HBase服务器包括主服务器(master)、区域服务器(regionserver),其中,master负责管理regionserver,为了避免单点故障通常会部署多台;而regionserver用于管理数据实体的存储(包括数据的拆分和存储等)。具体架构如图1(b)所示。

为此,本发明实施例提供的数据存储方法,在立足企业对于海量文件的存储管理需求基础上,利用分布式文件系统和分布式数据库相结合的方案,并实现了企业级的分级文件管理。基本解决思路为:将企业数据文件按照大小划分为三个级别。当数据的大小小于第一预设值时(小文件),则交予分布式数据库存储;当数据的大小大于第二预设值时(超大文件),则存储在分布式文件系统上;当数据的大小介于二者之间时(大文件),则按照预设规则进行数据分割,以数据块的方式保存在分布式数据库中。这样,即可有效的解决不同大小文件的存储管理效率问题,也可以利用分布式文件系统高可靠的特性来保证海量文件的数据完整性,满足企业需求。

需要说明的是,本发明实施例提供的数据存储方法及装置,适用于文件存储系统,该文件存储系统包括分布式文件系统以及分布式数据库。

基于上述思想,为了使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。

方法实施例:

参见图2该图为本发明实施例提供的数据存储方法实施例的流程示意图。

本实施例提供的数据存储方法,包括:

S201:接收数据存储请求,所述数据存储请求携带有待处理数据;

为保证数据存储的安全性、便于数据管理,可在接收到数据存储请求后进行权限验证,判断数据存储请求的来源是否可将数据存储于相应的存储区域。当权限验证通过时,则继续进行后续步骤;当权限验证不通过时,则结束数据存储流程。

可以理解的是,由于在实际操作中,需处理大量数据的存储请求。因此,权限验证通过后,可将数据存储请求所携带的待处理数据添加至事务队列后,按照先进先出的顺序处理事务队列中待处理数据的存储请求。

待处理数据的类型包括但不限于各种格式的办公文档、文本、图片、XML文件、HTML文件、报表和影音信息等。

S202:获取所述待处理数据的大小;

S203:当所述待处理数据的大小小于第一预设值时,将所述待处理数据保存至第一存储区域;

这里需要说明的是,第一存储区域可为分布式数据库中用于存储文件表的区域。分布式数据库中数据的元数据一般以表的形式存储于文件表。此外,本领域技术人员还可根据实际情况具体设定第一预设值。但是,考虑到多数分布式数据库存储能力的限制,第一预设值最好小于或等于10MB。

此时,当待处理数据的大小小于10MB时(可称为小文件),直接将该待处理数据以文件表的形式存储在分布式数据库的特定区域中。这样,就可通过分布式数据接口根据小文件的标识信息直接读写小文件,无需根据待处理数据的标志信息获取该待处理数据的存储地址,再进行读写,提高了待处理数据的读写效率。

S204:当所述待处理数据的大小大于第二预设值时,将所述待处理数据保存至第二存储区域,并将第一元数据保存至所述第一存储区域,所述第一元数据包括第一存储路径,所述第一存储路径为所述待处理数据在所述第二存储区域中的存储路径;

其中,所述第一预设值小于所述第二预设值。

这里需要说明的是,第二存储区域可为分布式文件系统的文件目录。此外,本领域技术人员可根据实际情况设定第二预设值。例如,考虑到多数分布式数据库存储能力的限制,第二预设值可设置为100MB。

此时,当待处理数据的大小大于100MB时(可称为超大文件),直接将超大文件保存至分布式文件系统的文件目录下,并将超大文件的元数据以文件表的形式保存至分布式数据库的特定区域中。可以理解的是,超大文件的元数据包括但不限于其文件名称、文件格式、文件描述和文件存储路径等。

当需读取超大文件时,首先从分布式数据库的文件表中获得其存储路径,再根据该存储路径,直接从分布式文件系统的文件目录中读取该超大文件。这样,在存储及后续操作中,无需对超大文件进行频繁的拆分和组合,提高了对大小大于100MB的数据的读写效率。

另外,由于直接将大小小于100MB的待处理数据存储于分布式文件系统的文件目录并将其元数据存储在文件表中时,会限制文件存储系统的存储能力。因此,将大小介于10MB和100MB之间的数据交由分布式数据库存储,进行数据的拆分和组合,可提高整个文件存储系统的存储能力。

这时,本实施例提供的数据存储方法,还包括:

S205:当所述待处理数据的大小大于或等于所述第一预设值且所述待处理数据的大小小于或等于所述第二预设值时,根据预设规则,将所述待处理数据拆分成至少一个子数据后,分别将每个子数据保存至第三存储区域,并按照所述每个子数据在所述待处理数据中的排列顺序,将所述每个子数据的第二元数据保存至所述第一存储区域,所述第二元数据包括第二存储路径,所述第二存储路径为该子数据在所述第三存储区域中的存储路径。

这里需要说明的是,第三存储区域可以为分布式数据库中用于存储数据块表的区域。

当待处理数据的大小介于10MB和100MB之间时(可称为大文件),可根据预设规则将大文件拆分成大小近似的子数据,分别将每个子数据以数据块表的形式存储于分布式数据库的特定区域中,并按照每个子数据在待处理数据中的顺序,将每个子数据的元数据记录在分布式数据库的文件表中。当需读取大文件时,首先从分布数据库的文件表中获取其每个子数据的存储路径,再根据存储路径按顺序从分布式数据库的数据块表中获取每个子数据,组合成该大文件。可以理解的是,大文件的元数据包括但不限于其文件名称、文件格式、文件描述、子数据的顺序和文件存储路径等。

还需要说明的是,根据分布式数据库的存储能力,每个子数据的大小一般可设置为8MB,本领域技术人员还可根据实际情况设定拆分出的每个子数据的大小。

综上,图3示出了本实施例提供的数据存储方法中不同大小的数据其存储位置,实线箭头指向了该文件的实体的存储位置,虚线箭头指向了该文件的元数据的存储位置。

下面将举例说明本实施例中提到的文件表和数据块表的结构设计。

在本实施例中,文件表用于存储大小小于10MB的文件实体以及大小大于10MB文件的元数据,其结构如下表所示:

文件表包含两个列族:第一个列族为f列族,用于存储大文件和超大文件的的元数据,对小文件无意义;第二个列族为e列族,用于写入小文件的实体信息,采用HBase所使用的数据存储格式(LOB或MOB格式)来存储,对于大文件和超大文件没有意义。

需要说明的是,属性PATH_FILE对于小文件没有意义。如果文件为大文件,PATH_FILE属性保存的信息为大文件切割的子数据的rowkey信息序列。例如,一大文件存在N个子数据记录,那么属性PATH_FILE的保存格式为“SIZE1,ID_BLOCK1;SIZE2,ID_BLOCK2;.....SIZEN,ID_BLOCKN”。SIZE为子数据的大小,ID_BLOCK是指对大文件分割后的子数据信息的rowkey,存储顺序即各子数据的分割顺序。如果文件为超大文件,则该PATH_FILE属性保存的是超大文件在HDFS的存储路径。

在本实施例中,数据块表用于存储大小介于10MB和100MB之间的文件的子数据,其结构如下表所示:

数据块表,列族为b,该列族包含了大文件分割出的子数据的内容。大文件的实体在该表中按照配置的数据块大小被分割为多条记录,每条记录保存一个分割的子数据。

还需说明的是,在rowkey设计上结合HBase特性和企业业务需求,这里可使用两种设计方案:

第一,当文件的写入业务多于读取业务时,在数据块表的rowkey设计上可以采用uuid的方式,这样可以保证子数据足够散列,利于数据的写入。

第二,当文件的读取业务多于写入业务时,在数据块表的rowkey设计上可以结合文件表的文件编号,采用文件编号+序号的方式作为rowkey,例如“文件编号+0001”、“文件编号+0002”的格式。这样同一文件切割的多个子数据将依据rowkey字典序保存至集群的同一服务器中,利于文件的检索和顺序读取。

由于分布式数据库不存在跨表事务,而且分布式数据库与分布式文件系统之间也没有现成的事务机制,对于存储操作的事务处理不能简单依赖服务器本身,故而需设计一事务队列的机制,用于保存不同场景的文件目录以及数据信息,包括第一路径事务队列、第二路径事务队列以及第三路径事务队列。

因此,在本实施例提供的数据存储方法的另一种更优的实施方式中,该方法在步骤S202之后,还包括:

生成临时目录和第一路径事务队列,并将所述临时目录路径添加至所述第一路径事务队列;

当所述待处理数据的大小大于或等于所述第一预设值时,将所述待处理数据写入所述临时目录保存;

当所述待处理数据未成功写入所述临时目录时,执行事务处理流程。

这里需要说明的是,当待处理数据为大文件或超大文件时,为保证待处理数据不丢失,可先将待处理数据写入临时目录保存,并将其存储路径添加至第一路径事务队列。在执行后续的具体存储步骤时,直接从第一路径事务队列中获取该待处理数据的存储路径,并以此为依据从临时目录中读取该待处理数据。

实际操作时,预先生成临时目录和第一路径事务队列,并将临时目录的路径写入第一路径事务队列后,再将待处理数据写入临时目录。当写入失败时,只需按照第一路径事务队列中的临时目录地址,删除该临时目录即可。

本实施例提供的数据存储方法,在步骤S203之后,还包括:

当所述待处理数据未成功保存至所述第一存储区域时,执行事务处理流程;

本实施例提供的数据存储方法,在步骤S204之后,还包括:

生成第二路径事务队列;

判断所述待处理数据是否成功保存在所述第二存储区域;

如果是,则获取所述第一存储路径,并将所述第一存储路径添加至第二路径事务队列;如果否,则执行事务处理流程;

可以理解的是,当待处理数据成功保存在第二存储区域中后,可直接从第二路径事务队列中获取第一存储路径,再保存在分布式数据库的文件表中即可。当待处理数据未成功保存在第二存储区域时,则不再执行后续存储步骤,在执行事务处理流程并清除事务队列中的待处理数据后,结束存储流程。此时,文件存储系统恢复到执行该待处理数据的存储步骤之前的状态。这样,能够使得数据存储操作的完整性得以保证。

判断所述第一元数据是否成功保存至所述第一存储区域;

如果是,则删除所述临时目录中保存的待处理数据;如果否,则执行事务处理流程;

可以理解的是,当第一元数据也成功保存时,该待处理数据即成功保存在文件存储系统中。此时,即可删除对应的临时目录。

此外,同理,当第一元数据未成功保存在第一存储区域时,执行事务处理流程并清除事务队列中的待处理数据后,结束存储流程。

本实施例提供的数据存储方法,在步骤S205之后,还包括:

生成第三路径事务队列;

判断所述每个子数据是否成功保存在所述第三存储区域;

如果是,则获取所述每个子数据的第二存储路径,并按照所述每个子数据在所述待处理数据中的排列顺序,将所述每个子数据的第二存储路径添加至第三路径事务队列;如果否,则执行事务处理流程;

可以理解的是,当每个子数据成功保存在第三存储区域中后,可直接从第三路径事务队列中获取每个子数据的第二存储路径,再按顺序保存在分布式数据库的文件表中即可。当某一个子数据或某几个子数据未成功保存在第三存储区域时,则不再执行后续存储步骤,在执行事务处理流程并清除事务队列中的待处理数据后,结束存储流程。此时,文件存储系统恢复到执行该待处理数据的存储步骤之前的状态。这样,能够使得数据存储操作的完整性得以保证。

判断每个子数据的第二元数据是否成功保存至所述第一存储区域;

如果是,则删除对应的临时目录;如果否,则执行事务处理流程。

可以理解的是,当第二元数据也成功保存时,该待处理数据即成功保存在文件存储系统中。此时,即可删除临时目录中的该待处理数据。

此外,当第二元数据未成功保存在第一存储区域时,则执行事务处理流程并清除事务队列中的待处理数据后,结束存储流程。

下面将详细说明事务处理流程的具体步骤:

参见图4,该图为本发明实施例提供的数据存储方法中事务处理的流程示意图。

为了简化编程、便于后续修改,可将事务处理流程单独出来,由独立的事务处理模块负责。这样,本实施例中提供的事务处理流程,具体包括:

S401:检查事务面向的对象是否为小文件;如果是,则执行步骤S402;如果否,则执行步骤S403;

S402:执行所述第一存储区域的事务回滚后,结束事务处理流程;

可以理解的是,当小文件保存失败时,需撤销该保存步骤,删除小文件中可能已保存在文件存储系统中的部分数据,以保证文件存储系统中数据的正确性及完整性,防止不完整的数据占用文件存储系统的存储空间。

S403:检查第一路径事务队列中是否存在需要清理的临时存储路径;如果是,则按照所述第一路径事务队列中的临时存储路径,删除所述临时目录;

同理,当大文件或超大文件写入临时目录失败时,需删除用于保存大文件或超大文件的临时目录,以防止临时目录占用系统存储空间。

当事务面向的对象不是小文件时,事务处理流程,还包括:

S404:检查第二路径事务队列中是否存在需要清理的第一存储路径;如果是,则根据所述第二路径事务队列中的第一存储路径,删除所述第二存储区域中保存的待处理数据;

S405:检查第三路径事务队列中是否存在需要清理的第二存储路径;如果是,则根据所述第三路径事务队列中的第二存储路径,删除所述第三存储区域中保存的子数据。

通过上述步骤,分别根据第一路径事务队列、第二路径事务队列和第三路径事务队列中的存储路径删除相应存储区域中对应的数据后,即可使文件存储系统恢复到执行本实施例提供的数据存储方法之前的状态,使得数据存储操作的完整性得以保证。

综上所述,本实施例提供的数据存储方法,按照待处理数据的大小,将待处理数据分为小文件、大文件和超大文件三个级别,每个级别的存储方法及存储地址均不相同。将小文件直接存储于第一存储区域;将超大文件实体直接存储于第二存储区域,并将其存储路径保存在第一存储区域;将大文件拆分成大小近似的数据块后保存在第三存储区域,并将其存储路径按顺序保存在第一存储区域。这样,既能满足对大量小文件的存储需求,还能保证对大文件的处理效率。例如,当待处理数据为小文件时,将其以文件表的形式保存在分布式数据库的相应区域。当待处理数据为超大文件时,将其保存在分布式文件系统的文件目录中,并将其存储路径以文件表的形式保存在分布式数据库的相应区域。当待处理数据为大文件时,将大文件拆分成大小近似的数据块后以数据块表的形式保存在分布式数据库的相应区域,并将其存储路径按顺序以文件表的形式保存在分布式数据块的相应区域。一方面利用了分布式文件系统和分布式数据库自身的高可靠性特点,使得文件存储的可靠性大大提升;另一方面充分利用分布式数据库和分布式文件系统进行文件存储的处理,充分发挥了二者的高效特点,提高了文件存储系统的性能。

基于上述实施例提供的数据存储方法,本发明实施例还提供了一种数据存储装置。

装置实施例:

参见图5,该图为本发明提供的数据存储装置实施例的结构示意图。

本实施例提供的数据存储装置,包括:请求接收模块100、数据检测模块200、第一比较模块301、第二比较模块302、第一数据处理模块401、第二数据处理模块402和第三数据处理模块403;

所述请求接收模块100,用于接收数据存储请求,所述数据存储请求携带有待处理数据;

所述数据检测模块200,用于获取所述待处理数据的大小;

所述第一比较模块301,用于比较所述待处理数据的大小与第一预设值的大小关系;

所述第二比较模块302,用于比较所述待处理数据的大小与第二预设值的大小关系;

所述第一数据处理模块401,用于当所述第一比较模块301判断所述待处理数据的大小小于所述第一预设值时,将所述待处理数据保存至第一存储区域;

所述第二数据处理模块402,用于当所述第二比较模块302判断所述待处理数据的大小大于所述第二预设值时,将所述待处理数据保存至第二存储区域,并将第一元数据保存至所述第一存储区域,所述第一元数据包括第一存储路径,所述第一存储路径为所述待处理数据在所述第二存储区域中的存储路径;

所述第三数据处理模块403,用于当所述第一比较模块301判断所述待处理数据的大小大于或等于所述第一预设值且所述第二比较模块302判断所述待处理数据的大小小于或等于所述第二预设值时,根据预设规则,将所述待处理数据拆分成至少一个子数据后,分别将每个子数据保存至第三存储区域,并按照所述每个子数据在所述待处理数据中的排列顺序,将所述每个子数据的第二元数据保存至所述第一存储区域,所述第二元数据包括第二存储路径,所述第二存储路径为该子数据在所述第三存储区域中的存储路径;

其中,所述第一预设值小于所述第二预设值。

在一个例子中,本实施例提供的数据存储装置,还包括:临时目录处理模块、判断模块、路径处理模块和事务处理模块(均未在图中示出);

所述临时目录处理模块,用于生成临时目录;

所述路径处理模块,用于生成第一路径事务队列,并将所述临时目录路径添加至所述第一路径事务队列;

所述临时目录处理模块,还用于当所述第一比较模块判断所述待处理数据的大小大于或等于所述第一预设值时,将所述待处理数据写入临时目录保存;

所述判断模块,用于判断所述待处理数据是否成功写入所述临时目录;

所述事务处理模块,用于当所述判断模块判断所述待处理数据未成功写入所述临时目录时,执行事务处理流程,所述事务处理流程,包括:按照所述第一路径事务队列中的临时目录路径,删除所述临时目录。

在另一个例子中,本实施例提供的数据存储装置,所述第二数据处理模块,包括:第一判断子模块(未在图中示出);

所述路径处理模块,还用于生成第二路径事务队列;

所述第一判断子模块,用于判断所述待处理数据是否成功保存在所述第二存储区域;

所述路径处理模块,还用于当所述第一判断子模块判断所述待处理数据成功保存在所述第二存储区域时,获取所述第一存储路径,并将所述第一存储路径添加至第二路径事务队列;

所述事务处理模块,还用于当所述第一判断子模块判断所述待处理数据未成功保存在所述第二存储区域时,执行所述事务处理流程。

在另一个例子中,本实施例提供的数据存储装置,所述第二数据处理模块,还包括:第二判断子模块(未在图中示出);

所述第二判断子模块,用于判断所述第一元数据是否成功保存至所述第一存储区域;

所述临时目录处理模块,还用于当所述第二判断子模块判断所述第一元数据成功保存至所述第一存储区域时,则按删除所述临时目录;

所述事务处理模块,还用于当所述第二判断子模块判断所述第一元数据未成功保存至所述第一存储区域时,执行所述事务处理流程,所述事务处理流程,还包括:根据所述第二路径事务队列中的第一存储路径,删除所述第二存储区域中保存的待处理数据。

在另一个例子中,本实施例提供的数据存储装置,所述第三数据处理模块,包括:第三判断子模块(未在图中示出);

所述路径处理模块,还用于生成第三路径事务队列;

所述第三判断子模块,用于判断所述每个子数据是否成功保存在所述第三存储区域;

所述路径处理模块,还用于当所述第三判断子模块判断所述每个子数据成功保存在所述第三存储区域时,获取所述每个子数据的第二存储路径,并按照所述每个子数据在所述待处理数据中的排列顺序,将所述每个子数据的第二存储路径添加至第三路径事务队列;

所述事务处理模块,还用于当所述第三判断子模块判断所述每个子数据未成功保存在所述第三存储区域时,执行所述事务处理流程,所述事务处理流程。

在另一个例子中,本实施例提供的数据存储装置,所述第三数据处理模块,还包括:第四判断子模块(未在图中示出);

所述第四判断子模块,用于判断所述每个子数据的第二元数据是否成功保存至所述第一存储区域;

所述临时目录处理模块,还用于当所述第四判断子模块判断所述每个子数据的第二元数据成功保存至所述第一存储区域时,则删除所述临时目录;

所述事务处理模块,还用于当所述第四判断子模块判断所述每个子数据的第二元数据未成功保存至所述第一存储区域时,执行所述事务处理流程,所述事务处理流程,还包括:根据所述第三路径事务队列中的第二存储路径,删除所述第三存储区域中保存的子数据。

在另一个例子中,本实施例提供的数据存储装置,所述第一数据处理模块,包括:第五判断子模块(未在图中示出);

所述第五判断子模块,用于判断所述待处理数据是否成功保存至所述第一存储区域;

所述事务处理模块,还用于当所述第五判断子模块判断所述待处理数据未成功保存至所述第一存储区域时,执行事务处理流程,所述事务处理流程,包括:执行所述第一存储区域的事务回滚。

需要说明的是,图5所示的数据存储装置是与图3中所示的数据存储方法所对应的装置,具体实现方法与图3所示的数据存储方法类似,参考图3中所示的数据存储方法中的描述,这里不再赘述。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。

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