一种文件存储方法及装置与流程

文档序号:12305352阅读:186来源:国知局
一种文件存储方法及装置与流程

本发明涉及数据处理领域,特别涉及一种文件存储方法及装置。



背景技术:

目前,在存储文件时,需要存储文件的元数据和文件本身,现有技术中,一般将文件的元数据存储在存储终端的元数据库中,而将文件本身存储在存储终端的其他位置,这样存在数据访问需求时,存储终端根据元数据库中存储的元数据确定文件的存储位置,进而获得文件。此时若元数据库中存储的元数据丢失了,那么即使读取到了丢失的元数据对应的文件数据,也不能确定所读取到的文件数据是属于那些文件的,从而造成文件损失。



技术实现要素:

本发明实施例公开了一种文件存储方法及装置,保证元数据的恢复,避免文件的损失。

为达到上述目的,本发明实施例公开了一种文件存储方法,应用于存储终端,所述方法包括:

接收针对待存储文件的存储请求;

获得所述待存储文件的第一文件标识和所述待存储文件的数据量,并确定用于存储所述待存储文件的目标键;

根据所述目标键,获得所述待存储文件按照预设的存储格式存储时的待存储元数据;

按照所述预设的存储格式,将所述第一文件标识、所述数据量和所述待存储文件存储至所述目标键的值中,并将所述待存储元数据存储至预设的元数据库中。

在本发明的一种实现方式中,所述按照所述预设的存储格式,将所述第一文件标识、所述数据量和所述待存储文件存储至所述目标键的值中,包括:

按照第一关键字、文件标识长度和所述第一文件标识的顺序,将所述第一关键字、所述文件标识长度和所述第一文件标识存储至所述目标键的值中,其中,所述第一关键字为针对文件标识的关键字,所述文件标识长度为所述第一文件标识占用的字节数;

按照第二关键字、所述数据量和所述待存储文件的顺序,将所述第二关键字、所述数据量和所述待存储文件存储至所述目标键的值中,其中,所述第二关键字为针对文件的关键字。

在本发明的一种实现方式中,所述方法还包括:

在所述预设的元数据库存在元数据丢失的情况下,根据所有键的值中存储的所述第一关键字和所述第二关键字,更新所述预设的元数据库。

在本发明的一种实现方式中,所述根据所有键的值中存储的所述第一关键字和所述第二关键字,更新所述预设的元数据库,包括:

获得元数据丢失的文件的第二文件标识;

根据所述第二文件标识,从所有键的值中获得包含所述第二文件标识的目标数据段;

根据所述目标数据段中存储的所述第二文件标识和所述数据量,更新所述预设的元数据库。

在本发明的一种实现方式中,所述根据所述第二文件标识,从所有键的值中获得包含所述第二文件标识的目标数据段,包括:

根据所述第二文件标识,获得包含所述第二文件标识的键k;

判断所述键k的值中所述第二文件标识之后是否存储有第一关键字;

若为是,则获得所述键k的值中所述第二文件标识之后与所述第二文件标识最近的第一关键字w1,并确定第一关键字w2和所述第一关键字w1间的数据段为目标数据段,其中,所述第一关键字w2为:所述键k的值中所述第二文件标识之前且与所述第二文件标识最近的第一关键字;

若为否,则确定所述第一关键字w2与所述键k的值末尾存储位置间的数据段为目标数据段。

在本发明的一种实现方式中,所述根据所述目标键,获得所述待存储文件按照预设的存储格式存储时的待存储元数据,包括:

获得所述目标键的值中存储的第一关键字和第二关键字;

根据所获得第一关键字和所获得第二关键字,计算所述待存储文件在所述目标键的值中的偏移量;

根据计算得到的偏移量,确定所述待存储文件的待存储元数据。

为达到上述目的,本发明实施例还公开了一种文件存储装置,应用于存储终端,所述装置包括:存储请求接收模块、信息确定模块、元数据获得模块和数据存储模块;

其中,所述存储请求接收模块,用于接收针对待存储文件的存储请求;

所述信息确定模块,用于获得所述待存储文件的第一文件标识和所述待存储文件的数据量,并确定用于存储所述待存储文件的目标键;

