一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种文件存储方法和文件读取方法与流程

2021-11-05 21:03:00 来源:中国专利 TAG:


1.本技术涉及数据存储技术领域,特别是涉及一种文件存储方法和文件读取方法。


背景技术:

2.随着计算机技术的快速发展,业务中产生的文件(例如,图片)的量级呈爆发式增长。为了方便文件的共享,以及提高对文件进行管理的效率,可以将文件存储在预设的存储介质(例如,闪存)中。


技术实现要素:

3.本技术实施例的目的在于提供一种文件存储方法和文件读取方法,能够降低数据的写入量,提高文件存储的效率,且提高存储介质的寿命。具体技术方案如下:
4.第一方面,为了达到上述目的,本技术实施例公开了一种文件存储方法,所述方法包括:
5.获取第一文件;
6.根据预设存储空间中上一次存储的文件的结束地址,将所述第一文件写入所述预设存储空间;
7.基于所述预设存储空间对应的多个树结构,记录所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址;
8.其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且所述预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于所述预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址。
9.可选的,所述根据预设存储空间中上一次存储的文件的结束地址,将所述第一文件写入所述预设存储空间,包括:
10.若预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,不大于所述预设存储空间当前的最大地址空间,则将所述第一文件写入上一次存储的文件之后;
11.若预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,大于所述预设存储空间当前的最大地址空间,则在所述预设存储空间的起始位置处写入所述第一文件。
12.可选的,所述多个树结构包括第一树结构和第二树结构,且所述第一树结构为记录上一次存储的文件的文件标识和起始地址的树结构;
13.所述基于所述预设存储空间对应的多个树结构,记录所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址,包括:
14.判断所述预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,是否大于所述预设存储空间当前的最大地址空间;
15.若所述预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,大于所述预设存储空间当前的最大地址空间,则基于所述第二树结构,记录所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址;
16.若所述预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,不大于所述预设存储空间当前的最大地址空间,则将所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址,记录在所述第一树结构中。
17.可选的,所述基于所述第二树结构,记录所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址,包括:
18.若当前所述第二树结构中记录有文件的文件标识和起始地址,则删除所述第二树结构中记录的数据,并将所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址,记录在删除数据后的第二树结构中。
19.可选的,所述预设存储空间包含:多个对所述预设存储空间所属的存储介质进行划分得到的存储块;
20.在所述根据预设存储空间中上一次存储的文件的结束地址,将所述第一文件写入所述预设存储空间之前,所述方法还包括:
21.若预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,大于所述预设存储空间当前的最大地址空间,则基于上一次存储的文件的结束地址与所述第一文件的大小的和值,以及所述预设存储空间当前的最大地址空间,从除所述预设存储空间包含的存储块以外的其他存储块中确定第一存储块;
22.其中,上一次存储的文件的结束地址与所述第一文件的大小的和值,不大于所述预设存储空间当前的最大地址空间与所述第一存储块的大小的和值;
23.在所述预设存储空间中添加所述第一存储块。
24.可选的,在所述从除所述预设存储空间包含的存储块以外的其他存储块中确定第一存储块之后,所述方法还包括:
25.基于所述预设存储空间当前的最大地址空间,确定所述第一存储块的空间地址。
26.可选的,所述方法还包括:
27.当需要缩减所述预设存储空间时,释放所述预设存储空间中的第二存储块。
28.可选的,所述第一文件的文件标识为所述第一文件的文件名的哈希值。
29.第二方面,为了达到上述目的,本技术实施例公开了一种文件读取方法,所述方法包括:
30.接收针对第二文件的文件读取请求;
31.基于预设存储空间对应的多个树结构和所述第二文件的文件标识,从所述预设存储空间中获取所述第二文件;
32.其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且所述预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于所述预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址。
33.可选的,所述基于预设存储空间对应的多个树结构和所述第二文件的文件标识,从所述预设存储空间中获取所述第二文件,包括:
34.在所述多个树结构中的第一树结构中,查询所述第二文件的文件标识对应的起始地址,作为第一起始地址;
35.若所述预设存储空间中所述第一起始地址处存在有效文件,且该有效文件的文件名与所述文件读取请求中携带的文件名一致,则确定该有效文件为第二文件。
36.可选的,所述方法还包括:
37.若所述预设存储空间中所述第一起始地址处不存在有效文件,或者,所述第一起始地址处的有效文件的文件名与所述文件读取请求中携带的文件名不一致,则在所述多个树结构中的第二树结构中,查询所述第二文件的文件标识对应的起始地址,作为第二起始地址;
38.若所述预设存储空间中所述第二起始地址处的有效文件的文件名,与所述文件读取请求中携带的文件名一致,则确定该有效文件为第二文件。
39.可选的,所述第一树结构为记录上一次存储的文件的文件标识和起始地址的树结构。
40.可选的,所述预设存储空间包含:多个对所述预设存储空间所属的存储介质进行划分得到的存储块;
41.在若所述预设存储空间中所述第一起始地址处存在有效文件,且该有效文件的文件名与所述文件读取请求中携带的文件名一致,则确定该有效文件为第二文件之前,所述方法还包括:
42.判断所述预设存储空间中是否存在所述第一起始地址对应的目标存储块;
43.若存在,则基于所述目标存储块中存储的数据,判断所述预设存储空间中所述第一起始地址处是否存在有效文件。
44.可选的,在所述基于预设存储空间对应的多个树结构和所述第二文件的文件标识,从所述预设存储空间中获取所述第二文件之前,所述方法还包括:
45.计算所述文件读取请求中携带的文件名的哈希值,得到所述第二文件的文件标识。
46.在本发明实施的另一方面,为了达到上述目的,本发明实施例还公开了一种存储设备,所述存储设备包括处理器、通信接口、存储器和通信总线,其中,所述处理器,所述通信接口,所述存储器通过所述通信总线完成相互间的通信;
47.所述存储器,用于存放计算机程序;
48.所述处理器,用于执行所述存储器上所存放的程序时,实现如上述任一所述的文件存储方法,或文件读取方法。
49.在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一所述的文件存储方法,或文件读取方法。
50.本技术实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的文件存储方法,或文件读取方法。
51.本技术实施例有益效果:
52.本技术实施例提供的文件存储方法,可以获取第一文件;根据预设存储空间中上一次存储的文件的结束地址,将第一文件写入预设存储空间;基于预设存储空间对应的多
个树结构,记录第一文件的文件标识,以及预设存储空间中第一文件的起始地址;其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址。
53.基于上述处理,能够结合多个树结构轮流记录文件的信息,即,当在预设存储空间中写满新文件时,可以使用另一个新的树结构记录文件的信息。后续,也就并不需要在每次写入新文件时,均对之前的整个树结构进行更新,而只需要在新的树结构中记录新文件的信息,进而,能够降低数据的写入量,提高文件存储的效率,且提高存储介质的寿命。
54.当然,实施本技术的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
55.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
56.图1为本技术实施例提供的一种文件存储方法的流程图;
57.图2为本技术实施例提供的另一种文件存储方法的流程图;
58.图3为本技术实施例提供的一种存储文件的示意图;
59.图4为本技术实施例提供的另一种文件存储方法的流程图;
60.图5为本技术实施例提供的一种对存储介质进行划分的示意图;
61.图6为本技术实施例提供的一种电子设备的结构示意图;
62.图7为本技术实施例提供的一种文件存储方法示例的流程图;
63.图8为本技术实施例提供的一种文件读取方法的流程图;
64.图9为本技术实施例提供的另一种文件读取方法的流程图;
65.图10为本技术实施例提供的一种文件读取方法示例的流程图;
66.图11为本技术实施例提供的一种文件处理的原理图;
67.图12为本技术实施例提供的一种文件存储装置的结构图;
68.图13为本技术实施例提供的一种文件读取装置的结构图;
69.图14为本技术实施例提供的一种存储设备的结构图。
具体实施方式
70.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员基于本技术所获得的所有其他实施例,都属于本技术保护的范围。
71.本技术实施例提供了一种文件存储方法,该方法可以应用于电子设备,该电子设备可以将文件存储在存储介质中。例如,该电子设备可以为包含存储介质的存储设备,或者,该电子设备也可以与包含存储介质的存储设备进行数据通信。示例性的,上述存储介质
可以为emmc(embedded multi media card,嵌入式存储卡)。
72.参见图1,图1为本技术实施例提供的一种文件存储方法的流程图,该方法可以包括以下步骤:
73.s101:获取第一文件。
74.s102:根据预设存储空间中上一次存储的文件的结束地址,将第一文件写入预设存储空间。
75.s103:基于预设存储空间对应的多个树结构,记录第一文件的文件标识,以及预设存储空间中第一文件的起始地址。
76.其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址。
77.本技术实施例提供的文件存储方法,能够结合多个树结构轮流记录文件的信息,即,当在预设存储空间中写满新文件时,可以使用另一个新的树结构记录文件的信息。后续,也就并不需要在每次写入新文件时,均对之前的整个树结构进行更新,而只需要在新的树结构中记录新文件的信息,进而,能够降低数据的写入量,提高文件存储的效率,且提高存储介质的寿命。
78.针对步骤s101,第一文件为当前需要存储的文件。第一文件可以为不同类型的文件,例如,第一文件可以为图片,或者,第一文件也可以为文档,但并不限于此。
79.一种实现方式中,第一文件为监控设备采集的抓拍图片,相应的,在采集到每一第一文件时,均可以将该第一文件存储在预设存储空间。
80.针对步骤s102,一种实现方式中,基于上一次存储的文件的结束地址,可以将第一文件写入上一次存储的文件之后,且与上一次存储的文件相邻,进而,能够提高预设存储空间的利用率。
81.一种实现方式中,在写入第一文件时,还可以将第一文件的文件大小写入预设存储空间。
82.针对步骤s103,第一文件的文件标识用于唯一性地标记该第一文件。在一个实施例中,第一文件的文件标识为第一文件的文件名的哈希值。
83.预设存储空间对应多个树结构,也就是说,可以基于多个树结构记录预设存储空间中存储的文件的信息(包括文件标识和起始地址)。
84.预设存储空间的最大地址空间为预设存储空间的结束位置对应的地址,预设存储空间的结束位置对应的地址与开始位置对应的地址之间的差值,也就是预设存储空间的空间大小。
85.若当前基于其中一个树结构记录文件的信息,且上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于预设存储空间当前的最大地址空间,即,上一次存储的文件之后的存储空间不足以存储新的文件。此时,若需要存储新的文件,则可以基于其他树结构记录新的文件的信息,相应的,也就不需要对之前的树结构进行更新。
86.一种实现方式中,树结构可以为b树,或者,也可以为二叉树,但并不限于此。例如,可以将第一文件的文件标识作为key(关键词),将第一文件的起始地址作为对应的value
(值),记录在树结构中。
87.在一个实施例中,还可以将第一文件的文件大小记录在树结构中。
88.在一个实施例中,参见图2,在图1的基础上,上述步骤s102可以包括以下步骤:
89.s1021:若预设存储空间中上一次存储的文件的结束地址与第一文件的大小的和值,不大于预设存储空间当前的最大地址空间,则将第一文件写入上一次存储的文件之后。
90.s1022:若预设存储空间中上一次存储的文件的结束地址与第一文件的大小的和值,大于预设存储空间当前的最大地址空间,则在预设存储空间的起始位置处写入第一文件。
91.在本技术实施例中,若上一次存储的文件的结束地址与第一文件的大小的和值,不大于预设存储空间当前的最大地址空间,表明上一次存储的文件之后的存储空间足以存储第一文件。此时,则可以按照预设存储空间中地址的顺序,将第一文件写入上一次存储的文件之后。
92.相应的,若上一次存储的文件的结束地址与第一文件的大小的和值,大于预设存储空间当前的最大地址空间,表明上一次存储的文件之后的存储空间不足以存储第一文件。此时,则可以从预设存储空间的起始位置处,存储新的文件(即第一文件),即,将第一文件写入预设存储空间的起始位置处。示例性地,可以直接用第一文件覆盖之前已存储的文件。
93.基于此,当新的文件从头覆盖历史文件时,未被覆盖的文件仍可以通过其他树结构进行索引得到,能够保证文件的平滑覆盖。
94.在一个实施例中,预设存储空间对应的多个树结构包括第一树结构和第二树结构,且第一树结构为记录上一次存储的文件的文件标识和起始地址的树结构。
95.参见图3,图3为本技术实施例提供的一种存储文件的示意图。
96.图3中,各个灰色块表示最新的已存储的文件(即图片)。各图片按顺序连续存储,中间无空隙。key

