一种适用于云存储的文件操作方法与流程

文档序号:12946899阅读:234来源:国知局
一种适用于云存储的文件操作方法与流程
本发明属于文件读写操作
技术领域
,具体涉及一种适用于云存储的文件操作方法。
背景技术
:传统的文件系统,其最小分配颗粒通常较小,例如,为512字节、1k、2k、4k、8k、16k和32k等,其中,最常见的为4k,以典型值4k为例,即:将存储硬盘以4k为单元切分为若干个存储块。其存在的主要不足为:经常发生存储的某个文件的文件碎片数量大,由此导致文件读取效率低。为方便理解传统文件系统的不足,举例如下:(1)假设对于硬盘d,初始为空;在初始向硬盘存入数据时,基本原则为:保证文件连续存储,从而提高文件读取效率。因此,假设向硬盘d中存入了100个文件大小均为100k的文件,所以,第1个文件连续占用了第1个存储块到第25个存储块;第2个文件连续占用了第26个存储块到第50个存储块;第3个文件连续占用了第51个存储块到第100个存储块,依此类推,硬盘d的前2500个连续存储块被存入数据。(2)后续过程中,发生文件删除操作,假设第1个文件、第3个文件、第5个文件…第99个文件被删除,此时,硬盘d出现的多个分散布置的空存储块;(3)某一时刻,如果需要向硬盘d中写入大小为1000k的文件时,文件系统只能将1000k的文件切分为10个文件单元,每个文件单元存储到各个空存储块中。可见,1000k的文件由10个文件碎片组成。也就是说,对于传统的文件系统,经常出现大量的文件碎片,一方面,在写入数据时,需要记录每个文件碎片的位置,占用大量的资源;另一方面,在读取文件时,需要分散读取各个文件碎片,明显具有文件读取效率低的不足。因此,如何有效解决传统文件系统所具有的上述不足,提高文件读写效率,是目前迫切的事情。技术实现要素:针对现有技术存在的缺陷,本发明提供一种适用于云存储的文件操作方法,可有效解决上述问题。本发明采用的技术方案如下:本发明提供一种适用于云存储的文件操作方法,包括以下步骤:步骤1,配置x类容器,分别记为:容器r1、容器r2…容器rx;x为自然数;设t1<t2<…<tx;则:容器r1所存储的每个文件的容量满足以下要求:0<文件容量≤t1;容器r2所存储的每个文件的容量满足以下要求:t1<文件容量≤t2;容器r3所存储的每个文件的容量满足以下要求:t2<文件容量≤t3,依此类推,容器rx所存储的每个文件的容量满足以下要求:tx-1<文件容量≤tx;步骤2,向磁盘管理空间申请多个容量均为q的初始连续存储空间,每一个连续存储空间对应每类容器的初始分配单元;其中,将容器r1、容器r2…容器rx分别对应的初始连续存储空间记为:连续存储空间w1、连续存储空间w2…连续存储空间wx;每类容器管理的最小空间单位为q;步骤3,创建容器管理单元,所述容器管理单元用于采用第一分配表的方式记录每个容器与对应的连续存储空间的对应关系;对于任意的容器ri,i∈(1、2…x),将其对应的连续存储空间wi划分为容量为ti的若干个连续存储数据块,余数部分用于保留空间;步骤4,创建容器内空间管理单元,所述空间管理单元用于采用第二分配表的方式记录容器内部存储空间的分配情况,具体的,所述第二分配表记录每类容器内部的可用连续存储数据块数量以及容器内部可用连续存储数据块的位置;步骤5,当接收到文件写入请求时,首先获得文件容量值,假设文件容量值为t0,判断文件容量值t0是否超过tx,如果没有超过,则执行步骤6-步骤8,并结束流程;如果超过,则执行步骤9,并结束流程;步骤6,在x类容器中,获得与文件容量值t0对应的容器rj;其中,j∈(1、2…x);步骤7,查找所述容器内空间管理单元,判断容器rj是否还存在可用连续存储数据块,如果存在,根据容器rj的第二分配表,获得容器rj的可用连续存储数据块的位置;将容器rj的某个可用连续存储数据块分配给文件容量值为t0的文件,将文件容量值为t0的文件写入到容器rj的某个可用连续存储数据块中;由于容器rj的可用连续存储数据块的容量为tj,tj大于等于t0,因此,文件容量值为t0的文件可连续存储在容器rj的可用连续存储数据块中,实现文件的连续存储;如果不存在,由容器管理单元向磁盘管理空间新申请容量为q的连续存储空间,更新所述第一分配表;然后,重新执行步骤7;步骤8,更新所述第二分配表;步骤9,计算t0除以tx,假设商数为a,余数为b;以tx为切分单位,将文件容量值为t0的文件自后向前或自前向后切分,因此,共得到a个容量为tx的文件单元,以及文件容量为b的剩余文件部分;对于a个容量为tx的文件单元,将每个文件单元分别写入到容器rx的某个可用连续存储数据块中,并更新第二分配表;计算a个容量为tx的文件单元的索引值,每个文件单元的索引值用于记录该文件单元的存储位置;a个索引值对齐后容量值为c;c+b小于tx,按步骤6-步骤8的方法,将容量值为c+b的索引值和剩余文件部分存储到与其最接近且大于等于c+b的容器中;步骤10,此外,预建立文件目录;所述文件目录用于存储文件名称、文件容量以及文件存储位置的对应关系;因此,在执行完步骤8或步骤9后,更新所述文件目录;其中,对于步骤8,文件存储位置为文件所存储的容器中对应的连续存储数据块的位置;对于步骤9,文件存储位置为:容量值为c+b的索引值和剩余文件部分所存储的容器中对应的连续存储数据块的位置。优选的,步骤1中,t1为1kb;t2为2kb;t3为4kb;t4为8kb;t5为12kb;t6为16kb…tx为1m;其中,在4k~1m之间,每隔4k对应一个容器。优选的,步骤2中,q值为1g。优选的,还包括文件读取过程,文件读取过程包括:步骤11,当接收到文件读取请求时,所述文件读取请求中携带有文件名称,查找所述文件目录,获得该文件的文件容量以及文件存储位置;步骤12,假设文件容量值为t0,判断文件容量值t0是否超过tx,如果没有超过,则根据所述文件目录中所记录的文件存储位置,可直接获得存储该文件的容器以及在该容器中的具体存储位置;因此,定位到对应容器的对应存储位置,即可读取到该文件;如果超过,解析所述文件目录中所记录的文件存储位置,一方面,获得文件头部内容;另一方面,获得文件所包含的各个文件单元的索引值,再根据索引值,定位到存储每个文件单元的容器以及在该容器中的具体存储位置,从而读取到各个文件单元;将读取到的各个文件单元以及文件头部内容按顺序拼接,即读取到完整的文件。本发明提供的一种适用于云存储的文件操作方法具有以下优点:本发明实现了文件最大程度的连续存储,有效降低了产生的文件碎片数量,从而提高文件读写效率。本发明在应用于互联网网盘系统中时,其效果尤其明显。附图说明图1为本发明提供的文件写入流程图;图2为本发明提供的文件读取流程图。具体实施方式为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。为方便对本发明进行理解,首先介绍本发明的主要构思:假设共配置258类容器,分别为:1k容器、2k容器、4k容器、8k容器、12k容器…1m容器;每类容器分配的初始连续存储空间均为1g。以8k容器为例,其用于存储的每个文件的文件容量为:大于4k且小于等于8k;假设8k容器初始分配1g的连续存储空间,1g的连续存储空间被划分为多个大小为8k的连续存储数据块,余数部分用于保留空间;也就是说,8k容器,是以8k的连续存储数据块为存储单元的,按顺序,可分别称为:第1个存储单元、第2个存储单元、第3个存储单元等等,每个存储单元占用8k。因此,对于5k文件,当将其写入某个存储单元时,会存在3k的空闲空间,该空闲空间不会再分配给其他文件,会一直为空闲状态。例如,假设第1个存储单元被写入5k文件,则第1个存储单元存在3k空闲空间;当需要再写入6k的另一个文件时,6k的文件直接写入到第2个存储单元,而不会占用第1个存储单元的3k空闲空间;也就是说,每个存储单元允许存在少量的空闲空间,但是,由于8k容器所允许写入的文件的最大容量为8k,所以,只要允许写入到8k容器的文件,该文件在8k容器中一定是连续存储的,从而保证了其读写效率。需要说明的是,本发明中,由于对每个容器允许写入文件的最小值进行了限定,所以,可以理解,每个容器所出现的空闲空间的数量非常少,例如,对于8k容器,其允许写入的文件的最小值仍然大于4k,所以,每个存储单元出现的空闲空间一定小于4k。因此,与实现连续存储带来的效果相比,牺牲掉的空闲空间的不利因素可忽略。当按以下方式设置容器类别时:1k容器、2k容器、4k容器、8k容器、12k容器…1m容器,可以理解,如果需要写入的文件小于等于1m,可直接写入到与文件容量对应的容器中,从而可实现写入的文件一定占用连续存储空间。而如果需要写入的文件大于1m,例如,为2054k,则需要对2054k文件进行切分处理,切分出2个1m的文件单元,剩余部分为6k;然后,将2个1m的文件单元分别存储到1m容器,实现每个1m的文件单元在1m容器内的连续存储;然后,为实现后续对文件的读取,需要获得2个1m的文件单元的索引值,索引值即为每个文件单元的存储地址,8字节,对齐后为1k,然后,1k索引加上剩余的6k剩余文件,为7k文件段,存储到8k容器中,保证了7k文件段在8k容器中的连续存储。本发明中,对于大于1m的文件,上述文件写入流程的设计特点为:(1)为尽量减少文件切分后得到的文件单元数量,以1m为切分单位进行切分;其中,1m是指:各类容器中,最大连续存储数据块的值,也就是1m容器对应的连续存储数据块的值;从而最大程度保证文件连续存储;(2)文件切分后,每个文件单元存储到1m容器,保证了每个文件单元的连续存储;(3)文件切分后,将每个文件单元的索引和文件剩余部分作为一个整体,存储到适应的容器中,更进一步减少了分散文件的数量,实现最大程度的文件连续存储。因此,本发明从多个角度对文件系统进行设计和改进,从而最大程度的实现文件连续存储,提高文件读写效率。另外,本发明基于容器的设计而实现的文件读写方法,还具有以下优点:传统文件系统,最小分配颗粒通常为4k,以4k为例,当存储小于4k的文件时,会浪费一定的存储资源,例如,当存入2k的文件时,会浪费4-2=2k的存储资源。而本发明中,对容器的类型可灵活设计,因此,各类容器中,连续存储数据块的容量可灵活设计,当设计的连续存储数据块的最小容量为1k或2k时,即:当设计有1k容器或2k容器时,浪费的存储资源最多不会超过1k或2k,因此,提高了存储资源的利用率,减少了浪费的存储资源的量;此外,当处理少量小文件时,本发明设计的基于容器的存储模式,使存储文件更紧凑,读取效率会明显优于传统文件系统。基于上述构思,本发明提供的一种适用于云存储的文件操作方法,参考图1,包括以下步骤:步骤1,配置x类容器,分别记为:容器r1、容器r2…容器rx;x为自然数;设t1<t2<…<tx;则:容器r1所存储的每个文件的容量满足以下要求:0<文件容量≤t1;容器r2所存储的每个文件的容量满足以下要求:t1<文件容量≤t2;容器r3所存储的每个文件的容量满足以下要求:t2<文件容量≤t3,依此类推,容器rx所存储的每个文件的容量满足以下要求:tx-1<文件容量≤tx;实际应用中,配置的容器类型的数量、以及每个容器所存储的文件最大容量,均根据实际需求灵活设定。作为实际常用的方式,可以采用以下设置方式:共配置258类容器,t1为1kb;t2为2kb;t3为4kb;t4为8kb;t5为12kb;t6为16kb…tx为1m;其中,在4k~1m之间,每隔4k对应一个容器。步骤2,向磁盘管理空间申请多个容量均为q的初始连续存储空间,每一个连续存储空间对应每类容器的初始分配单元;其中,将容器r1、容器r2…容器rx分别对应的初始连续存储空间记为:连续存储空间w1、连续存储空间w2…连续存储空间wx;每类容器管理的最小空间单位为q;q的具体数值也根据实际需求设定,通常情况下,q值为1g。步骤3,创建容器管理单元,所述容器管理单元用于采用第一分配表的方式记录每个容器与对应的连续存储空间的对应关系;对于任意的容器ri,i∈(1、2…x),将其对应的连续存储空间wi划分为容量为ti的若干个连续存储数据块,余数部分用于保留空间;步骤4,创建容器内空间管理单元,所述空间管理单元用于采用第二分配表的方式记录容器内部存储空间的分配情况,具体的,所述第二分配表记录每类容器内部的可用连续存储数据块数量以及容器内部可用连续存储数据块的位置;步骤5,当接收到文件写入请求时,首先获得文件容量值,假设文件容量值为t0,判断文件容量值t0是否超过tx,如果没有超过,则执行步骤6-步骤8,并结束流程;如果超过,则执行步骤9,并结束流程;步骤6,在x类容器中,获得与文件容量值t0对应的容器rj;其中,j∈(1、2…x);步骤7,查找所述容器内空间管理单元,判断容器rj是否还存在可用连续存储数据块,如果存在,根据容器rj的第二分配表,获得容器rj的可用连续存储数据块的位置;将容器rj的某个可用连续存储数据块分配给文件容量值为t0的文件,将文件容量值为t0的文件写入到容器rj的某个可用连续存储数据块中;由于容器rj的可用连续存储数据块的容量为tj,tj大于等于t0,因此,文件容量值为t0的文件可连续存储在容器rj的可用连续存储数据块中,实现文件的连续存储;如果不存在,由容器管理单元向磁盘管理空间新申请容量为q的连续存储空间,更新所述第一分配表;然后,重新执行步骤7;步骤8,更新所述第二分配表;步骤9,计算t0除以tx,假设商数为a,余数为b;以tx为切分单位,将文件容量值为t0的文件自后向前或自前向后切分,因此,共得到a个容量为tx的文件单元,以及文件容量为b的剩余文件部分;对于a个容量为tx的文件单元,将每个文件单元分别写入到容器rx的某个可用连续存储数据块中,并更新第二分配表;计算a个容量为tx的文件单元的索引值,每个文件单元的索引值用于记录该文件单元的存储位置;a个索引值对齐后容量值为c;c+b小于tx,按步骤6-步骤8的方法,将容量值为c+b的索引值和剩余文件部分存储到与其最接近且大于等于c+b的容器中;步骤10,此外,预建立文件目录;所述文件目录用于存储文件名称、文件容量以及文件存储位置的对应关系;因此,在执行完步骤8或步骤9后,更新所述文件目录;其中,对于步骤8,文件存储位置为文件所存储的容器中对应的连续存储数据块的位置;对于步骤9,文件存储位置为:容量值为c+b的索引值和剩余文件部分所存储的容器中对应的连续存储数据块的位置。上述步骤可简单概括为:假设共配置1k,2k,4k,8k,12k,16k,20k…996k,1m共258个容器。如果需要写入的文件不足1m,则直接向文件分配最合适的容器,采用节点直接指向对应容器的分配位置。如果需要写入的文件超过1m,则将文件切分,得到整数个1m文件单元以及不足1m的文件剩余部分,按(1m索引+不足1m的文件剩余部分+整数个1m文件单元)组成文件体。其中,1m索引按1m对齐,每32位表示一个1m块的索引id。如果(1m索引+不足1m的文件剩余部分)小于1m,直接存储在对应容器,节点直接指向其分配位置;如果(1m索引+不足1m的文件剩余部分)大于等于1m,1m索引增加一个索引条目,再将完整1m区域移入,剩余部分直接存储在对应容器。为方便对本发明提供的文件写入步骤进行理解,下面列举三个文件写入的实施例:本实施例假设共配置258类容器,分别为:1k容器、2k容器、4k容器、8k容器、12k容器…1m容器;每类容器分配的初始连续存储空间均为1g。例1:需要写入一个大小为799k的文件。由于文件容量小于1m,直接在最合适的800k容器中申请空间,800k容器,是按800k为单位进行切分,如果查找到200个单位(800k大小)是空闲的,可以为此文件分配800k容器中的第200个单位,更新节点,写入数据即可。例2:需要写入一个大小为20981k的文件。由于文件容量大于1m,对文件进行切分,由501k文件剩余部分+20个1m(20480k)文件单元组成,20个1m的索引大小为20*4=80字节,对齐后为1k,加上文件剩余部分的501k,为502k(小于1m),所以,整个文件由(1k索引,501k文件剩余部分,20个1m组成),前两部分直接在504k的容器中申请空间,假设是第300个单位,则记录文件的位置为300即可。后面的20个1m文件单元,由1m容器分配空间,即可实现数据写入。例3:需要写入大小为2044k的文件。由于文件超过1m,所以由1m索引(1个m共4字节的索引,空间对齐占用1k)+1020k文件剩余部分+1个1m文件单元,由于索引+文件剩余部分也是一个1m的对齐空间了,所以,更新为2个1m容器,文件头部用1k字节表示1m索引(实际只用8字节),节点中描述第一个1m容器位置即可。在上述文件写入的基础原理上,参考图2,还包括文件读取过程,文件读取过程实际为文件写入过程的逆过程,包括以下步骤:步骤11,当接收到文件读取请求时,所述文件读取请求中携带有文件名称,查找所述文件目录,获得该文件的文件容量以及文件存储位置;步骤12,假设文件容量值为t0,判断文件容量值t0是否超过tx,如果没有超过,则根据所述文件目录中所记录的文件存储位置,可直接获得存储该文件的容器以及在该容器中的具体存储位置;因此,定位到对应容器的对应存储位置,即可读取到该文件;如果超过,解析所述文件目录中所记录的文件存储位置,一方面,获得文件头部内容;另一方面,获得文件所包含的各个文件单元的索引值,再根据索引值,定位到存储每个文件单元的容器以及在该容器中的具体存储位置,从而读取到各个文件单元;将读取到的各个文件单元以及文件头部内容按顺序拼接,即读取到完整的文件。下面列举文件读取的实施例:需要读取一个大小为2059k的文件:写入时:由于文件大于1m,由11k文件剩余部分+2个1m文件单元(2048k)组成,2个1m文件单元的索引(用于记录2个1m文件单元的真正存储位置)大小为2*4=8字节,凑整对齐后为1k,加上文件剩余部分的11k,为12k(小于1m),因此,索引和文件剩余部分直接存储在12k的容器中,两个1m文件单元存储在1m容器的两个连续存储数据块中,因此,共三个连续片断。这三个连续片断全部完成写入后,将文件名、文件容量、时间、12k容器的数据位置等属性信息写到文件目录中,文件目录可采用以下形式:文件名称大小时间位置其他b.txt2069k2017年1月1日12k容器x位置···因此,在进行文件读取时,通过文件目录,读出文件容量、时间、12k容器的数据位置等信息。再读取12k容器中的12k内容,得到8字节的2个1m的位置,以及11k的文件剩余部分。再通过2个1m的位置,在1m容器中读出文件内容。综上所述,本发明提供的一种适用于云存储的文件操作方法具有以下优点:本发明实现了文件最大程度的连续存储,有效降低了产生的文件碎片数量,从而提高文件读写效率。本发明在应用于互联网网盘系统中时,其效果尤其明显。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1