所述元数据获得模块,用于根据所述目标键,获得所述待存储文件按照预设的存储格式存储时的待存储元数据;

所述数据存储模块,用于按照所述预设的存储格式,将所述第一文件标识、所述数据量和所述待存储文件存储至所述目标键的值中,并将所述待存储元数据存储至预设的元数据库中。

在本发明的一种实现方式中,所述数据存储模块,包括:

文件存储子模块,用于按照所述预设的存储格式,将所述第一文件标识、所述数据量和所述待存储文件存储至所述目标键的值中;

元数据存储子模块,用于将所述待存储元数据存储至预设的元数据库中;

所述文件存储子模块,包括:文件标识存储单元和文件存储单元;

其中,所述文件标识存储单元,用于按照第一关键字、文件标识长度和所述第一文件标识的顺序,将所述第一关键字、所述文件标识长度和所述第一文件标识存储至所述目标键的值中,其中,所述第一关键字为针对文件标识的关键字,所述文件标识长度为所述第一文件标识占用的字节数;

所述文件存储单元,用于按照第二关键字、所述数据量和所述待存储文件的顺序,将所述第二关键字、所述数据量和所述待存储文件存储至所述目标键的值中,其中,所述第二关键字为针对文件的关键字。

在本发明的一种实现方式中,所述装置还包括:元数据库更新模块,用于:

在所述预设的元数据库存在元数据丢失的情况下,根据所有键的值中存储的所述第一关键字和所述第二关键字,更新所述预设的元数据库。

在本发明的一种实现方式中,所述元数据库更新模块,包括:文件标识获得子模块、目标数据段确定子模块和元数据库更新子模块;

其中,所述文件标识获得子模块,用于在所述预设的元数据库存在元数据丢失的情况下,获得元数据丢失的文件的第二文件标识;

所述目标数据段确定子模块,用于根据所述第二文件标识,从所有键的值中获得包含所述第二文件标识的目标数据段;

所述元数据库更新子模块,用于根据所述目标数据段中存储的所述第二文件标识和所述数据量,更新所述预设的元数据库。

在本发明的一种实现方式中,所述目标数据段确定子模块,包括:键获得单元、关键字判断单元、第一目标数据段确定单元和第二目标数据段确定单元;

其中,所述键获得单元,用于根据所述第二文件标识,获得包含所述第二文件标识的键k;

所述关键字判断单元,用于判断所述键k的值中所述第二文件标识之后是否存储有第一关键字,若为是,则触发所述第一目标数据段确定单元,若为否,则触发所述第二目标数据段确定单元;

所述第一目标数据段确定单元,用于获得所述键k的值中所述第二文件标识之后与所述第二文件标识最近的第一关键字w1,并确定第一关键字w2和所述第一关键字w1间的数据段为目标数据段,其中,所述第一关键字w2为:所述键k的值中所述第二文件标识之前且与所述第二文件标识最近的第一关键字;

所述第二目标数据段确定单元,用于确定所述第一关键字w2与所述键k的值末尾存储位置间的数据段为目标数据段。

在本发明的一种实现方式中,所述元数据获得模块,包括:关键字获得子模块、偏移量计算子模块和元数据确定子模块;

其中,所述关键字获得子模块,用于获得所述目标键的值中存储的第一关键字和第二关键字;

所述偏移量计算子模块,用于根据所获得第一关键字和所获得第二关键字,计算所述待存储文件在所述目标键的值中的偏移量;

所述元数据确定子模块,用于根据计算得到的偏移量,确定所述待存储文件的待存储元数据。

由上可知,在本发明实施例中,存储终端在接收到针对待存储文件的存储请求后,获得待存储文件的第一文件标识和待存储文件的数据量,并确定用于存储待存储文件的目标键,根据目标键,获得待存储文件按照预设的存储格式存储时的待存储元数据,按照预设的存储格式,将第一文件标识、数据量和待存储文件存储至目标键中,并将该待存储元数据存储至预设的元数据库中。这样,在元数据库存在元数据丢失的情况下,就可以根据预设的存储格式确定出键的值中已存储文件的第一文件标识、数据量以及该已存储文件在该键的值中的偏移量,结合该键的名字,确定出该已存储文件的元数据,进而根据该元数据来恢复元数据库中的元数据,保证了元数据的恢复,避免文件的损失。