addr表示存储的图片的起始地址。已存储的文件之后的空白块表示待覆盖的空间,待覆盖的空间可以为空白的空间(即未存储图片的空间),也可以为已存储旧文件(即在灰色块表示的文件之前已存储的文件)的空间。
97.相应的,参见图4,在图1的基础上,上述步骤s103可以包括以下步骤;
98.s1031:判断预设存储空间中上一次存储的文件的结束地址与第一文件的大小的和值,是否大于预设存储空间当前的最大地址空间。
99.s1032:若预设存储空间中上一次存储的文件的结束地址与第一文件的大小的和值,大于预设存储空间当前的最大地址空间,则基于第二树结构,记录第一文件的文件标识,以及预设存储空间中第一文件的起始地址。
100.s1033:若预设存储空间中上一次存储的文件的结束地址与第一文件的大小的和值,不大于预设存储空间当前的最大地址空间,则将第一文件的文件标识,以及预设存储空间中第一文件的起始地址,记录在第一树结构中。
101.在本技术实施例中,若上一次存储的文件的结束地址与第一文件的大小的和值,不大于预设存储空间当前的最大地址空间,则将第一文件的文件标识和的起始地址,记录在上一次存储文件时使用的树结构(即第一树结构)中。
102.若上一次存储的文件的结束地址与第一文件的大小的和值,大于预设存储空间当
前的最大地址空间,此时,可以基于新的树结构(即第二树结构),第一文件的文件标识和起始地址。
103.基于上述处理,使得当前使用的树结构中记录了最新存储的文件的信息,且能够保证第一树结构和第二树结构中,记录了预设存储空间中存储的所有文件的信息。
104.在一个实施例中,上述步骤s1032可以包括以下步骤:
105.若当前第二树结构中记录有文件的文件标识和起始地址,则删除第二树结构中记录的数据,并将第一文件的文件标识,以及预设存储空间中第一文件的起始地址,记录在删除数据后的第二树结构中。
106.在本技术实施例中,若上一次基于第一树结构记录文件的信息,且本次需要在第二树结构中记录第一文件的信息,则可以确定当前第二树结构中是否已记录有文件的信息。
107.若当前第二树结构中记录有文件的信息,表明在使用第一树结构记录文件的信息之前,已经使用第二树结构中记录了文件的信息,且第二树结构中记录的信息对应的文件,已被第一树结构中记录的信息对应的文件覆盖。也就是说,第二树结构中记录的信息已无效,此时,若要再次使用第二树结构记录文件的信息,则可以直接删除第二树结构中记录的所有信息。进而,则可以在删除数据后的第二树结构中记录第一文件的信息。
108.在一个实施例中,预设存储空间包含:多个对预设存储空间所属的存储介质进行划分得到的存储块。相应的,在上述步骤s102之前,该方法还可以包括以下步骤:
109.若预设存储空间中上一次存储的文件的结束地址与第一文件的大小的和值,大于预设存储空间当前的最大地址空间,则基于上一次存储的文件的结束地址与第一文件的大小的和值,以及预设存储空间当前的最大地址空间,从除预设存储空间包含的存储块以外的其他存储块中确定第一存储块;在预设存储空间中添加第一存储块。
110.其中,上一次存储的文件的结束地址与第一文件的大小的和值,不大于预设存储空间当前的最大地址空间与第一存储块的大小的和值。
111.在本技术实施例中,若上一次存储的文件的结束地址与第一文件的大小的和值,大于预设存储空间当前的最大地址空间,即,上一次存储的文件之后的存储空间不足以存储第一文件,此时,还可以对预设存储空间进行扩容。即,将第一存储块添加至预设存储空间。也就是说,扩容后,预设存储空间中上一次存储的文件之后的存储空间足以存储第一文件。
112.一种实现方式中,可以检测预设存储空间所属的存储介质中是否存在可扩充空间(即是否存在其他的存储块)。若存在,则可以增大预设存储空间。
113.在一个实施例中,在确定第一存储块后,基于预设存储空间当前的最大地址空间,确定第一存储块的空间地址。
114.在本技术实施例中,当基于存储块对预设存储空间进行扩容时,扩容前预设存储空间的最大地址空间,也就是所要添加的新存储块的起始地址。一个存储块的空间地址包括:从该存储块的起始地址至结束地址之间的所有地址。可以理解的是,预设存储空间中所存储的文件的起始地址和结束地址,也就是该文件在存储块中对应的空间地址。
115.例如,电子设备可以记录每一存储块与空间地址的对应关系。基于此,能够确定预设存储空间中每一存储块的空间地址,进而,可以基于空间地址快速索引到对应的存储块。
116.在一个实施例中,当需要缩减预设存储空间时,释放预设存储空间中的第二存储块。即,电子设备根据业务需求减小预设存储空间。
117.一种实现方式中,可以按照存储块的空间地址从大到小的顺序,优先释放空间地址最大的存储块。
118.基于上述处理,能够实现预设存储空间的扩容和缩减,实现存储介质中的空间的共享,提高存储介质的空间利用率。
119.一种实现方式中,可以对存储介质中的存储空间进行划分,得到多个存储块,并为各存储块分别编号。相应的,在存储第一文件时,若上一次存储的文件的结束地址与第一文件的大小的和值,大于预设存储空间当前的最大地址空间,则可以获取新的存储块,添加至预设存储空间中,以增大预设存储空间。
120.参见图5,图5为本技术实施例提供的一种对存储介质进行划分的示意图。
121.图5中存储介质的存储空间总大小为10g,可以划分为40个存储块,每一个存储块的大小为256m。
122.在一个实施例中,针对存储的文件为监控设备采集的抓拍图片的场景。电子设备包含的模块从下至上为:块管理模块、地址抽象单元和抓拍图索引模块。参见图6,图6为本技术实施例提供的一种电子设备的结构示意图。
123.块管理模块可以将存储介质的存储空间划分为多个存储块。具体的,为上层的模块提供存储块的管理功能,包括存储块的申请和释放。存储块申请后即被占用,释放后的存储块可以被重新申请。
124.地址抽象单元可以将存储块重新排布,抽象出统一的地址(即确定存储块的空间地址)。具体的,对上层的模块提供统一的地址;可以向下层的块管理模块申请存储块,也可以向块管理模块请求释放存储块。
125.抓拍图索引模块用于完成图片的存储、索引等管理。具体的,通过调用地址抽象单元的接口来完成图片的存储和读取。通过b树对图片的信息进行索引管理。对图片进行无空隙的连续存储,最大程度提高存储空间的利用率。基于多个b树(例如,两个b树)的架构对图片进行循环覆盖方式的存储。
126.图6中,块管理模块可以将存储介质的存储空间划分为多个存储块(即,块1、块2

块n),得到块管理信息。块管理信息可以包括每个存储块的编号。
127.地址抽象单元,可以从块管理模块申请新的存储块,即将新的存储块添加至预设存储空间;也可以释放存储块,即,从预设存储空间中删除存储块。单元1(块k)、单元2(块m)

