电子文档增量存储处理方法

文档序号:6483821阅读:208来源:国知局

专利名称::电子文档增量存储处理方法
技术领域
:本发明涉及电子文档处理领域,尤其涉及一种电子文档增量存储处理方法。
背景技术
:在数据存储、归档、备份和存储等领域,对于编辑前后发生变化过程中的电子文档,如果需要保留多个版本,以供恢复或作为记录,现有的一般处理方式是将编辑后的电子文档作为独立的文档进行压缩处理或者采用复杂且昂责的快照技术,以此达到减少存储资源,或者在网络应用环境下减少网络传输流量等目的。以备份领域为例,备份内容通常在首次备份后,大部分都不会再次更新,仅有少部分的文件(例如用户正在编辑的文档、会议讨论记录等)需要经常进行更新。对于这类普通的用户文件,不太可能采用快照技术,一般只会把更新过的文档重新进行完全备份,如果采用这样的处理方式,则每次编辑后的文档都会被存储为独立文件,也就是说采用完全拷贝编辑后文档的方式,即便采用压缩的方法,仍然需要占用大量的存储资源,从而限制了实现备份处理的服务器的性能和效率。
发明内容本发明的目的是提出一种电子文档增量存储处理方法,能够消除文档在多次编辑过程中独立保存的文件的冗余,降低对存储资源或网络带宽资源等的需求。为实现上述目的,本发明提供了一种电子文档编辑后生成增量文档的方法,包括以下步骤从参考文档中将预设容量V的数据读入内存,并以预设长度L划分读入的数据;计算划分出的每个参考数据块对应的索引值,并将所述索引值与对应的参考数据块进行关联;从编辑后文档中依次将预设长度L的编辑后数据块读入内存,并计算对应的索引值;将每次读取的参考数据块对应的索引值与读取的各个编辑后数据块对应的索引值进行比较,如果匹配则将所述参考文档匹配的位置以及匹配标记写入增量文档,否则将所述编辑后文档中不匹配段、不匹配长度以及不匹配标记写入该增量文档。进一步的,如果参考文档的容量低于预设容量V,则读取所述参考文档的数据直到结尾。进一步的,在计算从参考文档中划分出的每个参考数据块对应的索引值之后,还包括对所述每个参考数据块对应的索引值进行符合预设数据结构的管理,以便进行索引值的比较。进一步的,所述对所述每个参考数据块对应的索引值进行符合预设数据结构的管理的操作具体为采用搜索树对所述每个参考数据块对应的索引值进行管理。进一步的,所述搜索树还管理着具有相同索引值的每个数据块,述参考文档中读取的各个:据:对应的索引值进行二较之后,:口果索引值相同,则将每次从所述编辑后文档中读取的数据块与所述具有该相同索引值的每个数据块进行逐一比较,判断内容是否完全匹配。进一步的,在读取的参考数据块对应的索引值与读取的各个编辑后数据块对应的索引值匹配时,清除内存中所述参考文档匹配的位置及该位置之前的数据,并追加所述参考文档中未读入的数据,并满足预设容量V,如果所述参考文档中未读入的数据在追加后容量仍低于预设容量V,则读取所述参考文档的数据直到结尾。进一步的,在将所述编辑后文档中不匹配段、不匹配长度以及不匹配标记写入该增量文档时,如果不匹配长度大于预设不匹配长度Lp时,则按照所述预设不匹配长度Lp分为多个不匹配段,并写入该增量文档。进一步的,如果参考文档的容量远低于预设容量V,则退出生成增量文档的操作。进一步的,如果参考文档的容量远低于编辑后文档的容量,则退出生成增量文档的操作。为实现上述目的,本发明提供了一种根据增量文档恢复编辑后文档的方法,包括依次识别增量文档中的匹配标记及不匹配标记,对于不匹配标记,则从增量文档中读出该不匹配标记对应的不匹配段,并写入编辑后文档;对于匹配标记,则计算出该匹配标记在参考文档中的位置,并从参考文档中读取从该位置起预设长度L的参考数据块,并写入编辑后文档。基于上述技术方案,本发明通过对编辑前后的两个文档进行比较建立映射关系,再根据记录的映射关系生成增量文档,在数据存储、归档、备份等方面只需要处理增量文档来替代处理编辑后文档,以次减少存储或网络传输的负担。此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图l为本发明电子文档编辑后生成增量文档的方法的一实施例的流程示意图。图2为本发明电子文档编辑后生成增量文档的方法的另一实施例的流程示意图。图3为本发明参考文档和编辑后文档内容匹配情况的简化示意图。6图4为本发明根据增量文档恢复编辑后文档的方法的一实施例的流程示意图。具体实施例方式下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。首先定义以下几个基本概念,以便更好的理解本发明的实施例。参考文档每次编辑前的文档。编辑后文档每次编辑后的文档。增量文档根据参考文档对编辑后文档增量分析后生成的新文档。数据块对文档中的数据进行逻辑划分,划分成多个数据块。例如以预设长度L进行划分,可以将文档数据划分为多个长度为L的片段。在本发明中,根据数据块所属的文档不同,可以分为所属于参考文档的参考数据块和所属于编辑后文档的编辑后数据块。如图l所示,为本发明电子文档编辑后生成增量文档的方法的一实施例的流程示意图。在本实施例中的增量文档生成流程包括以下基本步骤步骤IOI、从参考文档中将预设容量V的数据读入内存,并以预设长度L划分读入的数据;步骤102、计算划分出的每个参考数据块对应的索引值,并将所述索引值与对应的参考数据块进行关联;步骤103、从编辑后文档中依次将预设长度L的编辑后数据块读入内存,并计算对应的索引值;步骤104、将每次读取的参考数据块对应的索引值与读取的各个编辑后数据块对应的索引值进行比较;步骤105、判断是否匹配,是则执行步骤106,否则执行步骤107;步骤106、将所述参考文档匹配的位置以及匹配标记写入增量文档;步骤107、将所述编辑后文档中不匹配段、不匹配长度以及不匹配标记写入该增量文档。在本实施例中,预设容量V可以根据编辑性文档的一般大小进行设定,主要考虑到适当的緩存容量既提高使用效率,又不致占用过多的内存开销的因素。在另一实施例中,如果步骤101中参考文档的容量低于预设容量V,则读取所述参考文档的数据直到结尾。预设长度L通常可以被设定为大于3的整数值。在后面的例子中为了方便介绍,预设容量V被设定为8MB,预设长度L被设定为128字节,应注意的是,这里的设定值仅为方便后面举例,不应理解为对预设容量和预设长度的具体限定。接下来举例对上述实施例进行更详细地说明,如图2所示,为本发明电子文档编辑后生成增量文档的方法的另一实施例的流程示意图。相比上一实施例,本实施例中加入了一些优化的步骤,具体如下步骤201、打开参考文档(文档#1)、编辑后文档(文档#2),并创建增量文档(文档#3)。步骤202、从文档#1读取预设容量V(本实施例取8MB)数据入内存,如果文档弁1小于8MB,则直接读取到文档#1的结尾。步骤203、对从文档#1读入内存的数据进行逻辑划分,以预设长度L(本实施例取128字节)划分为多个参考数据块,并计算每个参考数据块的索引值,具体计算方法在下文说明。在划分参考数据块后,还对每个参考数据块对应的索引值进行符合预设数据结构的管理,以便进行索引值的比较。这里可采用的数据结构包括树、链表、Hash表等,在本实施例中采用一种搜索树(例如Radix-Tree)进行管理,以便进行索引值的比较。步骤204、获取文档#2中尚未处理的前预设长度L(本实施例取128字节)的数据,即编辑后数据块。步骤205、判断是否能够获取到128字节的数据,这种情况主要针对于是否访问到文档#2的结尾,是则执行步骤206,否则执行步骤216。步骤206、计算该编辑后数据块的索引值(索引值#1),然后在搜索树Radix-Tree中查找与该索引值相同的索引值(索引值#2)。步骤207、判断是否有匹配的索引值,是则执行步骤208,否则执行步骤210。步骤208、对于荻取索引值#2对应的内容,可能有多条,逐一比较直到找到内容相同的块或所有比较都完成。步骤209、判断是否找到内容完全匹配的内容,是则执行步骤211,否则执行步骤210。步骤210、检测不匹配内容是否达到预设长度Lp(本实施例中取1MB),如果达到,则将该1MB的数据编码,并写入增量文档#3,然后向后偏移l个字节,并返回步骤204,如果未达到,则直接返回步骤204。步骤211、将编辑后文档中不匹配段、不匹配长度以及不匹配标记写入文档#3,其中不匹配段即编码后的不匹配的内容。步骤212、将参考文档匹配的位置以及匹配标记写入文档#3,编码成数据块记录。步骤213、调整搜索树Radix-Tree的内容,清除内存中参考文档匹配的位置即匹配项前面(包括匹配项)的参考数据块,并追加文档#1中读取未读入的相应数量的数据,并满足预设容量V。如果所述参考文档中未读入的数据在追加后容量仍低于预设容量V,则读取所述参考文档的数据直到结尾。步骤214、是否到达文档#2的结尾,是则执行步骤216,否则执行步骤215;步骤215、在文档#2向后偏移128字节,即一个编辑后数据块,然后返回步骤204。步骤216、清除搜索树Radix-Tree的内容,将文档#2剩余内容编码,写入文档#3,从而完成增量分析过程,生成增量文件。在上述实施例中,首先需要从参考文档中读取直到结尾或读取8MB数据到内存中,也就是说,内存中最多保持8MB的参考比较数据。然后将每个参考数据块按照一定的算法,计算出一个32位的值,并通过结构体(或者类)将此值与块序号联系在一起,同时,将该结构体(或者类)用数据结构Radix-Tree管理起来(Radix-Tree是一种有较高效率的树型结构算法,能够通过基值来进行快速检索,在本发明中采用其它数据结构管理也可以,比如链表、队列、哈希表等)。对于将128字节的数据块变成一个32位的值,计算方法可以有很多种,简单的方法比如,将128字节数据都当成32位的数,简单相加,高于32位的进位抛弃,最后得到的就是一个32位的数字;复杂的方法比如计算出该128字节的MD5码,得到128位数据,然后将这128位数据分成4组,进行某种运算,比如异或。优选的计算方式可以结合编辑后文件的使用办法进行选择,例如下列计算方法,即将128字节分成4组(A、B、C、D组),如表l表示(表中的数字是块中字节的序号,以0代表第一个)。<table>tableseeoriginaldocumentpage10</column></row><table>表1块分组方式将每组对应的字节相加(高于8位的进位抛弃或者用16位的数字类型,最后取低8位),每组得到一个8位的数据,然后用如下算法得到一个32位的数据,32位的结果=(A《24)+(B《16)+(C8)+D。在本实施例中,在索引值宽度的选择上,对于32位计算机来说,优选32位的数据,这主要考虑到以下几点首先大部分个人电脑(包括PC、笔记本、掌上设备)是32位机器,釆用32位比较常见;第二是当位数越多,管理索引的树形结构的层次结构就越多,中间变量越大,则内存消耗会更多的增加,访问速度也会降低;第三是内存中最大容许8MB的参考文档内容,那么至多只有216条记录(223/27),对于32位的样本空间的记录来说,发生多条记录基值相同的概率不算高。在前面提到的预设容量V的选择上,如果内存条件允许,增加更多的緩存通常对实际的应用来说会有更大的帮助,但还需要考虑到以下几种因素第一,如果主要处理的是一般性的编辑性文档,这些编辑性文档都不会太大,一般都在几KB到几MB之间,偶尔才会有大于数十MB的文档;第二,在设定预设容量V时,还需要考虑实际在内存中的其它因素,比如数据结构(例如Radix-Tree)的建立,再加上其它开销,可能造成较多的内存占用,因此不适宜选择过大的预设容量V,以免占用太多内存,影响用户其它软件的使用。在前面两个实施例中,对于与索引值关联的索引内容,可以按以下方式进行处理即在搜索树Radix-Tree的叶节点关联一个链表,对应的链表挂接着所有相同索引值的参考数据块。当检索时发现有所要索引值的记录时,编辑后文档中的编辑后数据块与链表中的对应的参考数据块逐一进行比较分析,确认其内容是完全一致,才会记录它们的映射,索引值的目的包括两个一是快速检索可能匹配块;二是缩小比较范围。在本发明中,编辑后文档是增量分析方法的主要对象,在增量文件生成流程中,编辑后文档按字节进行偏移处理,例如,如果第n个字符为首字符的块,不存在满足条件的匹配块,则检查从n+l个字节开始的块,依次类推;如果遇到匹配的块,则记录该块在参考文档中的位置及前面不匹配的内容,并调整参考文档建立的块内容,下一次编辑后文档的块从n+L字节开始。接下来,再说明一种可选的参考数据块的退出机制,如图3所示,为本发明参考文档和编辑后文档内容匹配情况的简化示意图。在该示意图中,编辑后文档中共有5个块内容与参考文档一致。如果备份文档的#1块找到匹配项后,参考文档的#4块从Radix-Tree中退出,然后把参考文档#4块及其前面的块全部从緩存中去除,同时增加参考文档后面的内容(如果有的话),满足緩存是8MB。这样方式删除掉了可能永远没有被匹配的参考文档的#0块和#3块,这种方式确实可能导致某些编辑后数据块(#2块)失去匹配的机会,但是根据文档编辑的特性,经常做的操作更多在于插入、替换、删除等,而内容倒换相对比较少,编辑后文档与参考文档相同的内容通常在物理顺序存在一致性,即以两个文档的匹配点为参考,设想备份文档的匹配块都落在参考文档的匹配点的后面。经过如此处理之后,那么从图3可以看出,编辑后文档的#2和#10块都将因为参考文档緩存的退出而失去匹配机会;而实际能够匹配到的是备份文档的#1、#3、#8和#10块。尽管这样操作的方式将会损失部分匹配项,但建立起了参考文档緩存的退出机制,适应了更大容量的参考文档的要求,进而增强了系统的可用性。在本实施例中,对编辑后文档要计算编辑后数据块对应的32位值,这里需要考虑计算32位值的效率,这将在一定程度上影响系统的易用性。下来给出了一种编辑后数据块的索引值的计算方法的例子,首先将128字节的块内容分成4组,将每组相加,如下所示a=ai=4n(n=0,l,2...31)i=4n+l(n=0,l,2...31)i=4n+2(n=0,l,2...31)d=&i=4n+3(n=0,l,2...31)上述块的分组计算方法中,ki代表了组内的每个字节。那么我们设想一下,如果备份文档的第n个字节为首的块不能匹配,但已经计算出了32位值,假设为An、Bn、Cn、Dn,那么就需要考察第n+1个字节为首的块的32位值,即计算Aw、Bn+1、Cn+1、Dn+1。为简单起见,将第n个字节编为序号0,则能得到第n字节为首的块的32位值计算表(如表2所示)和第n+l字节为首的的32位值计算表(如表3所示)。<table>tableseeoriginaldocumentpage13</column></row><table>表3第n+l字节为首的块计算32位值通过这两张表,我们很容易得出这两组32位值得关系,即An+1二BnBn+i=CnDn+i=An-k0+k128需要特别提示的是,D^的计算中,可以直接计算加法和减法(按无符号值进行计算),只要取低8位即可;如果想避免歧义,有关A、B、C、D的计算可以采用16或32位整型值进行,最后块的32位值依次取A、B、C、D各自的低8位即可(32个8位值最大是OxlFEO)。通过这种算法,对于不匹配的内容,其计算量将非常小,只有一个加运算和一个减运算,如果A、B、C、D用数组或指针组,则再加上一个下标(或指)针偏移,如果A、B、C、D用直接赋值方式,则是加上3个赋值运算,所以整体上将会是一个极小的运算代价;另外就是在Radix-Tree上的匹配比较运算,所以,Radix-Tree数的基值位数不宜过大。在本实施例的增量文档中,主要包括两部分基本内容,一部分是匹配段,一部分是不匹配段。对于匹配段,可以包含以下二元组<匹配标记,参考文档内匹配的位置(即偏移量)>。参考文档的緩存设计为8MB,共216个块,且这些块在参考文件中的位置是可以计算出来的,所以,参考文档内的偏移只需要16位,即2个字节就能表示。对于不匹配段,不匹配段的长度可能是任意值,则其包含的内容是<不匹配标记,不匹配长度,不匹配内容>,如果允许不匹配长度Lp为无限大(即远大于实际文件大小),我们很容易得出如下增量文件模型不匹配段的后面要么是文件结尾,要么是匹配段。匹配标记和不匹配标记均只需1位就能表示,在实际应用中,匹配标记和不匹配标记可以通过取不同值的同一字节进行标识。考虑到长度溢出的可能,可以在将不匹配段写入增量文档时,采用划分段的方式,比如以64KB为最大的段(即预设不匹配长度Lp),长度大于64KB则分成多个不匹配段,这种方式十分简洁,且不需要多次从磁盘读取。综合上述,不匹配段的采用二元组后续跟随不匹配内容,即l位的不匹配标记、16位的长度、不匹配数据。上述分析了匹配段(块)和不匹配段的表示方法,理论上,其前缀标记都只需要17位就能表示,但考虑到匹配标记要求后续的内容必须做位移处理,比如匹配段的偏移标记,不匹配段的长度标记和不匹配内容,这样会牺牲掉大量的CPU处理能力,因此优选将匹配标记设计为l个字符宽度,即8位,这样后续的内容就不需要做位移处理。这样,前缀标记便都是3个字节。这样也满足了网络传输的要求。下面给出两种极限情况下的效率分析,第一种是完全不匹配;另一种是备份文件内容完全被匹配上(比如文件中删除了部分内容,且恰好满足边界和长度都是128的倍数)。14对于完全不匹配的情况,它会增加存储空间和网络流量,那么分析其造成的损失是多大。根据前面所设计,每64KB会增加3字节的二元组,所以,其增量分析效率(减少量)为e=-3B/64KB*100%-0.0046%很显然,相对于编辑后文档,这点额外的数据量是微不足道的。如果编辑后文档与参考文档几乎完全匹配,那么每128字节只需要存储和传输3个字节就能表示,其效率是非常高的,增量分析效率(减少量)为e=(128-3)B/128B*100%97.66%比较这两组数据,在极坏的情况下,只增加了大约0.0046%的大小,而最好的情况,则能节约97.66%存储和网络带宽。除此之外,在其他实施例中,还可以进行以下步骤的优化1、如果参考文档和编辑后文档中任意一个远小于预设容量V,例如不到4KB,则可以不进行增量分析,因为这样的文档分析的价值不大。2、如果参考文档已经到了结尾,或者参考文档的容量远小于编辑后文档的容量,例如只是编辑后文档未处理的10%左右,则放弃继续处理,因为很可能最后几个已经不会匹配,而为了增量分析,还必须花费不少CPU计算能力,且很可能计算出来的效果是将备份文档略有增加。3、识别文档是否为固定内容在备份环境下,首次备份的文件都当作固定内容(避免参考文件的建立),如果文件一直未被编辑,则无需传输和另外备份。4、主动识别可否增量分析在异地(指存储或者PC)备份环境下,第一次不需要设置参考文件,如果在下一次备份过程中,发现某个文档已经被编辑,试图计算其增量文件,并建立参考文件作为副本),如果连续多次增量文件没有产生效益或者效益很小,则将其作为不可增量分析文件,避免后续处理时候浪费计算资源。根据前述各实施例得到的增量文件可以用来备份、网络传输等,如果需要恢复编辑后文档,则可以通过图4的实施例实现,具体包括以下步骤步骤301、依次识别增量文档中的匹配标记及不匹配标记;步骤302、对于不匹配标记,则从增量文档中读出该不匹配标记对应的不匹配段,并写入编辑后文档;步骤303、对于匹配标记,则计算出该匹配标记在参考文档中的位置,并从参考文档中读取从该位置起预设长度L的参考数据块,并写入编辑后文档。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制;尽管参照较佳实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解依然可以对本发明的具体实施方式进行修改或者对部分技术特征进行等同替换;而不脱离本发明技术方案的精神,其均应涵盖在本发明请求保护的技术方案范围当中。权利要求1、一种电子文档编辑后生成增量文档的方法,包括以下步骤从参考文档中将预设容量V的数据读入内存,并以预设长度L划分读入的数据;计算划分出的每个参考数据块对应的索引值,并将所述索引值与对应的参考数据块进行关联;从编辑后文档中依次将预设长度L的编辑后数据块读入内存,并计算对应的索引值;将每次读取的参考数据块对应的索引值与读取的各个编辑后数据块对应的索引值进行比较,如果匹配则将所述参考文档匹配的位置以及匹配标记写入增量文档,否则将所述编辑后文档中不匹配段、不匹配长度以及不匹配标记写入该增量文档。2、根据权利要求1所述的电子文档编辑后生成增量文档的方法,其中如果参考文档的容量低于预设容量V,则读取所述参考文档的数据直到结尾。3、根据权利要求1所述的电子文档编辑后生成增量文档的方法,其中在计算从参考文档中划分出的每个参考数据块对应的索引值之后,还包括对所述每个参考数据块对应的索引值进行符合预设数据结构的管理,以便进行索引值的比较。4、根据权利要求3所述的电子文档编辑后生成增量文档的方法,的管理的操作具体为釆用搜索树对所述每个参考数据块对应的索引值进行管理。5、根据权利要求4所述的电子文档编辑后生成增量文档的方法,其中所述搜索树还管理着具有相同索引值的每个数据块,在所述将每次从所述编辑后文档中读取的数据块对应的索引值与从所述参考文档中读取的各个数据块对应的索引值进行比较之后,如果索引值相同,的每个数据块进行逐一比较,判断内容是否完全匹配。6、根据权利要求1所述的电子文档编辑后生成增量文档的方法,应的索引值匹配时,清除内存中所述参考文档匹配的位置及该位置之前的数据,并追加所述参考文档中未读入的数据,并满足预设容量V,如果所述参考文档中未读入的数据在追加后容量仍低于预设容量V,则读取所述参考文档的数据直到结尾。7、根据权利要求1所述的电子文档编辑后生成增量文档的方法,其中在将所述编辑后文档中不匹配段、不匹配长度以及不匹配标记写入该增量文档时,如果不匹配长度大于预设不匹配长度Lp时,则按照所述预设不匹配长度Lp分为多个不匹配段,并写入该增量文档。8、根据权利要求2所述的电子文档编辑后生成增量文档的方法,其中如果参考文档的容量远低于预设容量V,则退出生成增量文档的操作。9、根据权利要求2所述的电子文档编辑后生成增量文档的方法,其中如果参考文档的容量远低于编辑后文档的容量,则退出生成增量文档的操作。10、一种根据增量文档恢复编辑后文档的方法,包括依次识别增量文档中的匹配标记及不匹配标记,对于不匹配标记,则从增量文档中读出该不匹配标记对应的不匹配段,并写入编辑后文档;对于匹配标记,则计算出该匹配标记在参考文档中的位置,并从参考文档中读取从该位置起预设长度L的参考数据块,并写入编辑后文档。全文摘要本发明涉及一种电子文档编辑后生成增量文档的方法,包括从参考文档中将数据读入内存并划分;计算划分出的参考数据块对应的索引值,并进行关联;依次将编辑后数据块读入内存,并计算对应的索引值;将参考数据块对应的索引值与编辑后数据块对应的索引值进行比较,匹配则将参考文档匹配的位置以及匹配标记写入增量文档,否则将编辑后文档中不匹配段、不匹配长度以及不匹配标记写入该增量文档。本发明还涉及一种根据增量文档恢复编辑后文档的方法。本发明通过对编辑前后的两个文档进行比较建立映射关系,再根据记录的映射关系生成增量文档,在数据存储、归档、备份等方面只需要处理增量文档来替代处理编辑后文档,以次减少存储或网络传输的负担。文档编号G06F11/14GK101482839SQ20091007836公开日2009年7月15日申请日期2009年2月26日优先权日2009年2月26日发明者杨耀敏,蒋建平申请人:北京世纪互联宽带数据中心有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1