附图说明

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

图1为本发明实施例提供的一种文件存储方法的流程示意图;

图2为tlv存储格式的结构示意图;

图3为本发明实施例提供的另一种文件存储方法的流程示意图;

图4为本发明实施例提供的另一种文件存储方法的流程示意图;

图5为本发明实施例提供的另一种文件存储方法的流程示意图;

图6为本发明实施例提供的一种文件存储排布示意图;

图7为本发明实施例提供的另一种文件存储方法的流程示意图;

图8为本发明实施例提供的一种文件存储装置的结构示意图;

图9为本发明实施例提供的另一种文件存储装置的结构示意图;

图10为本发明实施例提供的另一种文件存储装置的结构示意图;

图11为本发明实施例提供的另一种文件存储装置的结构示意图;

图12为本发明实施例提供的另一种文件存储装置的结构示意图。

具体实施方式

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

下面通过具体实施例,对本发明进行详细说明。

参考图1,图1为本发明实施例提供的一种文件存储方法的流程示意图,应用于存储终端,该方法可以包括如下步骤:

s101:接收针对待存储文件的存储请求;

这里,存储请求中包含待存储文件,还可以包含该待存储文件的标识,以便于存储终端快速获得该待存储文件的标识,进而存储该待存储文件的元数据;或者,存储请求中也可以不包含该待存储文件的标识,存储终端可以在待存储文件中解析获得该待存储文件的标识,这样存储请求更为简单明了。

s102:获得待存储文件的第一文件标识和待存储文件的数据量,并确定用于存储待存储文件的目标键;

在本发明的一个实施例中,第一文件标识和待存储文件的数据量是该待存储文件的元数据的一部分,并且可以在获得存储请求时直接获得这些信息,因此,在存储该待存储文件前,先获得第一文件标识和该待存储文件的数据量。

在本发明的一个实施例中,具备高可靠性及可扩展性的海量数据存储对互 联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,在这种情况下使用关系型数据库将使得存储和读取数据的效率低下,并且扩展数据库也将成为很大的难题。在这样的情况下,使用键存储将会是一个很好的选择。键存储具有以下优点:

1、availability可用性;

2、scalability可扩展性;

3、failover故障恢复;

4、performance高性能。

键由名字key和值value组成,一个key对应一个value。

s103:根据目标键,获得待存储文件按照预设的存储格式存储时的待存储元数据;

具体地,待存储文件的元数据一般包括:在该目标键中的待存储文件的标识、数据量和相对于目标键起始存储位置的偏移量等元数据信息。

在本发明的一个实施例中,可以通过下述过程实现s103:

由于确定了目标键以及待存储文件的存储格式,从而就可以根据该存储格式确定该待存储文件在该目标键中的存储位置,此时,可以确定该待存储文件相对于目标键起始存储位置的偏移量,这样,结合获得的第一文件标识、数据量、偏移量和该目标键的名字就可以获得该待存储文件的元数据,也就是上述的待存储元数据。

在本发明的一个实施例中,预设的存储格式可以为tlv(tag_length_value,标记_长度_值)的格式,如图2所示,图2为tlv存储格式的结构示意图,这种存储格式更为简洁明了。

s104:按照预设的存储格式,将待存储文件的第一文件标识、待存储文件的数据量和待存储文件存储至目标键的值中,并将待存储元数据存储至预设的元数据库中。

其中,预设的元数据库,用于存储文件的元数据。

在本发明的一个实施例中,存储终端可能会存储许多相对键的值的容量小 的文件,如:键的值的容量为1mbytes,待存储文件的大小100kbytes,此时,如果一个键的值中只存储一个文件,将容易造成存储空间的浪费,因此,可以考虑在一个键的值中存储多个完整的文件。

进行文件存储时,存储文件的同时,如果只将文件的元数据存储至元数据库中,即使以键的形式存储文件,不管一个键的值中存储一个完整的文件,还是存储多个完整的文件,一旦元数据库中某一文件的元数据丢失,即便从相应键的值中读取到了元数据丢失的文件的数据,由于缺乏元数据信息,也无法获知读取到的数据是该元数据丢失了的文件的数据。