单元t(块s),表示当前预设存储空间包含的存储块。存储单元管理信息包括:预设存储空间包含的各个存储块对应的地址。
128.预设存储空间中各个灰色块表示最新的已存储的图片。各图片按顺序连续存储,中间无空隙。已存储的图片之后的空白块表示待覆盖的空间,待覆盖的空间可以为空白的空间(即未存储图片的空间),也可以为已存储旧图片(即在灰色块表示的图片之前已存储的图片)的空间。
129.抓拍图索引模块,可以基于多个b树(即b树1和b树2),记录预设存储空间中存储的图片的信息(包括图片的文件标识和起始地址)。记录的上述信息也就是b树管理信息。
130.参见图7,图7为本技术实施例提供的一种文件存储方法示例的流程图。
131.准备待写入的数据,即,获取待存储文件。
132.然后,可以调用统一写数据接口,以写入待存储文件。
133.另外,针对待存储文件,可以判断是否写入成功。
134.若未写入成功,则可以返回错误。
135.若写入成功,则可以返回数据地址存入b树:即将待存储文件的信息(包括文件标识和起始地址)记录在b树中。
136.另外,针对待存储文件的信息,可以判断是否存入成功。
137.若未存入成功,则可以返回错误。
138.具体的,写入待存储文件,包括:
139.计算数据写入后的结束地址:即,上一次存储的文件的起始地址与待存储文件的大小的和值,称为第一和值。
140.判断是否超出空间限制:判断第一和值是否大于预设存储空间的最大地址空间。
141.若不大于,则在上一次存储的文件之后,写入待存储文件。
142.若大于,则地址偏移到起始位置(循环覆盖):即在预设存储空间的起始位置处写入第一文件。
143.然后,返回起始地址:即记录本次写入的文件的结束地址。
144.具体的,返回数据地址存入b树,包括:
145.将文件名散列值作key,地址作value:计算待存储文件的文件名的哈希值,作为key(key=hash(filename)),将待存储文件的起始地址作为value(value=dataaddress)。
146.判断当前树b1是否已满:当前树b1为记录上一次存储的文件的文件标识和起始地址的树结构,即,判断上一次存储的文件的结束地址与待存储文件的大小的和值,是否大于预设存储空间当前的最大地址空间。若大于,表示当前树b1已满,若不大于,表示当前树b1未满。
147.若当前树b1已满,则清空另一颗树b2,切换b2为当前树,并写key及value到当前树。
148.若当前树b1未满,则写key及value到当前树。
149.然后,针对key及value,可以判断是否写入成功,若未成功,则可以返回错误。
150.与上述文件存储方法相对应,本技术实施例还提供了一种文件读取方法,参见图8,图8为本技术实施例提供的一种文件读取方法的流程图,该方法可以包括以下步骤:
151.s801:接收针对第二文件的文件读取请求。
152.s802:基于预设存储空间对应的多个树结构和第二文件的文件标识,从预设存储空间中获取第二文件。
153.其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址。
154.本技术实施例提供的文件读取方法,能够结合多个树结构轮流记录文件的信息,即,当在预设存储空间中写满新文件时,可以使用另一个新的树结构记录文件的信息。后续,也就并不需要在每次写入新文件时,均对之前的整个树结构进行更新,而只需要在新的
树结构中记录新文件的信息,进而,能够降低数据的写入量,提高文件存储的效率,且提高存储介质的寿命。
155.在一个实施例中,在上述步骤s802之前,该方法还可以包括以下步骤:
156.计算文件读取请求中携带的文件名的哈希值,得到第二文件的文件标识。
157.在一个实施例中,在图8的基础上,参见图9,上述步骤s802可以包括以下步骤:
158.s8021:在多个树结构中的第一树结构中,查询第二文件的文件标识对应的起始地址,作为第一起始地址。
159.s8022:若预设存储空间中第一起始地址处存在有效文件,且该有效文件的文件名与文件读取请求中携带的文件名一致,则确定该有效文件为第二文件。
160.在本技术实施例中,由于预设存储空间对应多个树结构,因此,当接收到文件读取请求时,可以选择一个树结构(即第一树结构),并查询对应的起始地址。
161.在一个实施例中,文件读取请求中可以携带有第二文件的文件名。进而,可以计算第二文件的文件名的哈希值,得到第二文件的文件标识。
162.进而,可以在第一树结构中查询第二文件的文件标识对应的起始地址(即第一起始地址),然后,可以检测第一起始地址处是否存在有效文件。
163.第一起始地址处存在有效文件,表明预设存储空间中存在以第一起始地址为起始地址的文件,且该文件的文件大小与第一树结构中记录的文件大小一致;或者,表明预设存储空间中存在以第一起始地址为起始地址的文件,且该文件的文件大小与第一起始地址处记录的文件大小一致。
164.若该有效文件的文件名与文件读取请求中携带的文件名一致,表明该有效文件为第二文件。
165.在一个实施例中,预设存储空间包含:多个对预设存储空间所属的存储介质进行划分得到的存储块。相应的,在上述步骤s8022之前,该方法还可以包括以下步骤:判断预设存储空间中是否存在第一起始地址对应的目标存储块;若存在,则基于目标存储块中存储的数据,判断预设存储空间中第一起始地址处是否存在有效文件。
166.如前述实施例的介绍,可以基于存储块对预设存储空间进行扩容和缩减,且可以确定预设存储空间中每一存储块的空间地址。因此,在确定出第一起始地址后,判断预设存储空间中是否存在第一起始地址对应的目标存储块,即,判断预设存储空间中是否存在一个存储块,且该存储块的空间地址包含第一起始地址。若存在该存储块(即目标存储块),表明目标存储块中可能存储了第二文件。
167.进而,基于目标存储块中存储的数据,判断预设存储空间中第一起始地址处是否存在有效文件。也就是,基于目标存储块中第一起始地址处存储的数据,判断是否存在以第一起始地址为起始地址的文件,且该文件的文件大小与第一树结构中记录的文件大小一致。若一致,表明预设存储空间中第一起始地址处存在有效文件,否则,表明预设存储空间中第一起始地址处不存在有效文件。
168.另外,若不存在目标存储块,可以输出错误,表示文件读取失败。
169.在一个实施例中,参见图9,上述方法还可以包括:
170.s8023:若预设存储空间中第一起始地址处不存在有效文件,或者,第一起始地址处的有效文件的文件名与文件读取请求中携带的文件名不一致,则在多个树结构中的第二
树结构中,查询第二文件的文件标识对应的起始地址,作为第二起始地址。
171.s8024:若预设存储空间中第二起始地址处的有效文件的文件名,与文件读取请求中携带的文件名一致,则确定该有效文件为第二文件。
172.在本技术实施例中,基于哈希处理,可能会导致不同的文件名对应的哈希值相同,进而,会导致基于第一树结构获取的文件名与文件读取请求中携带的文件名不一致。
173.另外,若第一起始地址处不存在有效文件,即,第一树结构中记录的第一起始地址已无效,表明第一树结构中记录的第一起始地址对应的文件名所表示的文件已被覆盖。此时,则可以进一步查询第二树结构,以获取第二文件。
174.即,可以在第二树结构中查询第二文件的文件标识对应的起始地址(即第二起始地址)。并检测第二起始地址处是否存在有效文件。
175.若存在,且该有效文件的文件名与文件读取请求中携带的文件名一致,表明该有效文件为第二文件。
176.在一个实施例中,为了提高文件读取的效率,第一树结构为记录上一次存储的文件的文件标识和起始地址的树结构。
177.在本技术实施例中,第一树结构为记录上一次存储的文件的文件标识和起始地址的树结构,即,第一树结构中记录的为预设存储空间中最小存储的文件的信息。而文件读取请求所要读取的第二文件通常为最新的文件,因此,可以优先基于第一树结构进行读取,进而,能够提高文件读取的效率。
178.参见图10,图10为本技术实施例提供的一种文件读取方法示例的流程图。
179.根据文件名计算hash值:即计算文件读取请求中携带的第二文件的文件名的哈希值(即文件标识)。
180.通过hash值到当前b树中查找:当前b树即记录上一次存储的文件的文件标识和起始地址的树结构。即,在当前b树中查询第二文件的文件标识对应的第一起始地址。
181.判断是否查找成功:判断第一起始地址处是否存在有效文件,若存在,则查找成功,若不存在,则查找失败。
182.若查找成功,则读取数据:即获取第一起始地址处的有效文件的文件名。并判断获取的文件名与文件读取请求中携带的文件名是否一致,若不一致,则到另一颗b树中查找。若一致,则输出数据,即,返回该有效文件。若查找失败,则到另一颗b树中查找。
183.在另一颗b树中查找时,也可以判断是否查找成功。
184.若查找成功,判断获取的文件名与文件读取请求中携带的文件名是否一致,若不一致,则输出错误;若一致,则输出数据。若查找失败,则输出错误。
185.参见图11,图11为本技术实施例提供的一种文件处理的原理图。
186.输入虚拟地址和数据:针对文件存储,即,获取待存储的第一文件和上一次存储的文件的结束地址;针对文件读取,即,获取待读取的第二文件的文件名的哈希值在树结构中对应的起始地址。
187.将地址转换为单元号:单元号表示预设存储空间包含的各存储块的标号。针对文件存储,根据预设的单元号与地址的关系,确定上一次存储的文件的结束地址与第一文件的大小的和值对应的单元号。针对文件读取,根据预设的单元号与地址的关系,确定第二文件的文件名的哈希值在树结构中对应的起始地址对应的单元号。
188.进而,可以判断单元号是否映射到有效存储块:即,判断单元号是否存在对应的已申请的存储块。若存在,确定映射到有效存储块;若不存在,确定未映射到有效存储块。
189.若映射到有效存储块,则可以在有效存储块中进行读/写操作。
190.若未映射到有效存储块,判断当前的请求为文件读取请求还是文件写入请求。
191.若为文件读取请求,则返回错误。
192.若为文件写入请求,则向底层块模块申请足够数量的块:即,在预设存储空间所属存储介质中存在可扩充空间的情况下,申请新的存储块,以增大预设存储空间。
193.进而,可以建立单元和块的映射关系:即,确定获取的上述单元号与新申请的存储块之间存在映射关系。
194.基于相同的发明构思,本技术实施例还提供了一种文件存储装置,参见图12,图12为本技术实施例提供的一种文件存储装置的结构图,该装置可以包括:
195.第一文件获取模块1201,用于获取第一文件;
196.第一文件写入模块1202,用于根据预设存储空间中上一次存储的文件的结束地址,将所述第一文件写入所述预设存储空间;
197.记录模块1203,用于基于所述预设存储空间对应的多个树结构,记录所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址;
198.其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且所述预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于所述预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址。
199.可选的,所述第一文件写入模块1202,具体用于若预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,不大于所述预设存储空间当前的最大地址空间,则将所述第一文件写入上一次存储的文件之后;
200.若预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,大于所述预设存储空间当前的最大地址空间,则在所述预设存储空间的起始位置处写入所述第一文件。
201.可选的,所述多个树结构包括第一树结构和第二树结构,且所述第一树结构为记录上一次存储的文件的文件标识和起始地址的树结构;
202.所述记录模块1203,包括:
203.判断子模块,用于判断所述预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,是否大于所述预设存储空间当前的最大地址空间;
204.第一记录子模块,用于若所述预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,大于所述预设存储空间当前的最大地址空间,则基于所述第二树结构,记录所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址;
205.第二记录子模块,用于若所述预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,不大于所述预设存储空间当前的最大地址空间,则将所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址,记录在所述第一树结构中。
206.可选的,所述第一记录子模块,具体用于若当前所述第二树结构中记录有文件的文件标识和起始地址,则删除所述第二树结构中记录的数据,并将所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址,记录在删除数据后的第二树结构中。
207.可选的,所述装置还包括:
208.第一存储块确定模块,用于在所述根据预设存储空间中上一次存储的文件的结束地址,将所述第一文件写入所述预设存储空间之前,若预设存储空间中上一次存储的文件的结束地址与所述第一文件的大小的和值,大于所述预设存储空间当前的最大地址空间,则基于上一次存储的文件的结束地址与所述第一文件的大小的和值,以及所述预设存储空间当前的最大地址空间,从除所述预设存储空间包含的存储块以外的其他存储块中确定第一存储块;
209.其中,上一次存储的文件的结束地址与所述第一文件的大小的和值,不大于所述预设存储空间当前的最大地址空间与所述第一存储块的大小的和值;
210.添加模块,用于在所述预设存储空间中添加所述第一存储块。
211.可选的,所述装置还包括:
212.空间地址确定模块,用于在所述从除所述预设存储空间包含的存储块以外的其他存储块中确定第一存储块之后,基于所述预设存储空间当前的最大地址空间,确定所述第一存储块的空间地址。
213.可选的,所述装置还包括:
214.释放模块,用于当需要缩减所述预设存储空间时,释放所述预设存储空间中的第二存储块。
215.可选的,所述第一文件的文件标识为所述第一文件的文件名的哈希值。
216.基于相同的发明构思,本技术实施例还提供了一种文件存储装置,参见图13,图13为本技术实施例提供的一种文件读取装置的结构图,该装置可以包括:
217.文件读取请求获取模块1301,用于接收针对第二文件的文件读取请求;
218.第二文件获取模块1302,用于基于预设存储空间对应的多个树结构和所述第二文件的文件标识,从所述预设存储空间中获取所述第二文件;
219.其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且所述预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于所述预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址。
220.可选的,所述第二文件获取模块1302,包括:
221.查询子模块,用于在所述多个树结构中的第一树结构中,查询所述第二文件的文件标识对应的起始地址,作为第一起始地址;
222.确定子模块,用于若所述预设存储空间中所述第一起始地址处存在有效文件,且该有效文件的文件名与所述文件读取请求中携带的文件名一致,则确定该有效文件为第二文件。
223.可选的,所述装置还包括:
224.查询模块,用于若所述预设存储空间中所述第一起始地址处不存在有效文件,或
者,所述第一起始地址处的有效文件的文件名与所述文件读取请求中携带的文件名不一致,则在所述多个树结构中的第二树结构中,查询所述第二文件的文件标识对应的起始地址,作为第二起始地址;
225.确定模块,用于若所述预设存储空间中所述第二起始地址处的有效文件的文件名,与所述文件读取请求中携带的文件名一致,则确定该有效文件为第二文件。
226.可选的,所述第一树结构为记录上一次存储的文件的文件标识和起始地址的树结构。
227.可选的,所述预设存储空间包含:多个对所述预设存储空间所属的存储介质进行划分得到的存储块;
228.所述装置还包括:
229.判断模块,用于在若所述预设存储空间中所述第一起始地址处存在有效文件,且该有效文件的文件名与所述文件读取请求中携带的文件名一致,则确定该有效文件为第二文件之前,判断所述预设存储空间中是否存在所述第一起始地址对应的目标存储块;若存在,则基于所述目标存储块中存储的数据,判断所述预设存储空间中所述第一起始地址处是否存在有效文件。
230.可选的,所述装置还包括:
231.计算模块,用于在所述基于预设存储空间对应的多个树结构和所述第二文件的文件标识,从所述预设存储空间中获取所述第二文件之前,计算所述文件读取请求中携带的文件名的哈希值,得到所述第二文件的文件标识。
232.本技术实施例还提供了一种存储设备,如图14所示,包括处理器1401、通信接口1402、存储器1403和通信总线1404,其中,处理器1401,通信接口1402,存储器1403通过通信总线1404完成相互间的通信,
233.存储器1403,用于存放计算机程序;
234.处理器1401,用于执行存储器1403上所存放的程序时,实现如下步骤:
235.获取第一文件;根据预设存储空间中上一次存储的文件的结束地址,将所述第一文件写入所述预设存储空间;基于所述预设存储空间对应的多个树结构,记录所述第一文件的文件标识,以及所述预设存储空间中所述第一文件的起始地址;其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且所述预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于所述预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址;
236.或,
237.接收针对第二文件的文件读取请求;基于预设存储空间对应的多个树结构和所述第二文件的文件标识,从所述预设存储空间中获取所述第二文件;其中,任一树结构用于在上一次基于其他树结构记录文件的文件标识和起始地址,且所述预设存储空间中上一次存储的文件的结束地址与当前的待存储文件的大小的和值,大于所述预设存储空间当前的最大地址空间的情况下,记录当前的待存储文件的文件标识和起始地址。
238.上述存储设备提到的通信总线可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便
于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
239.通信接口用于上述存储设备与其他设备之间的通信。
240.存储器可以包括随机存取存储器(random access memory,ram),也可以包括非易失性存储器(non

volatile memory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
241.上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field

programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
242.在本技术提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一文件存储方法,或文件读取方法的步骤。
243.在本技术提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一文件存储方法,或文件读取方法。
244.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
245.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
246.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、存储设备、计算机可读存储介质以及计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
247.以上所述仅为本技术的较佳实施例,并非用于限定本技术的保护范围。凡在本申
请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本技术的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献