发明内容
本发明的目的在于提供文件储存系统和文件储存方法,以解决上述的问题。
在本发明的实施例中提供了文件储存系统,其特征在于,包括:文件夹、储存文件、复用数据;
所述文件夹与指定的、自身以外的一或多个文件夹进行关联;
所述储存文件与指定的一或多个文件夹进行关联;
所述复用数据与指定的一或多个储存文件进行关联。
优选的,所述文件夹为多个,且至少两个文件夹顺序关联,以形成储存路径;
每个所述文件夹均包括独立的储存空间,所述储存空间中记录有所述储存文件。
优选的,所述复用数据为多个,且所述储存文件中记录有与所述复用数据相对应的第一映射标识,每个所述复用数据与一个所述第一映射标识相对应,且每个所述第一映射标识用于从指定的复用数据储存位置调取复用数据的内容。
优选的,还包括复用关联表,所述储存文件为多个,所述储存文件中记录有复用数据,或所述复用数据的映射,所述复用关联表中记录有每个所述复用数据的储存位置和指定的第一映射标识的对应关系。
优选的,还包括:复用储存空间,所述复用储存空间内记录有上述复用数据的内容和与所述复用数据相对应的第一映射标识。
优选的,所述包括:复用子数据和第二映射标识,所述复用子数据记录在所述储存文件中,或记录在所述复用储存空间中;
所述第二映射标识与所述复用子数据的储存位置关联,且用于调取所述复用子数据的内容;
所述复用数据内包括多个按照预设顺序排列的第二映射标识。
优选的,还包括:文件夹关联表,
所述文件夹关联表的行表头和列表头,分别列出了每个所述文件夹的编号,所述文件夹关联表的每个元素中记载了所述列表头中,或行表头中与所述元素的位置相对应的,且直接关联的两个文件夹的关联关系;
所述关联关系包括主动关联、被动关联、包含关联和被包含关联。
本发明实施例还提供了文件储存方法,基于文件储存系统,其特征在于,包括:
遍历文件储存系统中的每个文件夹,并获取每个文件夹中的储存文件;
查找每个所述储存文件中是否存在相同的数据段落;
若是,则确定指定的一个储存文件中相同的数据段落为复用数据,以确定包含所述复用数据的储存文件为第一储存文件,并生成相应的第一映射标识,所述第一映射标识用于按照所述复用数据的储存位置,调取所述复用数据;
使用第一映射标识替代第一储存文件以外的储存文件中相同的数据段落。
优选的,还包括:根据所述第一映射标识与所述复用数据的储存位置建立复用关联表,所述复用关联表的主键为第一映射标识的代码。
本发明实施例提供的文件储存系统,与现有技术中的在需要储存数据的时候,每个文件夹内的数据均是相互独立的,造成了相同数据被重复储存,浪费系统资源相比,其通过将所述文件夹与指定的、自身以外的一或多个文件夹进行关联;所述储存文件与指定的一或多个文件夹进行关联;所述复用数据与指定的一或多个文件进行关联,使得储存文件、文件夹、复用数据三者是相互关联的关系,当需要储存数据的时候,通过数据的关联方式,建立文件夹和储存文件的关系即可,并且复用数据能够与储存文件建立关联关系,使得同一储存位置上的复用数据直接被引用到指定的储存文件中,避免了储存资源的浪费,解决了现有技术中的不足。
具体实施方式
下面通过具体的实施例子并结合附图对本发明做进一步的详细描述。
本发明实施例1提供了文件储存系统,包括:文件夹、储存文件、复用数据;
所述文件夹与指定的、自身以外的一或多个文件夹进行关联;
所述储存文件与指定的一或多个文件夹进行关联;
所述复用数据与指定的一或多个储存文件进行关联。
文件夹与文件夹进行关联是指文件夹可以按照一定的顺序进行顺序的引用,如A、B、C和D分别为四个不同的文件夹,其引用方式可以是A/B/C/D,也可以是B/C/D/A。同样的,储存文件与文件夹进行关联,复用数据与文件夹进行关联,也是同样的效果,目的是通过打开文件夹来获取到储存文件和通过打开储存文件来获取到复用数据。其中,复用数据是指同时存在于一个文件储存系统中的储存文件中相同的部分。通过将复用数据与储存文件建立起关联关系,能够使用户在打开储存文件的时候直接获取到复用数据,而在储存的时候,储存文件中相应的位置则使用指定的标识来替代复用数据。
具体的,如图1a所示,提供了相关技术中,所使用的储存体系(即储存路径,有多个节点,或文件夹顺序形成的描述储存文件位置的连接串),2.xls只有一个路径:root:\C\F\2.xls。也就是不管哪个文件都只能存储在同一个节点(文件夹)下,且都是由同一个祖先节点(根节点,或root)引出的。造成这种情况的原因是每个父节点均包含了指定的子节点(储存空间上也是包含的关系),并且父节点之间不会相互嵌套(不会产生储存位置相互交界的情况)。如此,子节点一定是属于父节点的子集,属于父节点的一部分。这样的系统,如果需要在E或G中储存文件,同样需要将文件多次进行储存,由于存储到了不同的储存位置,导致了相同的数据资源反复占用了系统的储存空间。
图1b中提供了本发明所提供的文件储存系统的基本架构图。图中的root并没有实际含义,可以由其他的文件夹(节点)所替代。本发明所提供的文件储存系统中的文件夹关联关系与父子节点的差别在于,文件夹之间并不必然有包含和被包含的关系,各个文件夹之间的储存空间可以是相互独立的。这样,在设置保存路径的时候,可以通过关联,或者通过映射的方式,来设置保存的路径。比如图1b中的文件2.xls可以具有如下几种储存路径:(1),root:\C\F\2.xls;(2)root:\D\F\2.xls;(3)root:\D\G\2.xls。
如此设置,能够使路径保存的更加合理。
具体如,C的名字可以是饮食(文件夹),D可以是餐饮(文件夹),F是肯德基(文件夹),文件2.xls是规划表(储存文件)。肯德基是属于饮食,也是属于餐饮的一部分,而2.xls是肯德基在一定时间内的计划,因而F可以根据具体的情况不同,分别被C和D进行关联。
如在某公司中,不同的部分均需要看到财务报表(储存文件),财务报表属于财务部的管理下,也就是图中的F可以是财务部(文件夹),2.xls是财务报表(储存文件),C和D可以分别是两个想查询工资的部分,如C为工程部,D为销售部,这两个部分都想通过财务部来查询工资数量,这样,可以使用(1),root:\C\F\2.xls;(2)root:\D\F\2.xls;方式进行查询,而传统的系统储存方式只能是,在C和D文件夹下面分别建立F子文件夹,再分别在各自的F子文件夹下放置财务报表。随着财务报表需要查询数量和需要查询财务报表的部分数量的增加,财务报表需要储存在无限多个子文件夹中,这必然会大大消耗系统的储存空间,最终可能会拖垮系统。
并且,同一个文件夹可以即与其他的文件夹相互关联,也可以与储存文件进行关联。也就是文件夹下面放置了文件夹,也放置了储存文件。具体的,
文件夹可以被其他的文件夹所引用。原因在于在某个被引用的文件夹中可能包括有子文件夹,也可能会存在储存文件,也就是直接储存有储存文件的文件夹,可能是被引用的终点,也可能是被引用的一个中间节点(路径中的一个文件夹)。
如此设计文件夹的关联关系,能够使储存在不同位置的储存文件被任意引用,也就可以使使用者根据不同的使用需求来设置路径,当然也可以是相互嵌套的关系,也就是类似于相关技术中父子节点的关系,即可以是C文件夹的储存空间完全被D文件夹的储存空间所包括,当然也可以是C文件夹的储存空间的一部分被D文件夹的储存空间所包括,也就是两个节点的储存空间互有交集的情况。这样,可以优化储存路径和储存方式,也就是既有储存空间相互交界的节点,也有储存空间互不影响的节点。引用的时候便可以是C/D/C…比如C为餐饮,D为某餐饮公司,那么餐饮可以是在中国大环境下的餐饮行业,某餐饮公司(D)必然属于中国餐饮行业内的一部分,同时,某餐饮公司除了在餐饮行业有发展,还在其他的行业有发展,那么在某餐饮公司中,餐饮就是其一小部分,因为某餐饮公司还有其他的生意。这样的两个,或者多个节点相互嵌套的形式,是现有的系统中无法具备的。如图2所示,便是相互嵌套的一种形式,图中文件夹A和B是作为相互嵌套的对象存在的。
同样,还可以是逻辑上的包含与被包含的关系。如C为餐饮,D为肯德基。那么餐饮通常包含有肯德基(D),也就是储存的空间上,肯德基(D)的储存文件必然储存在餐饮的内部,但逻辑上,仍然可以使肯德基(D)来作为餐饮的关联节点。即C/D/C…。
另一方面,可以使用第一映射标识来关联复用数据和储存文件。第一映射标识是与复用数据相对应的。如果复用数据是多个,那么第一映射标识也应是多个,复用数据与第一映射标识是一对一的关系。第一映射标识用于调取复用数据,是指在读取待储存数据的时候,通过读取第一映射标识来直接读取到与其对应的复用数据。通常,第一映射标识可以是复用数据的储存地址,复用数据中的两个标识(如换行符中间所对应的数据作为复用数据)。由此可以见第一映射标识所占据的储存空间,通常是远小于一端完整的数据的。如第一映射标识只有几K,复用数据通常为几M,几G,甚至更多。由此可以见,通过使用第一映射标识来替代复用数据能够大大降低系统储存空间的不必要占用。如图3所示,可以将文件中相互重叠的位置只储存一次,其他文件通过索引的方式来引用这部分重叠的文件,图4中所体现的是一个文件被另一个文件所包含的情况。
整体来看本发明所提供的文件储存系统。传统的文件储存系统,根据具体的需要,需要将相同的文件储存在不同的目录、文件夹下。那么在进行修改的时候,则需要分别对每个文件进行修改,当需要修改的文件内容很庞大时,如文件错位替换等,则需要分别对每个已经储存的文件数据进行相应的调整,也就是需要重复X次,X指的是文件的重复储存的数量。同时,由于文件重复的被删除和插入,导致数据碎片的数量越来越多,当系统需要读取这些文件的时候,需要从不同的位置来调用子文件(完整数据的一部分),这样会大大降低系统的运行速度。而本发明所提供的系统的修改方法,由于一次性可以对所有的相关联的文件进行修改(通过修改复用数据来修改所有与之相关联的数据),并且不会出现遗漏。对于大数据时代,更加具有针对性,修改的数据量越庞大,本发明所提供的方法的效果越明显。并且,由于可以根据需要修改文件夹与文件夹的关联关系,因此,在储存新文件的时候,只需要建立相关文件夹的关联关系,而不需要重新储存,大大降低了储存文件的数量。
进一步,所述文件夹为多个,且至少两个文件夹顺序关联,以形成储存路径;每个所述文件夹均包括独立的储存空间,所述储存空间中记录有所述储存文件。
每个储存空间与其他任意的储存空间均是相互独立的。传统文件存储系统是紧凑的文件顺序存储,比如在空的存储区域中,第一次储存文件1~文件8,传统文件存储会将8个文件紧密地排列在一起。当其中文件例如文件3膨胀时(文件3中被添加数据),由于文件3的前后文件已经占用存储空间,于是文件3只能通过链向另一个空白区域去存储新的内容,于是文件3就形成了碎片存储。而本发明所提供的文件储存系统(MDNFS)是通过HASH散列式的文件空间存储,各个储存空间是相互独立的,比如在空的存储区域中,第一次储存文件1~文件8,MDNFS会将这8个文件分散稀松地存储在地磁盘的空间上,这样当文件3需要膨胀时,可以直接在连续的空间上存储,不会形成存储存储。传统的存储带来的碎片存取,随着使用的频繁,文件效率会逐步降低。而MDNFS在碎片存取的机率大大降低,文件存取效率会优于传统文件系统。
为了提高复用的效率,所述复用数据为多个,且所述储存文件中记录有与所述复用数据相对应的第一映射标识,每个所述复用数据与一个所述第一映射标识相对应,且每个所述第一映射标识用于从指定的复用数据储存位置调取复用数据的内容。
每次读取储存文件的时候,显现出来的是通过第一映射标识调取出来的复用数据,而不是第一映射标识。但在储存的时候则是储存的第一映射标识。通常,第一映射标识的大小是远小于复用数据的大小的。
进一步,还包括复用关联表,所述储存文件为多个,所述储存文件中记录有复用数据,或所述复用数据的映射,所述复用关联表中记录有每个所述复用数据的储存位置和指定的第一映射标识的对应关系。
或者,文件储存系统,还包括:复用储存空间,所述复用储存空间内记录有上述复用数据的内容和与所述复用数据相对应的第一映射标识。
也就是将复用数据储存在不同的储存位置上,根据使用情况的不同,用户可以选择引用预设的复用数据(储存在复用储存空间中的),或者引用其他储存数据中的。
为了增加复用数据的灵活性,文件储存系统,还包括:复用子数据和第二映射标识,所述复用子数据记录在所述储存文件中,或记录在所述复用储存空间中;
所述第二映射标识与所述复用子数据的储存位置关联,且用于调取所述复用子数据的内容;
所述复用数据内包括多个按照预设顺序排列的第二映射标识。
如图9和图10所示,图中R1-R7为复用数据,S1-S7为复用子数据。考虑到具体的使用情况,复用子数据可以是系统中自带的,已经预定的好的数据,当然,复用子数据可以根据使用环境不同来改变,如工程行业中经常使用到某些表格,参数,公式等均可以作为复用子数据,法律行业中,经常使用到的法条、规章等均可以作为复用子数据。在确定了复用子数据的基础上,用户可以根据自己的需要来建立复用数据,也就是讲多个复用子数据通过预定的顺序进行排列来形成了复用数据。如复用子数据分别是:“我的”“很好的”“书籍”“也是”,那么用户可以根据具体情况将这几个复用子数据编辑成复用数据“我的书籍也是很好的”,如此,用户可以通过直接调用复用数据的方式来减少数据调用的次数,从而降低了系统调用的工作量。
为了更加便利的储存文件夹之间的关联关系,本发明所提供的文件储存系统,还包括:文件夹关联表,
所述文件夹关联表的行表头和列表头,分别列出了每个所述文件夹的编号,所述文件夹关联表的每个元素中记载了所述列表头中,或行表头中与所述元素的位置相对应的,且直接关联的两个文件夹的关联关系;
所述关联关系包括主动关联、被动关联、包含关联和被包含关联。
具体的,文件夹关联表的如下表1:
表中的1000-1007是文件夹的代码,并且可以在每个元素中添加标识符号,以说明两个节点的关联关系。如下表2所示:
上up:表示为父节点;
下down:表示为子节点;
左left:表示为前继节点;
右right:表示为后继节点;
无null:表示为无向节点(两节点不关联)。
由此,便可以形成图5中所示的节点关联图,剩余的null为可以添加的路径方向。原理上,上表对应图中,null就是虚线。
图中,节点与编码的对应关系如下表:
综上,本发明所提供的文件储存系统对于描述复杂的工程体系更加具有针对性。随着工业水平的提高,工程系统由单一的链式关系(线式关系)转变为了二维的平面连接关系,正如相关技术中的文件夹关联图,如图1a所示,是有着严格关系限定的父子文件夹关联关系。随着工程复杂度的提高,文件夹与文件夹直接的关系不在是简单的包含关系(父子文件夹的关联关系),而是变成了映射、包含、映射+包含的复杂关联关系。如图6所示,目录A和目录D分别是两个文件夹,其中在这一角度下,目录D是被目录A所包含的,但,如果将这个立体化的文件夹模型旋转一定的角度,目录A与目录D就不在是包含关系,而是变成了映射关系,正如进行统计时,某些情况下,集合A是集合B的子集,但当前提条件改变的情况下,二者的关系就发生了变化。如果按照传统的文件夹关联模式,是不可能将一个立体的文件夹模型描述清楚的,进一步,当文件夹关系发生了改变的时候,则需要将文件夹关系完全重置,再进行关联,这对一个成型的完整系统的影响无疑是巨大的。反观本发明所提供的文件储存系统,由于采用了映射、包含、映射+包含的关联方式,使得文件夹与文件夹之间的关系更加明朗,而且在需要调整的时候,只需要改变映射关系,而不需要对储存的文件进行调整,大大降低了修改文件夹关系时的系统工作量。
本发明实施例2提供了文件储存方法,基于实施例1所提供的文件储存系统,包括如下步骤,如图7:
S101,遍历文件储存系统中的每个文件夹,并获取每个文件夹中的储存文件;
S102,查找每个所述储存文件中是否存在相同的数据段落;
S103,若是,则确定指定的一个储存文件中相同的数据段落为复用数据,以确定包含所述复用数据的储存文件为第一储存文件,并生成相应的第一映射标识,所述第一映射标识用于按照所述复用数据的储存位置,调取所述复用数据;
S104,使用第一映射标识替代第一储存文件以外的储存文件中相同的数据段落。
上述S101-S104这四个步骤中,是将传统的储存系统中的数据改变到本发明所提供的文件储存系统的方法。其中步骤S101,是扫描传统的储存系统中的储存文件。S102中,是在扫描到的文件中查询是否有相同的数据,也就是是否有复用数据,如果找到了能够复用的数据,则执行步骤S103,也就是将重复的部分作为复用数据,且将具有复用数据的一个储存文件作为第一储存文件,同时,还需要生成指向复用数据的第一映射标识(用于调取复用数据)。最后,步骤S104中,使用第一映射标识来替代除第一储存文件,其他的储存文件中的相应的复用数据。当然,在替代之后,还需要根据所述第一映射标识与所述复用数据的储存位置建立复用关联表,所述复用关联表的主键为第一映射标识的代码。也就是建立好复用数据与第一映射标识的对应关系。当复用数据的种类数量较多时,那么第一映射标识的数量也会很多,这样通过建立关联表的方式能够有效的表达关联关系,并且易于修改。
具体的,修改时,可以按照如下步骤进行,如图8:
S201,根据预先获取的待修改数据的储存地址查找指定的复用数据;
S202,按照修改方法对复用数据进行修改,以生成已修改复用数据;
S203,将已修改复用数据储存到指定储存位置,以确定已修改复用数据的储存地址;
S204,将已修改复用数据的储存地址和用于调取已修改复用数据的第一映射标识进行关联。
在确定了需要修改的复用数据后,可以按照预设的方式对其进行修改,修改具体如增加,替换和删除等。修改之后可能会改变复用数据的大小,如果改变了,那么复用数据的储存位置就发生了变化。也就是需要改变第一映射标识与储存位置的映射关系。
另一方面,若第一映射标识用于调取复用数据至多个待储存文件中,且存在至少一个待储存文件中的复用数据不需要修改,
则在按照修改方法对复用数据进行修改,以生成已修改复用数据前还包括:
将待修改的复用数据备份到备份储存位置;
使用复用数据的第三映射标识替代待储存数据中与复用数据相同的数据,以生成已替代数据,第三映射标识用于调取备份储存位置上的复用数据。
使用的时候存在这种情况,也就是某些引用复用数据的文件需要复用数据进行调整,某些引用复用数据的文件不需要复用数据进行调整,如此,在进行调整之前,需要对即将进行修改的复用数据进行备份,并且将需要与调整后的复用数据进行关联的文件中记载相应的映射标识,在需要与未调整的复用数据进行关联的文件中记载相应的映射标识。也就是生成了第三映射标识,用于标识复用数据没有修改的储存位置。
若第一映射标识用于调取复用数据至多个待储存文件中,且需要使用多种修改方式对复用数据进行修改,则根据预先获取的待修改数据的储存地址查找指定的复用数据前还包括:
对待修改的复用数据进行多次备份,以生成多份待修改的复用数据;
按照修改方法对复用数据进行修改,以生成已修改复用数据包括:
分别按照不同的修改方法对每个待修改的复用数据进行修改,以生成多个已修改复用数据。
由于不同的文件需要将复用数据修改成不同的样子,因此,需要修改多少个版本也就分别备份多少次,然后再针对不同的修改要求对每个备份的复用数据进行修改,并且在修改之后与相应的文件进行关联(通过第一映射标识进行关联)。
传统的文件储存方式,根据具体的需要,需要将相同的文件储存在不同的目录、文件夹下。那么在进行修改的时候,则需要分别对每个文件进行修改,当需要修改的文件内容很庞大时,如文件错位替换等,则需要分别对每个已经储存的文件数据进行相应的调整,也就是需要重复X次,X指的是文件的重复储存的数量。同时,由于文件重复的被删除和插入,导致数据碎片的数量越来越多,当系统需要读取这些文件的时候,需要从不同的位置来调用子文件(完整数据的一部分),这样会大大降低系统的运行速度。而本发明所提供的系统的修改方法,由于一次性可以对所有的相关联的文件进行修改(通过修改复用数据来修改所有与之相关联的数据),并且不会出现遗漏。对于大数据时代,更加具有针对性,修改的数据量越庞大,本发明所提供的方法的效果越明显。
综合来看实施例1所提供的文件储存系统和实施例2所提供的文件储存方法
至少具有如下5个优点:
1,传统文件存储系统将文件系统分为两个部分(1)文件分配表;(2)文件存储区域;本发明所提供的文件储存系统(MDNFS系统)将此两个部分合二为一,直接在连续的存储区域进行文件节点定义与文件物理空间存储;节约的存储空间,简化了操作系统对文件管理的操作方法。传统文件存储系统定位并存取文件,需要二个逻辑步骤;步骤(1)定位文件地址;(2)根据文件地址跳转到存储位置进行存取;MDNFS系统简化为一个步骤:定位到文件地址就直接可以存取到文件内容,因为文件物理存储与文件名称地址在连续的空间上;
2,传统文件存储系统是紧凑的文件顺序存储,比如在空的存储区域中,第一次储存文件1~文件8,传统文件存储会将8个文件紧密地排列在一起。当其中文件例如文件3膨胀时,由于文件3的前后文件已经占用存储空间,于是文件3只能通过链向另一个空白区域去存储新的内容,于是文件3就形成了碎片存储。MDNFS是通过HASH散列式的文件空间存储,比如在空的存储区域中,第一次储存文件1~文件8,MDNFS会将这8个文件分散稀松地存储在地磁盘的空间上,这样当文件3需要膨胀时,可以直接在连续的空间上存储,不会形成存储存储。传统的存储带来的碎片存取,随着使用的频繁,文件效率会逐步降低。而MDNFS在碎片存取的机率大大降低,文件存取效率会优于传统文件系统。
3,传统文件存储系统对目录及文件的结构上,是以单向树形结构方式管理的,只有父子关系,对同一个文件只有单向路径。MDNFS文件系统对目录及文件的结构,是多向网状结构方式管理的(蜘蛛网状),有父子(正反向)、相邻(双向)关系,对同一个文件可以有多个路径。降低了使用者在创建或选择路径上的困难,提高了路径的弹性,因为路径选择的丰富,同时使用者更容易找到想要的文件。
4,传统文件存储的文件路径必须有一个源根,同时只能向下探索路径。MDNFS存储的文件路径没有固定的源根,每一个节点,都可以一个起点,同时能通过各种方向的组合探索到任一个文件节点。提升了路径访问的弹性,增加了使用者在引用路径时的可选性,增加了文件与文件之间基于网络结构上的关联排序多样性(包括顺序性定义,传统文件只能按名称排序、时间排序,MDNFS允许使用者按需要自定义文件之间的排序)。
5,传统文件存储系统中,多个文件之间的存储空间是独立的,且以文件块为单位,在需要对重复内容更新时,需要多次更新,容易遗漏或出错。MDNFS存储系统中,多个文件之间的存储空间是可以复用共享的,以字节块为单位。MDNFS通过复用,减少文件之间的存储冗余,同时提高多重文件在对重复内容更新时的效率,只需要一次更新就同时更新了多个文件,不会遗漏,减少出错的机会。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。