在本发明的一个实施例中,存储终端将获得的待存储文件的第一文件标识、待存储文件的数据量和待存储文件,按照预设的存储格式存储在目标键的值中,这样就算是元数据库存在元数据丢失的情况,也可以根据该存储格式,在键的值中确定出属于同一文件的数据,并且根据该存储格式,获得已存储文件的文件标识和数据量等元数据信息,进而恢复元数据库中存储的元数据。

具体地,存储终端确定了待存储数据要存储至的目标键之后,就可以获得该待存储数据按照预设的存储格式存储时,在该目标键的值中的偏移量等元数据信息,综合上述获得的第一文件标识和该待存储文件的数据量,可以确定出该待存储文件的待存储元数据,并将待存储元数据存储至预设的元数据库中。这样,在进行数据访问时,存储终端就可以根据元数据库中的元数据进行数据访问了。

在本发明的一种实现方式中,存储终端在成功存储了待存储文件后,再存储该待存储文件的元数据,保证了元数据库中的元数据的准确性,避免出现未成功存储待存储文件,却存储了该待存储文件的元数据,进而导致存储终端不能正确读取元数据库中存储的元数据,出现存储终端库崩溃等问题。

需要说明的是,上述存储待存储文件的步骤可以与存储待存储元数据的步骤同时执行,也可以在存储待存储元数据之前s102之后执行,甚至可以在存储待存储元数据之后执行,本申请并不对此进行限定。

应用图1所示实施例,存储终端在接收到针对待存储文件的存储请求后,获得待存储文件的第一文件标识和待存储文件的数据量,并确定用于存储待存储文件的目标键,根据目标键,获得待存储文件按照预设的存储格式存储时的待 存储元数据,按照预设的存储格式,将第一文件标识、数据量和待存储文件存储至目标键中,并将该待存储元数据存储至预设的元数据库中。这样,在元数据库存在元数据丢失的情况下,从一个键中读取数据时,就可以根据预设的存储格式确定出键的值中已存储文件的第一文件标识、数据量以及该已存储文件在该键的值中的偏移量,结合该键的名字,确定出该已存储文件的元数据,进而根据该元数据来恢复元数据库中的元数据,保证了元数据的恢复,避免了文件的损失。

参考图3,图3为本发明实施例提供的另一种文件存储方法的流程示意图,应用于存储终端,该方法中,步骤s104可以包括如下步骤:

s1041:按照第一关键字、文件标识长度和待存储文件的第一文件标识的顺序,将第一关键字、文件标识长度和待存储文件的第一文件标识存储至目标键的值中;

其中,第一关键字为针对文件标识的关键字,文件标识长度为第一文件标识占用的字节数。

在图2中,tag可以用于存储第一关键字,该第一关键字可以为tag_file_name,也可以用其他字符来表示第一关键字,本发明对此不进行限定。按照tlv格式存储了文件后,若存储终端读取到tag_file_name,则表示其后length中存储的为文件标识长度,假设,length中存储的为4,当读取得到length中存储的4时,表示其后value占用了4字节数,进而可以在value中读取到占用了4字节数的文件标识。

s1042:按照第二关键字、待存储文件的数据量和待存储文件的顺序,将第二关键字、数据量和待存储文件存储至目标键的值中;

其中,第二关键字为针对文件的关键字。

具体地,在图3中,tag还可以用于存储第二关键字,该第二关键字可以为tag_file_data,也可以用其他字符来表示第二关键字,本发明对此不进行限定。按照tlv格式存储了文件后,若存储终端读取到tag_file_data,则表示其后length中存储的为文件的数据量,假设,length中存储的为200,当读取得到length中存储的200时,表示其后value占用了200字节数,进而可以在value中读取到占用了200字节数的文件。

s1043:将待存储元数据存储至预设的元数据库中。

应用图3所示实施例,存储终端按照第一关键字、文件标识长度和待存储文件的第一文件标识的顺序,将第一关键字、文件标识长度和待存储文件的第一文件标识存储至目标键的值中,并按照第二关键字、待存储文件的数据量和待存储文件的顺序,将第二关键字、数据量和待存储文件存储至目标键的值中,将待存储元数据存储至预设的元数据库中。这样在元数据库存在元数据丢失的情况下,仍然可以根据按照预设的存储格式存储在键的值中的文件的标识和数据量,确定读取到的数据是属于哪一文件的,有效地避免了文件的损失。

参考图4,图4为本发明实施例提供的另一种文件存储方法的流程示意图,应用于存储终端,该方法可以包括如下步骤:

s105:在预设的元数据库存在元数据丢失的情况下,根据所有键的值中存储的第一关键字和第二关键字,更新该预设的元数据库。

在本发明的一个实施例中,每次元数据库更新了存储的元数据后,都获得一个第一校验值,在下一次存储元数据之前可以再次获得一个第二校验值,当第一校验值和第二校验值不同时,就可以说,元数据库存在元数据丢失。目前,可以根据crc(cyclicredundancycheck)校验算法或其他校验算法来获得校验值。

在本发明的一个实施例中,当确定元数据库存在元数据丢失时,可以根据所有键的值中存储的第一关键字和第二关键字来获得键的值中已存储文件的标识、数据量等元数据信息,进而根据获得的元数据信息,更新元数据库,保证了元数据库中元数据的恢复,避免了文件损失。

需要说明的是,步骤s105可以发生在步骤s101、s102、s103和s104中的任一步骤之前,也可以发生在步骤s101、s102、s103和s104中的任一步骤之后,还可以与步骤s101、s102、s103和s104中的任一步骤同时发生,本发明对此不进行限定。

应用图4所示实施例,存储终端在预设的元数据库存在元数据丢失的情况下,从各个键中读取数据时,根据预设的存储格式获得已存储文件的标识、已存储文件的数据量,根据所有键的值中存储的第一关键字和第二关键字,获得该已存储文件在该键的值中的偏移量,根据获得信息更新预设的元数据库,能 够有效地恢复元数据库中的元数据,避免了文件损失。

参考图5,图5为本发明实施例提供的另一种文件存储方法的流程示意图,应用于存储终端,该方法中,步骤s105可以包括如下步骤:

s1051:在预设的元数据库存在元数据丢失的情况下,获得元数据丢失的文件的第二文件标识;

在本发明的一个实施例中,元数据库中丢失的元数据可能仅仅只是一小部分,此时,若全部更新元数据库中存储的元数据,将会增加存储终端的工作量,并且元数据的恢复速度慢。若只更新元数据库中丢失的元数据,将会大大减少存储终端的工作量,并且元数据的恢复速度快。

具体地,当存储终端针对某一文件进行读取时,不能够读取到,则可以认为该文件在元数据库中的元数据丢失,进而获得该文件的第二文件标识。在本发明的一种实现方式中,该文件的第二文件标识可以从读取文件时的读取请求中获得。

s1052:根据丢失的文件的第二文件标识,从所有键的值中获得包含第二文件标识的目标数据段;

在本发明的一个实施例中,上述根据丢失的文件的第二文件标识,从所有键的值存储的文件中获得包含第二标识的目标数据段,可以包括:

s1、根据第二文件标识,获得包含第二文件标识的键k;

具体地,在所有键的值中读取第一关键字,进而根据第一关键字确定对应的文件标识长度,再根据文件标识长度确定出文件标识,从确定的文件标识中获得与第二文件标识相同的文件标识及该文件标识对应的键,这里所获得键为包含第二文件标识的键。

需要说明的是,上述键k可以是多个键,也可以仅仅为一个键,其中,上述键k为多个键的情况下,说明一个文件存储在多个键中。

s2、判断键k的值中第二文件标识之后是否存储有第一关键字,若为是,则执行步骤s3,若为否,则执行步骤s4;

具体地,存储一个文件的标识、数据量和该文件本身的顺序可以为:先存 储该文件的标识,再存储该文件的数据量和该文件本身,第一关键字为存储一个文件的数据段起始存储位置。如图6所示,图6为本发明实施例提供的一种文件存储排布示意图。从图6中可以知,名字为key1的键的值中存储了2个文件,file1后面存储了file2,而file2后面未存储文件,因此,与file1对应的第一关键字a(tag_file_name)和与file2对应的第一关键字b(tag_file_name)间的空间为存储file1的数据段,与file2对应的第一关键字b至名字为key1的键的值的末尾存储位置间的空间为存储file2的数据段。由上可知,只有知道文件标识后是否包含第一关键字,也就是说,只有知道该文件后是否存储了其他文件,才能知道如何确定存储一个文件的数据段,而每一文件都对应一个关键字,因此,需要判断第二文件标识之后是否存储有第一关键字。

s3、获得键k的值中第二文件标识之后与第二文件标识最近的第一关键字w1,并确定第一关键字w2和第一关键字w1间的数据段为目标数据段,其中,第一关键字w2为:键k的值中第二文件标识之前且与第二文件标识最近的第一关键字;

具体地,第一关键字为存储一个文件的数据段起始存储位置,一个文件标识对应一个第一关键字,两个相邻的第一关键字之间的空间为一个数据段,这里,文件标识对应第一关键字为:该文件标识之前且与该文件标识最近的第一关键字。在确定了目标数据段后,就可以根据该目标数据段中存储的第一关键字获得文件标识长度,再根据文件标识长度,确定文件标识;并且还可以根据该目标数据段中存储的第二关键字获得该文件的数据量,进而获得该文件。这里,文件标识和该文件的数据量为元数据,这样就可以根据在键的值中获得的元数据来恢复元数据库中的元数据了。

s4、确定第一关键字w2与键k的值的末尾存储位置之间的数据段为目标数据段。

具体地,在一个文件标识后不存在第一关键字,说明该文件后未存储文件,因此,可以确定该文件标识对应的第一关键字w2与该文件标识所在键k的值的末尾存储位置之间的数据段为目标数据段。

s1053:根据目标数据段中存储的丢失的文件的第二文件标识和丢失的文件的数据量,更新预设的元数据库。

应用图5所示实施例,存储终端只需要获得元数据丢失的文件的第二文件标识,根据丢失的文件的第二文件标识,从所有键的值中存储的文件中获得包含第二标识的目标数据段,最后根据目标数据段中存储的丢失的文件的第二文件标识和丢失的文件的数据量,更新预设的元数据库就可以了,减少了存储终端的工作量,提高了元数据库更新的效率。

参考图7,图7为本发明实施例提供的另一种文件存储方法的流程示意图,应用于存储终端,该方法中,步骤s103可以包括如下步骤:

s1031:获得目标键的值中存储的第一关键字和第二关键字;

在本发明的一个实施例中,按照tlv格式存储的文件中tag和length占用的字节数为固定大小的,因此只需目标键的值中存储的第一关键字和第二关键字(也就是tag),就可以根据第一关键字和第二关键字的个数以及与第一关键字对应的文件标识长度和第二关键字对应的数据量(也就是length),确定出该待存储文件在目标键的值中的偏移量。

s1032:根据所获得第一关键字和所获得第二关键字,计算待存储文件在目标键的值中的偏移量;

根据图6所示,假设,tag和length占用的字节数均为4kbytes,file1的标识长度为10kbytes,file1的数据量为100kbytes,file2的标识长度为12kbytes,file2的数据量为200kbytes,file1和file2的存储顺序为:先存储file1再存储file2,此时获得的file1和file2的元数据如表1所示。

表1

具体地,file1和file2在键的值中的偏移量通过以下方式计算得到:在向名字为key1的目标键的值中存储file1时,该目标键的值中为空,此时,可以确定,该目标键的值的起始存储位置至file1文件的文件头之间有1个第一关键字和1个第二关键字(此为预设的存储格式tlv自身携带的第一关键字和所获得第二关键 字),也就是有2个tag,对应的有2个length,从length中可以获得file1的标识长度为10kbytes、file1的数据量为100kbytes,因此,可以确定file1在key1的值中的偏移量为:2*4kbytes(2个tag占用的字节数)+2*4kbytes(2个length占用的字节数)+10kbytes(file1的标识占用的字节数)=8kbytes+8kbytes+10kbytes=26kbytes;另外,在向名字为key1的目标键的值中存储file2时,该目标键的值中存储了file1,可以获得1个第一关键字和1个第二关键字,另外还包含1个第一关键字和1个第二关键字(此为预设的存储格式tlv自身携带的第一关键字和所获得第二关键字),也就是有4个tag,对应的有4个length,从length中可以获得file1的标识长度为10kbytes、file1的数据量为100kbytes、file2的标识长度为12kbytes、file2的数据量为200kbytes,因此,可以确定file2在key1的值中的偏移量为:4*4kbytes(2个tag占用的字节数)+4*4kbytes(2个length占用的字节数)+10kbytes(file1的标识占用的字节数)+100kbytes(file1占用的字节数)+12kbytes(file2的标识占用的字节数)=16kbytes+16kbytes+10kbytes+100kbytes+12kbytes=154kbytes。

s1033:根据计算得到的偏移量,确定待存储文件的待存储元数据;

在本发明的一个实施例中,文件在键的值中的偏移量也是文件的元数据的一部分,以便于存储终端根据偏移量快速获得该文件的存储位置。

具体地,在获得了待存储文件在目标键的值中的偏移量后,结合第一文件标识和待存储文件的数据量确定出待存储文件的元数据。

应用图7所示实施例,存储终端获得目标键的值中存储的第一关键字和第二关键字,根据所获得第一关键字和所获得第二关键字,计算待存储文件在目标键的值中的偏移量,并根据计算得到的偏移量,确定待存储文件的待存储元数据。这里,根据目标键的值中存储的第一关键字和第二关键字计算文件的偏移量,进而确定待存储文件的待存储元数据,而不必一一统计待存储文件的存储位置与目标键的值的起始存储位置之间的数据量,来确定文件的偏移量,元数据的确定更为快速、方便。

参考图8,图8为本发明实施例提供的一种文件存储装置的结构示意图,应用于存储终端,该装置可以包括:存储请求接收模块801、信息确定模块802、元数据获得模块803和数据存储模块804;

其中,存储请求接收模块801,用于接收针对待存储文件的存储请求;

信息确定模块802,用于获得待存储文件的第一文件标识和待存储文件的数据量,并确定用于存储待存储文件的目标键;

元数据获得模块803,用于根据目标键,获得待存储文件按照预设的存储格式存储时的待存储元数据;

数据存储模块804,用于按照所述预设的存储格式,将所述第一文件标识、所述数据量和所述待存储文件存储至所述目标键的值中,并将所述待存储元数据存储至预设的元数据库中,其中,预设的元数据库,用于存储文件的元数据。

应用图8所示实施例,存储终端在接收到针对待存储文件的存储请求后,获得待存储文件的第一文件标识和待存储文件的数据量,并确定用于存储待存储文件的目标键,根据目标键,获得待存储文件按照预设的存储格式存储时的待存储元数据,按照预设的存储格式,将第一文件标识、数据量和待存储文件存储至目标键中,并将该待存储元数据存储至预设的元数据库中。这样,在元数据库存在元数据丢失的情况下,从一个键中读取数据时,就可以根据预设的存储格式确定出键的值中已存储文件的第一文件标识、数据量以及该已存储文件在该键的值中的偏移量,结合该键的名字,确定出该已存储文件的元数据,进而根据该元数据来恢复元数据库中的元数据,保证了元数据的恢复,避免文件的损失。

参考图9,图9为本发明实施例提供的另一种文件存储装置的结构示意图,应用于存储终端,该装置中,数据存储模块804可以包括:文件标识存储子模块8041和元数据存储子模块8042;

文件存储子模块8041,用于按照所述预设的存储格式,将所述第一文件标识、所述数据量和所述待存储文件存储至所述目标键的值中;

元数据存储子模块8042,用于将所述待存储元数据存储至预设的元数据库中;

其中,文件存储子模块8041,包括:文件标识存储单元8041a和文件存储单元8041b;

文件标识存储单元8041a,用于按照第一关键字、文件标识长度和第一文件 标识的顺序,将第一关键字、文件标识长度和第一文件标识存储至目标键的值中,其中,第一关键字为针对文件标识的关键字,文件标识长度为第一文件标识占用的字节数;

文件存储单元8041b,用于按照第二关键字、数据量和待存储文件的顺序,将第二关键字、数据量和待存储文件存储至目标键的值中,其中,第二关键字为针对文件的关键字。

应用图9所示实施例,存储终端按照第一关键字、文件标识长度和待存储文件的第一文件标识的顺序,将第一关键字、文件标识长度和待存储文件的第一文件标识存储至目标键的值中,并按照第二关键字、待存储文件的数据量和待存储文件的顺序,将第二关键字、数据量和待存储文件存储至目标键的值中,将待存储元数据存储至预设的元数据库中。这样在元数据库存在元数据丢失的情况下,仍然可以根据按照预定存储格式存储在键的值中的文件的标识和数据量,确定读取到的数据是属于哪一文件的,有效地避免了文件的损失。

参考图10,图10为本发明实施例提供的另一种文件存储装置的结构示意图,应用于存储终端,该装置还可以包括:元数据库更新模块805;

这里,元数据库更新模块805,用于:

在预设的元数据库存在元数据丢失的情况下,根据所有键的值中存储的第一关键字和第二关键字,更新预设的元数据库。

应用图10所示实施例,存储终端在在预设的元数据库存在元数据丢失的情况下,从各个键中读取数据时,根据预设的存储格式获得已存储文件的标识、已存储文件的数据量,根据所有键的值中存储的第一关键字和第二关键字,确定各个已存储文件在各个键的值中的偏移量,根据获得信息更新预设的元数据库,能够有效地恢复元数据库中的元数据,避免了文件损失。

参考图11,图11为本发明实施例提供的另一种文件存储装置的结构示意图,应用于存储终端,该装置中,元数据库更新模块805可以包括:文件标识获得子模块8051、目标数据段确定子模块8052和元数据库更新子模块8053;

其中,文件标识获得子模块8051,用于在预设的元数据库存在元数据丢失的情况下,获得元数据丢失的文件的第二文件标识;

目标数据段确定子模块8052,用于根据第二文件标识,从所有键的值中获得包含第二文件标识的目标数据段;

元数据库更新子模块8053,用于根据目标数据段中存储的第二文件标识和数据量,更新预设的元数据库。

在本发明的一种实现方式中,上述目标数据段确定子模块8052可以包括:键获得单元、关键字判断单元、第一目标数据段确定单元和第二目标数据段确定单元(图11中未示出);

其中,键获得单元,用于根据第二文件标识,获得包含第二文件标识的键k;

关键字判断单元,用于判断键k的值中第二文件标识之后是否存储有第一关键字,若为是,则触发第一目标数据段确定单元,若为否,则触发第二目标数据段确定单元;

第一目标数据段确定单元,用于获得键k的值中第二文件标识之后与第二文件标识最近的第一关键字w1,并确定第一关键字w2和第一关键字w1间的数据段为目标数据段,其中,第一关键字w2为:键k的值中第二文件标识之前且与第二文件标识最近的第一关键字;

第二目标数据段确定单元,用于确定第一关键字w2与键k的值末尾存储位置间的数据段为目标数据段。

应用图11所示实施例,存储终端只需要获得元数据丢失的文件的第二文件标识,根据丢失的文件的第二文件标识,从所有键的值中存储的文件中获得包含第二标识的目标数据段,最后根据目标数据段中存储的丢失的文件的第二文件标识和丢失的文件的数据量,更新预设的元数据库就可以了,减少了存储终端的工作量,提高了元数据库更新的效率。

参考图12,图12为本发明实施例提供的另一种文件存储装置的结构示意图,应用于存储终端,该装置中,元数据获得模块803,可以包括:关键字获得子模块8031、偏移量计算子模块8032、元数据确定子模块8033;

其中,关键字获得子模块8031,用于获得所述目标键的值中存储的第一关键字和第二关键字;

偏移量计算子模块8032,用于根据所获得第一关键字和所获得第二关键字, 计算待存储文件在目标键的值中的偏移量;

元数据确定子模块8033,用于根据计算得到的偏移量,确定待存储文件的待存储元数据。

应用图12所示实施例,存储终端获得目标键的值中存储的第一关键字和第二关键字,根据所获得第一关键字和所获得第二关键字,计算待存储文件在目标键的值中的偏移量,并根据计算得到的偏移量,确定待存储文件的待存储元数据。这里,根据目标键的值中存储的第一关键字和第二关键字计算文件的偏移量,进而确定待存储文件的待存储元数据,而不必一一统计待存储文件的存储位置与目标键的值的起始存储位置之间的数据量,来确定文件的偏移量,元数据的确定更为快速、方便。

对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

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

本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:rom/ram、磁碟、光盘等。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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