CN102693302B - 快速文件比对方法、系统及客户端 - Google Patents
快速文件比对方法、系统及客户端 Download PDFInfo
- Publication number
- CN102693302B CN102693302B CN201210156032.1A CN201210156032A CN102693302B CN 102693302 B CN102693302 B CN 102693302B CN 201210156032 A CN201210156032 A CN 201210156032A CN 102693302 B CN102693302 B CN 102693302B
- Authority
- CN
- China
- Prior art keywords
- node
- catalogue
- directory
- scanning
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种快速文件比对方法、系统及客户端。快速文件比对方法包括:客户端对本地文件目录进行扫描分析,并根据本地文件系统的变化更新客户端维护的第一标识树,第一标识树中节点与客户端的本地各个目录相对应,节点信息包括节点标识和目录相关信息;客户端将服务器端设备维护的第二标识树与第一标识树进行逐个节点的比对,记录差异节点和该差异节点对应的变化文件;客户端根据记录的差异节点及变化文件向服务器端设备段提供数据,以供服务器端设备维护的第二标识树和存储文件进行更新。本发明采用比对反映客户端本地文件系统的节点信息的方式,这种方式更加快速,且适合更大更复杂的文件系统,能够有效的提高文件比对效率和性能。
Description
技术领域
本发明涉及文件处理领域,尤其涉及一种快速文件比对方法及系统。
背景技术
在文件处理技术中,为了更有效的组织管理文件系统,往往需要根据一定的规则对文件进行组织编排,这种组织编排通常会造成文件结构的高度复杂化,导致数据查找性能也随之急剧下降。在文件管理过程中,目前的文件比对操作一般采用文件两两之间进行所有字节比对来判断文件是否相同,这种比对方式在小型文件系统中是可行的,但是在一个大规模复杂或单一文件体积庞大的文件系统几乎是不可行的,而且通常基于文件简单属性去进行的判断又不完全准确。
另外,文件源文件与备份文件出于安全等因素的考虑往往存储在不同物理介质中,在操作文件时增加输入输出设备的负担,降低了设备的处理效率。在文件操作中,目前的一种文件比对的方法是通过散列函数获取文件的散列值来实现文件比对,虽然有效的解决了单个大文件比对时性能的瓶颈,但源文件与备份文件比对时根据文件结构的数量M与文件数量N进行M+N次的比对,源文件与备份文件在不同物理介质之间频繁的操作,造成性能下降。
发明内容
本发明的目的是提出一种快速文件比对方法、系统及客户端,能够有效的提高文件比对效率和性能。
为实现上述目的,本发明提供了一种快速文件比对方法,包括:
客户端对本地文件目录进行扫描分析,并根据本地文件系统的变化更新所述客户端维护的第一标识树,所述第一标识树中的各个节点与所述客户端的本地文件系统结构中的各个目录相对应,每个节点保存的节点信息包括节点标识和目录相关信息;
所述客户端将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对,记录所述第一标识树相比于所述第二标识树的差异节点和该差异节点对应的变化文件;
所述客户端根据记录的所述差异节点及变化文件向所述服务器端设备段提供数据,以供所述服务器端设备维护的第二标识树和存储文件进行更新。
进一步的,所述客户端对本地文件目录进行扫描分析的操作具体包括:
所述客户端对所述本地文件系统结构中各个目录进行遍历,并对遍历的目录进行扫描分析,获得对应的扫描结果。
进一步的,所述客户端对所述本地文件系统结构中各个目录进行遍历的操作具体包括:
所述客户端从所述本地文件系统结构的根目录开始,根据排序规则逐级定位到相应路径分支的第一个末级目录;
在每完成被定位目录的扫描分析后,检查同一级的其他目录中未扫描分析的目录,并判断该目录内是否存在目录,如果存在,则根据排序规则定位到该目录对应的路径分支的末级目录,否则定位在该目录;
如果同一级的所有目录均已完成扫描分析,则根据排序规则定位到上一级的第一个目录,直到定位所述本地文件系统结构的根目录,完成所述根目录的扫描分析完成整个遍历过程。
进一步的,所述扫描结果包括被扫描目录的路径信息、被扫描目录内所有文件和/或目录的路径信息、基本信息及对应的散列值;
所述根据本地文件系统的变化更新所述客户端维护的第一标识树的操作具体包括:
所述客户端根据所述扫描结果生成相应的节点标识,并将生成的节点标识与所述第一标识树中的对应节点的节点标识进行匹配;
如果与所述第一标识树中的对应节点不匹配,则根据所述扫描结果和所述生成的节点标识对所述对应节点的节点信息进行更新;
如果所述第一标识树中不存在对应节点,则根据所述扫描结果和所述生成的节点标识在所述第一标识树的相应位置增加新节点,作为所述生成的节点标识在所述第一标识树中的对应节点,并对所述新节点的节点信息进行更新;
在对当前节点的节点信息进行更新后,继续根据所述扫描结果中的被扫描目录的路径信息向上对当前节点的直属上级节点直到根节点逐层进行节点信息的更新。
进一步的,文件的基本信息包括文件名称、文件大小、文件属性和文件修改时间中的至少一种,目录的基本信息包括目录名称、目录大小、目录属性和目录修改时间中的至少一种。
进一步的,所述生成相应的节点标识的操作具体包括:
对被扫描目录内的所有文件和/或目录对应的散列值进行排序,并按照排序得到的顺序将被扫描目录内的所述所有文件和/或目录对应的散列值按照字符串的方式进行首尾相接方式的组合;
对组合得到的散列值字符串进行散列计算,得到对应的散列值作为所述被扫描目录对应的散列值;
根据所述被扫描目录的路径信息和计算出的散列值生成所述被扫描目录所对应节点的节点标识。
进一步的,如果所述被扫描目录内既没有文件,也没有目录,则所述被扫描目录的散列值设定为预设值或空值。
进一步的,所述客户端将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对的操作具体包括:
所述客户端将服务器端设备维护的第二标识树与所述第一标识树从根节点开始比对,通过比对所述第二标识树与所述第一标识树的对应节点的节点标识是否不相同来确定当前节点是否为差异节点,如果当前节点不是差异节点,则继续比对当前节点的兄弟节点的节点标识,否则从当前节点的子节点继续进行比对;
如果当前节点为根节点,且不是差异节点,则确定所述第一标识树与所述第二标识树之间不存在差异节点。
进一步的,所述第一标识树和第二标识树中的全部节点均遵循快速文件交换(Fast File Transfer,简称FFT)协议。
为实现上述目的,本发明还提供了一种实现快速文件比对的客户端,包括:
扫描分析单元,用于对本地文件目录进行扫描分析;
标识树更新单元,用于根据本地文件系统的变化更新所述客户端维护的第一标识树,所述第一标识树中的各个节点与所述客户端的本地文件系统结构中的各个目录相对应,每个节点保存的节点信息包括节点标识和目录相关信息;
节点比对单元,用于将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对;
差异记录单元,用于记录所述第一标识树相比于所述第二标识树的差异节点和该差异节点对应的变化文件;
数据提供单元,用于根据记录的所述差异节点及变化文件向所述服务器端设备段提供数据,以供所述服务器端设备维护的第二标识树和存储文件进行更新。
进一步的,所述扫描分析单元具体包括:
目录遍历组件,对所述本地文件系统结构中各个目录进行遍历;
扫描分析组件,对遍历的目录进行扫描分析,获得对应的扫描结果。
进一步的,所述扫描结果包括被扫描目录的路径信息、被扫描目录内所有文件和/或目录的路径信息、基本信息及对应的散列值;
所述标识树更新单元具体包括:
节点标识生成组件,用于根据所述扫描结果生成相应的节点标识;
节点标识匹配组件,用于将生成的节点标识与所述第一标识树中的对应节点的节点标识进行匹配;
新节点生成组件,用于在所述第一标识树中不存在对应节点时,根据所述扫描结果和所述生成的节点标识在所述第一标识树的相应位置增加新节点,作为所述生成的节点标识在所述第一标识树中的对应节点;
节点信息更新组件,用于根据所述扫描结果和所述生成的节点标识对所述对应节点的节点信息进行更新;
向上逐级更新组件,用于在对当前节点的节点信息进行更新后,继续根据所述扫描结果中的被扫描目录的路径信息向上对当前节点的直属上级节点直到根节点逐层进行节点信息的更新。
进一步的,所述节点标识生成组件具体包括:
排序子组件,用于对被扫描目录内的所有文件和/或目录对应的散列值进行排序;
散列值组合子组件,用于按照排序得到的顺序将被扫描目录内的所述所有文件和/或目录对应的散列值按照字符串的方式进行首尾相接方式的组合;
散列计算子组件,用于对组合得到的散列值字符串进行散列计算,得到对应的散列值作为所述被扫描目录对应的散列值;
节点标识生成子组件,用于根据所述被扫描目录的路径信息和计算出的散列值生成所述被扫描目录所对应节点的节点标识。
进一步的,所述节点比对单元具体包括:
比对位置选择组件,用于以根节点作为比对的初始位置开始比对,在比对过程中,如果当前节点不是差异节点,则选择当前节点的兄弟节点继续进行比对,否则选择当前节点的子节点继续进行比对;
节点标识比对组件,用于比对所述第二标识树与所述第一标识树的对应节点的节点标识是否不相同;
差异节点确认组件,用于当所述第二标识树与所述第一标识树的对应节点的节点标识不相同时,确认当前节点为差异节点,当所述第二标识树与所述第一标识树的对应节点的节点标识相同时,确认当前节点不是差异节点。
为实现上述目的,本发明提供了一种快速文件比对系统,包括:任一前述客户端以及维护有第二标识树和与第二标识树中各节点对应的存储文件的服务器端设备。
基于上述技术方案,本发明在客户端和服务器端设备各维护对应的标识树,客户端通过对本地文件目录的扫描分析来更新本地的标识树,并将本地的标识树与服务器端设备维护的标识树进行节点比对,并记录差异节点及对应的变化文件,从而使服务器端设备可以根据客户端提供的数据对本地的标识树和存储文件进行更新,这种方式相比于现有技术中采用的不同文件之间进行字节比对的方式,采用比对反映客户端本地文件系统的节点信息的方式,这种方式更加快速,且适合更大更复杂的文件系统,能够有效的提高文件比对效率和性能。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为客户端硬盘中的一般文件系统的形式示意图。
图2为本发明快速文件比对系统的一实施例的结构示意图。
图3为本发明快速文件比对方法的一实施例的流程示意图。
图4为本发明快速文件比对方法实施例中标识树的一实例的示意图。
图5为本发明快速文件比对方法实施例中目录遍历流程的示意图。
图6为本发明快速文件比对方法实施例中客户端标识树更新流程的示意图。
图7为本发明实现快速文件比对的客户端的一实施例的结构示意图。
图8为本发明实现快速文件比对的客户端实施例中标识树更新单元的结构示意图。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
首先,对本发明各实施例中所涉及的数据结构进行简单说明。
如图1所示,为客户端硬盘中的一般文件系统的形式示意图。这种文件系统具有至少一个根目录(图1中即盘符C:),在根目录下可以包括目录(目录下的目录也可称为子目录)和文件,在目录(目录的另一种常用叫法为文件夹)下还可以进一步包括目录和文件,相应的不同的文件或者目录具有绝对路径信息,包括了从根目录到当前文件或目录的真实路径,例如目录A11的绝对路径为C:\A\A1\A11。
根目录并不一定局限于盘符所代表的位置,也可以是任何设定的目录,相应的也可以采用相对路径信息来表示某个目录所在的位置。根据不同的操作系统,文件系统和路径信息的表示可能有所不同,但均可根据情况调整以适用本发明之构思。
如图2所示,为本发明快速文件比对系统的一实施例的结构示意图。在本实施例中,快速文件比对系统包括客户端1和服务器端设备2。在客户端1内维护有第一标识树,在服务器端设备2中维护有第二标识树和与第二标识树中各节点对应的存储文件。第一标识树和第二标识树中的全部节点均可遵循FFT协议。
客户端1所维护的第一标识树是根据客户端本地文件目录而形成的,而服务器端设备2中维护的第二标识树则是由客户端1所上传和更新的。这种标识树(后面将详细介绍其构成)可以体现客户端的本地文件系统的整体和局部细节的特征,通过标识树的比对来替代现有技术中的文件两两之间的比较,比对的数据量更小,因此可以获得更高的效率。
客户端1的具体结构在后面将会结合多个实施例详细进行说明,这里暂时先介绍几个快速文件比对方法的实施例来说明本发明的运行机制。
如图3所示,为本发明快速文件比对方法的一实施例的流程示意图。在本实施例中,快速文件比对流程具体包括:
步骤101、客户端对本地文件目录进行扫描分析,并根据本地文件系统的变化更新所述客户端维护的第一标识树,所述第一标识树中的各个节点与所述客户端的本地文件系统结构中的各个目录相对应,每个节点保存的节点信息包括节点标识和目录相关信息;
步骤102、所述客户端将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对,记录所述第一标识树相比于所述第二标识树的差异节点和该差异节点对应的变化文件;
步骤103、所述客户端根据记录的所述差异节点及变化文件向所述服务器端设备段提供数据,以供所述服务器端设备维护的第二标识树和存储文件进行更新。
在本实施例中的标识树(包括第一标识树和第二标识树)的形态的一种实例参见图4,标识树由呈树型且具有多个层次的多个节点构成,在标识树的顶部为根节点,对应于客户端内的本地文件系统结构的根目录,前面提到根目录不一定规定为盘符所对应的目录,也可以是某个更具体的目录位置,相应的根节点就是该目录所对应的根节点。
对于每一个节点来说,除了在标识树更新过程中新增的节点可能有一段时间内容为空,每个节点基本都保存有一定的信息内容,这些信息内容被称为该节点的节点信息,节点信息至少包括两部分:节点标识和目录相关信息,其中在一种可行的数据结构中,节点标识可作为节点信息的头部分,目录相关信息可作为节点信息的体部分。
节点标识为由该节点所对应目录而生成的标识,该标识至少包括该节点所对应目录的路径信息(该路径信息中包括了该目录的名称)和计算出的散列值,根据具体情况该标识还可增加目录的修改时间、目录属性等信息。节点标识是节点比对的关键信息,虽然节点标识的数据量较小,但由于其记载了节点所对应目录的路径信息以及由目录下的文件及目录等信息综合计算出的散列值,因此可以较充分的体现出该节点的结构和内容信息,无论是该目录的路径信息变化,还是其包括的文件或目录的内容发生变化,均可以体现到节点标识的变化当中。
目录相关信息为该节点对应目录下的直属文件和目录的信息,对于直属文件来说,其信息包括文件的路径信息、基本信息和由文件的部分或全部内容或者与文件相关的信息通过散列计算而得到的散列值。这里的路径信息可以体现从至少根目录开始到该节点对应目录的层级关系,文件的基本信息包括文件名称、文件大小、文件属性和文件修改时间中的至少一种。对于不同类型的文件来说,还可以有其它的基本信息,也同样可以作为目录相关信息进行保存,这里就不再一一举例了。
直属文件的散列值可采用以下方式但不限于这些方式进行计算:a、通过MD5/SHA1等散列函数通过取出部分或全部文件内容来计算对应的MD5值/SHA1值作为直属文件的散列值;b、通过MD5/SHA1等散列函数对与直属文件相关的信息字符串进行计算,获得的散列值作为直属文件的散列值等。
对于该节点目录下的目录(即子目录)来说,其信息包括该子目录的路径信息、基本信息和散列值。该子目录的基本信息也同文件的基本信息类似,包括目录名称、目录大小、目录属性和目录修改时间中的至少一种。除此之外,还可以包括目录内的子目录和文件的数量等信息。
目录的散列值则由其所包括的子目录及直属文件的信息计算获得,下面介绍一种目录的散列值的计算实例,其基本计算过程包括:
对某个目录(即被扫描目录)内的所有文件和/或目录对应的散列值进行排序,并按照排序得到的顺序将被扫描目录内的所述所有文件和/或目录对应的散列值按照字符串的方式进行首尾相接方式的组合。这里的排序规则可根据需要预先进行设定,例如按照文件的散列值的大小进行从低到高的排列等。该目录内的子目录的散列值根据其所包括的直属文件决定,如果子目录内没有任何文件或目录,则可以将该子目录所对应的散列值设定为某个预设值(例如0),或者直接设置为空值。
排列后的散列值按照字符串的方式进行首尾相接方式的组合,以得到一个按照特定顺序组合的长字符串。根据具体情况(例如目录下有多个空子目录,仅依靠散列值难以区分),在该字符串中还允许按照一定规则增加补充的字符或者其他信息(例如路径信息、修改时间等)。
在组合得到了散列值字符串后,对其进行散列计算,得到对应的散列值作为所述被扫描目录对应的散列值。下面通过一个具体的例子来说明上述的计算过程。
在图4中的A11目录下具有三个文件,分别为A11A.txt、A11B.txt和A11C.txt,这三个文件分别对应的散列值为:
散列值1(aebf090a61e9b1715735ff3a11841d0a)
散列值2(d662438ecc338fa0962ef94c5aec8c39)
散列值3(a3dcb4d229de6fde0db5686dee47145d)
首先对散列值1、散列值2、散列值3排序,排序后得到:
散列值3(a3dcb4d229de6fde0db5686dee47145d)
散列值1(aebf090a61e9b1715735ff3a11841d0a)
散列值2(d662438ecc338fa0962ef94c5aec8c39)
然后按照排序后的结构拼接上述散列值,得到散列值字符串:
a3dcb4d229de6fde0db5686dee47145daebf090a61e9b1715735ff3a11841d0ad662438ecc338fa0962ef94c5aec8c39
对上述散列值字符串进行散列计算,计算得到新散列值:
bfe29f45ca25d91c4501064f0785e8c4,该散列值作为A11目录的散列值。
之所以采用排序拼接以及重新散列计算的过程,是考虑到散列计算的特殊性,采用不同的散列值的排列顺序所得到的散列值不同,而如果采用相同的排序规则,只要目录内的文件及子目录未发生变化,其散列值也不会发生变化,相应的排序结果以及最终计算出的新散列值也不会发生变化,从而确保了比对信息的一致性。如果不进行排序或者使用不同的排序规则,则可能因此排列顺序的不一致导致计算的散列值发生变化,此时可能文件系统并没有发生变化,这就会造成差异节点的误报。
利用上述的计算过程,每个文件及目录尽可被赋予一个散列值,用来生成相应的文件标识和节点标识,对于被扫描目录内既没有文件,也没有目录的情形,可以将被扫描目录的散列值设定为预设值或空值。
在获得了节点所对应目录的散列值后,可以根据被扫描目录的路径信息和计算出的散列值生成被扫描目录所对应节点的节点标识。例如:C:\A\A1\A11-bfe29f45ca25d91c4501064f0785e8c4,或者加入目录名称及修改时间信息,即C:\A\A1\A11-A11-2011.7.10.16.10-bfe29f45ca25d91c4501064f0785e8c4。根据预设规则,目录名称可以作为路径信息的一部分,也可以作为目录的基本信息。
客户端可以定期或根据内部/外部的指令对本地文件目录进行扫描分析,通过扫描分析尽可能发现本地文件系统所发生的细微变化,例如某个位置的同名文件的内容发生变化、新增的目录、文件的修改日期发生变化等等。而这种文件系统的变化会被客户端更新到其维护的第一标识树中,体现到每个发生变化的目录所对应的节点信息中。
在扫描分析的过程中,客户端需要对本地文件系统结构中各个目录进行遍历,并对遍历的目录进行扫描分析,获得对应的扫描结果。通过遍历过程可以尽可能的不遗漏文件系统结构中的任何变化,从而使客户端维护的第一标识树能够体现出客户端本地文件系统的整体情况。
应说明的是,本发明中的本地文件目录、本地文件系统、本地文件系统结构等说法不应仅理解为客户端内全部的文件目录,而应理解为对于客户端内某个目录内的全部子目录及分支同样适用。另外对于客户端内的某些受保护的目录或文件,例如其具有隐藏属性或受到账户授权的限制等,也可以根据情况被囊括或者不被囊括在第一标识树中节点所对应的节点信息内,其改变被计算或者不被计算在本发明快速文件比对范围内。
具体的目录遍历方法有很多种,例如从根目录开始逐层向下遍历,也可以先定位到所有分支中最下一层,然后从该层开始逐层向上遍历。在图5中,提供了一种具体的目录遍历流程的示意图,其中箭头表示出了被遍历的目录的先后次序。具体来说,该遍历流程包括:客户端从本地文件系统结构的根目录开始,根据排序规则逐级定位到相应路径分支的第一个末级目录;在每完成被定位目录的扫描分析后,检查同一级的其他目录中未扫描分析的目录,并判断该目录内是否存在目录,如果存在,则根据排序规则定位到该目录对应的路径分支的末级目录,否则定位在该目录;如果同一级的所有目录均已完成扫描分析,则根据排序规则定位到上一级的第一个目录,直到定位所述本地文件系统结构的根目录,完成所述根目录的扫描分析完成整个遍历过程。
从图5中可以看到,首先遍历过程从根目录C:开始一层一层定位到A11,然后从A11作为扫描分析的开端,扫描结束后就定位到其同层目录A12中的下级目录A121,再从目录A121到同层的目录A122,然后返回目录A12,由于该层的目录都已扫描分析完毕,则返回上一级的目录A1,再到同级的目录A2,然后返回上一级的目录A,然后再遍历到同层的目录B和目录C,最后返回到根目录C:作为此次遍历的结束点。这种遍历方式可以方便的将下层变化的目录信息体现到上层目录扫描的信息中,而无需重复遍历和重复计算。
在每遍历到一个目录时,都需要对该目录下的目录和文件进行扫描分析,并将扫描结果返回给客户端,而该扫描结果可以包括被扫描目录的路径信息、被扫描目录内所有文件和/或目录的路径信息、基本信息及对应的散列值。这里文件的基本信息包括文件名称、文件大小、文件属性和文件修改时间中的至少一种,目录的基本信息包括目录名称、目录大小、目录属性和目录修改时间中的至少一种。
客户端在获得了这些扫描结果后,会根据这些扫描结果中所体现的本地文件系统的变化对其维护的第一标识树中的相应节点进行更新,其更新过程参见图6,包括:
步骤201、所述客户端根据所述扫描结果生成相应的节点标识,将生成的节点标识与所述第一标识树中的对应节点的节点标识进行匹配;
步骤202、判断第一标识树中是否存在该生成的节点标识,是则执行步骤203,否则执行步骤204;
步骤203、判断该生成的节点标识是否与第一标识树中的对应节点匹配,是则确认不需更新,并结束操作,否则执行步骤205;
步骤204、根据所述扫描结果和所述生成的节点标识在所述第一标识树的相应位置增加新节点,作为所述生成的节点标识在所述第一标识树中的对应节点;
步骤205、根据该生成的节点标识对其在第一标识树中的对应节点的节点信息进行更新;
步骤206、在对当前节点的节点信息进行更新后,继续根据所述扫描结果中的被扫描目录的路径信息向上对当前节点的直属上级节点直到根节点逐层进行节点信息的更新。
在上述更新过程中,节点标识的生成可参见前面描述,这里就不再赘述了。
客户端在自身维护第一标识树的同时,还可以周期性的,或者选择空闲时间,或者根据外部或内部指令等将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对。比对时可以以个别节点信息的方式进行获取和比对,也可以从服务器端设备中获取部分或全部第二标识树的节点信息,这里优选以个别节点信息的方式进行获取比对的方式,因为按照以下介绍的比对流程,可以有效地减少客户端与服务器端设备的交互数据量,减轻网络负担。
标识树比对流程包括:客户端将服务器端设备维护的第二标识树与所述第一标识树从根节点开始比对,通过比对所述第二标识树与所述第一标识树的对应节点的节点标识是否不相同来确定当前节点是否为差异节点,如果当前节点不是差异节点,则继续比对当前节点的兄弟节点的节点标识,否则从当前节点的子节点继续进行比对;如果当前节点为根节点,且不是差异节点,则确定所述第一标识树与所述第二标识树之间不存在差异节点,比对过程结束。当比对出差异节点时,那么比对到最末层的子节点时,比对过程结束。
从上述比对流程可以看出,仅通过上层节点的比对就可以感知出该上层节点所对应的下层节点的变化,这是由于在计算节点标识时,当更新了某个节点标识后,对该节点上层逐级直到根节点均会因之而进行节点标识的更新。因此,每个节点都具有对其下属节点及文件变化的感知能力,依据此特性,在比对时标识树的最上层节点(即根节点)作为比对的开端,以此来确定其底层是否有变化,如果有变化,则继续向下感知,而对不变化的节点停止感知,这样直到找到所有的差异节点,而在服务器端设备更新时只需更新这些差异节点以及对应的变化文件,这样不仅比对速度很快,其更新过程也更加具有效率。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
下面通过几个实施例来对实现快速文件比对的客户端进行说明,如图7所示,为本发明实现快速文件比对的客户端的一实施例的结构示意图。在本实施例中,客户端包括:扫描分析单元11、标识树更新单元12、节点比对单元13、差异记录单元14和数据提供单元15。其中,扫描分析单元11负责对本地文件目录进行扫描分析。标识树更新单元12负责根据本地文件系统的变化更新所述客户端维护的第一标识树,所述第一标识树中的各个节点与所述客户端的本地文件系统结构中的各个目录相对应,每个节点保存的节点信息包括节点标识和目录相关信息。
节点比对单元13负责将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对。差异记录单元14负责记录所述第一标识树相比于所述第二标识树的差异节点和该差异节点对应的变化文件。数据提供单元15负责根据记录的所述差异节点及变化文件向所述服务器端设备段提供数据,以供所述服务器端设备维护的第二标识树和存储文件进行更新。
在上述实施例中,扫描分析单元11可以具体包括:目录遍历组件和扫描分析组件,其中目录遍历组件用于对所述本地文件系统结构中各个目录进行遍历,扫描分析组件用于对遍历的目录进行扫描分析,获得对应的扫描结果。具体的遍历方法可参见前面快速文件比对方法实施例中介绍的内容,这里就不再赘述了。
扫描分析单元11所得到的扫描结果至少包括被扫描目录的路径信息、被扫描目录内所有文件和/或目录的路径信息、基本信息及对应的散列值等。相应的,如图8所示,标识树更新单元具体包括:节点标识生成组件121、节点标识匹配组件122、新节点生成组件123、节点信息更新组件124和向上逐级更新组件125。
节点标识生成组件121用于根据所述扫描结果生成相应的节点标识。节点标识匹配组件122用于将生成的节点标识与所述第一标识树中的对应节点的节点标识进行匹配。
新节点生成组件123用于在所述第一标识树中不存在对应节点时,根据所述扫描结果和所述生成的节点标识在所述第一标识树的相应位置增加新节点,作为所述生成的节点标识在所述第一标识树中的对应节点。
节点信息更新组件124用于根据所述扫描结果和所述生成的节点标识对所述对应节点的节点信息进行更新。向上逐级更新组件125用于在对当前节点的节点信息进行更新后,继续根据所述扫描结果中的被扫描目录的路径信息向上对当前节点的直属上级节点直到根节点逐层进行节点信息的更新。
在另一个客户端的实施例中,节点标识生成组件可以具体包括:
排序子组件,用于对被扫描目录内的所有文件和/或目录对应的散列值进行排序;
散列值组合子组件,用于按照排序得到的顺序将被扫描目录内的所述所有文件和/或目录对应的散列值按照字符串的方式进行首尾相接方式的组合;
散列计算子组件,用于对组合得到的散列值字符串进行散列计算,得到对应的散列值作为所述被扫描目录对应的散列值;
节点标识生成子组件,用于根据所述被扫描目录的路径信息和计算出的散列值生成所述被扫描目录所对应节点的节点标识。
在另一个实施例中,节点比对单元可以具体包括:
比对位置选择组件,用于以根节点作为比对的初始位置开始比对,在比对过程中,如果当前节点不是差异节点,则选择当前节点的兄弟节点继续进行比对,否则选择当前节点的子节点继续进行比对;
节点标识比对组件,用于比对所述第二标识树与所述第一标识树的对应节点的节点标识是否不相同;
差异节点确认组件,用于当所述第二标识树与所述第一标识树的对应节点的节点标识不相同时,确认当前节点为差异节点,当所述第二标识树与所述第一标识树的对应节点的节点标识相同时,确认当前节点不是差异节点。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制;尽管参照较佳实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者对部分技术特征进行等同替换;而不脱离本发明技术方案的精神,其均应涵盖在本发明请求保护的技术方案范围当中。
Claims (13)
1.一种快速文件比对方法,包括:
客户端对本地文件目录进行扫描分析,并根据本地文件系统的变化更新所述客户端维护的第一标识树,所述第一标识树中的各个节点与所述客户端的本地文件系统结构中的各个目录相对应,每个节点保存的节点信息包括节点标识和目录相关信息,所述节点标识为由该节点所对应目录而生成的标识,至少包括该节点所对应目录的路径信息和由该节点所对应目录包括的子目录及直属文件的信息计算出的散列值;
所述客户端将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对,记录所述第一标识树相比于所述第二标识树的差异节点和该差异节点对应的变化文件;
所述客户端根据记录的差异节点及变化文件向所述服务器端设备提供数据,以供所述服务器端设备维护的第二标识树和存储文件进行更新;
所述客户端将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对的操作具体包括:
所述客户端将服务器端设备维护的第二标识树与所述第一标识树从根节点开始比对,通过比对所述第二标识树与所述第一标识树的对应节点的节点标识是否不相同来确定当前节点是否为差异节点,如果当前节点不是差异节点,则继续比对当前节点的兄弟节点的节点标识,否则从当前节点的子节点继续进行比对;
如果当前节点为根节点,且不是差异节点,则确定所述第一标识树与所述第二标识树之间不存在差异节点。
2.根据权利要求1所述的方法,其中所述客户端对本地文件目录进行扫描分析的操作具体包括:
所述客户端对所述本地文件系统结构中各个目录进行遍历,并对遍历的目录进行扫描分析,获得对应的扫描结果。
3.根据权利要求2所述的方法,其中所述客户端对所述本地文件系统结构中各个目录进行遍历的操作具体包括:
所述客户端从所述本地文件系统结构的根目录开始,根据排序规则逐级定位到相应路径分支的第一个末级目录;
在每完成被定位目录的扫描分析后,检查同一级的其他目录中未扫描分析的目录,并判断该目录内是否存在目录,如果存在,则根据排序规则定位到该目录对应的路径分支的末级目录,否则定位在该目录;
如果同一级的所有目录均已完成扫描分析,则根据排序规则定位到上一级的第一个目录,直到定位所述本地文件系统结构的根目录,完成所述根目录的扫描分析,从而完成整个遍历过程。
4.根据权利要求2或3所述的方法,其中,所述扫描结果包括被扫描目录的路径信息、被扫描目录内所有文件和/或目录的路径信息、基本信息及对应的散列值;
所述根据本地文件系统的变化更新所述客户端维护的第一标识树的操作具体包括:
所述客户端根据所述扫描结果生成相应的节点标识,并将生成的节点标识与所述第一标识树中的对应节点的节点标识进行匹配;
如果与所述第一标识树中的对应节点不匹配,则根据所述扫描结果和所述生成的节点标识对所述对应节点的节点信息进行更新;
如果所述第一标识树中不存在对应节点,则根据所述扫描结果和所述生成的节点标识在所述第一标识树的相应位置增加新节点,作为所述生成的节点标识在所述第一标识树中的对应节点,并对所述新节点的节点信息进行更新;
在对当前节点的节点信息进行更新后,继续根据所述扫描结果中的被扫描目录的路径信息向上对当前节点的直属上级节点直到根节点逐层进行节点信息的更新。
5.根据权利要求4所述的方法,其中文件的基本信息包括文件名称、文件大小、文件属性和文件修改时间中的至少一种,目录的基本信息包括目录名称、目录大小、目录属性和目录修改时间中的至少一种。
6.根据权利要求4所述的方法,其中,所述生成相应的节点标识的操作具体包括:
对被扫描目录内的所有文件和/或目录对应的散列值进行排序,并按照排序得到的顺序将被扫描目录内的所述所有文件和/或目录对应的散列值按照字符串的方式进行首尾相接方式的组合;
对组合得到的散列值字符串进行散列计算,得到对应的散列值作为所述被扫描目录对应的散列值;
根据所述被扫描目录的路径信息和计算出的散列值生成所述被扫描目录所对应节点的节点标识。
7.根据权利要求6所述的方法,其中如果所述被扫描目录内既没有文件,也没有目录,则所述被扫描目录的散列值设定为预设值或空值。
8.根据权利要求1所述的方法,其中所述第一标识树和第二标识树中的全部节点均遵循快速文件交换协议。
9.一种实现快速文件比对的客户端,包括:
扫描分析单元,用于对本地文件目录进行扫描分析;
标识树更新单元,用于根据本地文件系统的变化更新所述客户端维护的第一标识树,所述第一标识树中的各个节点与所述客户端的本地文件系统结构中的各个目录相对应,每个节点保存的节点信息包括节点标识和目录相关信息,所述节点标识为由该节点所对应目录而生成的标识,至少包括该节点所对应目录的路径信息和由该节点所对应目录包括的子目录及直属文件的信息计算出的散列值;
节点比对单元,用于将服务器端设备维护的第二标识树与所述第一标识树进行逐个节点的比对;
差异记录单元,用于记录所述第一标识树相比于所述第二标识树的差异节点和该差异节点对应的变化文件;
数据提供单元,用于根据记录的差异节点及变化文件向所述服务器端设备提供数据,以供所述服务器端设备维护的第二标识树和存储文件进行更新;
所述节点比对单元具体包括:
比对位置选择组件,用于以根节点作为比对的初始位置开始比对,在比对过程中,如果当前节点不是差异节点,则选择当前节点的兄弟节点继续进行比对,否则选择当前节点的子节点继续进行比对;
节点标识比对组件,用于比对所述第二标识树与所述第一标识树的对应节点的节点标识是否不相同;
差异节点确认组件,用于当所述第二标识树与所述第一标识树的对应节点的节点标识不相同时,确认当前节点为差异节点,当所述第二标识树与所述第一标识树的对应节点的节点标识相同时,确认当前节点不是差异节点。
10.根据权利要求9所述的客户端,其中所述扫描分析单元具体包括:
目录遍历组件,对所述本地文件系统结构中各个目录进行遍历;
扫描分析组件,对遍历的目录进行扫描分析,获得对应的扫描结果。
11.根据权利要求10所述的客户端,其中所述扫描结果包括被扫描目录的路径信息、被扫描目录内所有文件和/或目录的路径信息、基本信息及对应的散列值;
所述标识树更新单元具体包括:
节点标识生成组件,用于根据所述扫描结果生成相应的节点标识;
节点标识匹配组件,用于将生成的节点标识与所述第一标识树中的对应节点的节点标识进行匹配;
新节点生成组件,用于在所述第一标识树中不存在对应节点时,根据所述扫描结果和所述生成的节点标识在所述第一标识树的相应位置增加新节点,作为所述生成的节点标识在所述第一标识树中的对应节点;
节点信息更新组件,用于根据所述扫描结果和所述生成的节点标识对所述对应节点的节点信息进行更新;
向上逐级更新组件,用于在对当前节点的节点信息进行更新后,继续根据所述扫描结果中的被扫描目录的路径信息向上对当前节点的直属上级节点直到根节点逐层进行节点信息的更新。
12.根据权利要求11所述的客户端,其中所述节点标识生成组件具体包括:
排序子组件,用于对被扫描目录内的所有文件和/或目录对应的散列值进行排序;
散列值组合子组件,用于按照排序得到的顺序将被扫描目录内的所述所有文件和/或目录对应的散列值按照字符串的方式进行首尾相接方式的组合;
散列计算子组件,用于对组合得到的散列值字符串进行散列计算,得到对应的散列值作为所述被扫描目录对应的散列值;
节点标识生成子组件,用于根据所述被扫描目录的路径信息和计算出的散列值生成所述被扫描目录所对应节点的节点标识。
13.一种快速文件比对系统,包括:权利要求9~12任一所述的客户端以及维护有第二标识树和与第二标识树中各节点对应的存储文件的服务器端设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210156032.1A CN102693302B (zh) | 2012-05-21 | 2012-05-21 | 快速文件比对方法、系统及客户端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210156032.1A CN102693302B (zh) | 2012-05-21 | 2012-05-21 | 快速文件比对方法、系统及客户端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102693302A CN102693302A (zh) | 2012-09-26 |
CN102693302B true CN102693302B (zh) | 2015-04-22 |
Family
ID=46858736
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210156032.1A Active CN102693302B (zh) | 2012-05-21 | 2012-05-21 | 快速文件比对方法、系统及客户端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102693302B (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103812912B (zh) * | 2012-11-14 | 2018-01-19 | 北京慧点科技股份有限公司 | 一种维护组织结构信息的方法及装置 |
CN103970728A (zh) * | 2013-02-01 | 2014-08-06 | 中国银联股份有限公司 | 一种文件的比对方法和系统 |
CN103226593B (zh) * | 2013-04-17 | 2016-08-24 | 马鞍山百助网络科技有限公司 | 一种文件系统的管理方法及其文件存储终端 |
CN104915381A (zh) * | 2015-05-18 | 2015-09-16 | 北京联信永通信息技术有限公司 | 一种数据变更感知和快速同步的方法 |
CN105007310A (zh) * | 2015-06-30 | 2015-10-28 | 深圳走天下科技有限公司 | 信息同步方法、装置和系统 |
CN104991963B (zh) * | 2015-07-23 | 2018-09-25 | 中国工商银行股份有限公司 | 文件处理方法和装置 |
CN105141681B (zh) * | 2015-08-18 | 2018-07-31 | 北龙中网(北京)科技有限责任公司 | Rpki文件的同步方法及装置 |
CN105338073A (zh) * | 2015-10-20 | 2016-02-17 | 浪潮集团有限公司 | 一种文件目录的处理方法、服务器和系统 |
CN106657170B (zh) * | 2015-10-28 | 2021-03-30 | 斑马智行网络(香港)有限公司 | 一种数据同步方法及装置 |
CN107357691B (zh) * | 2016-05-09 | 2022-06-21 | 中兴通讯股份有限公司 | 镜像文件的处理方法及装置 |
CN106484893B (zh) * | 2016-10-20 | 2019-08-09 | 青岛海信电器股份有限公司 | 机型批量整改中的差异数据查找方法及装置 |
CN106790648A (zh) * | 2017-01-15 | 2017-05-31 | 网宿科技股份有限公司 | 一种任务数据同步的方法和系统 |
CN108108425A (zh) * | 2017-12-18 | 2018-06-01 | 苏州蜗牛数字科技股份有限公司 | 文本处理比较方法以及装置 |
CN109951731B (zh) * | 2017-12-21 | 2021-06-15 | 深圳Tcl数字技术有限公司 | 解决外部存储设备重复扫描的方法、系统及存储介质 |
US10866963B2 (en) * | 2017-12-28 | 2020-12-15 | Dropbox, Inc. | File system authentication |
CN108509612A (zh) * | 2018-03-30 | 2018-09-07 | 北京润科通用技术有限公司 | 一种数据处理方法及装置 |
CN108874884B (zh) * | 2018-05-04 | 2021-05-04 | 广州多益网络股份有限公司 | 数据同步更新方法、装置和系统、服务器设备 |
CN110895784A (zh) * | 2018-08-23 | 2020-03-20 | 京东数字科技控股有限公司 | 数据处理方法和装置 |
CN110377565A (zh) * | 2019-07-24 | 2019-10-25 | 东软集团股份有限公司 | 一种多媒体数据库的同步方法及车机 |
CN110795290A (zh) * | 2019-10-30 | 2020-02-14 | 杭州迪普科技股份有限公司 | 一种双机配置策略一致性检测方法及装置 |
CN110944043A (zh) * | 2019-11-14 | 2020-03-31 | 北京无限光场科技有限公司 | 媒介信息的显示方法、装置、设备及介质 |
CN112115110A (zh) * | 2020-08-14 | 2020-12-22 | 南京航空航天大学 | 一种对文件进行编号的同步备份方法 |
CN112558994A (zh) * | 2020-12-23 | 2021-03-26 | 上海眼控科技股份有限公司 | 一种应用软件的升级方法、装置、设备和存储介质 |
CN113783734A (zh) * | 2021-09-22 | 2021-12-10 | 杭州安恒信息技术股份有限公司 | 一种配置数据同步方法、存储介质及相关设备 |
CN114095494B (zh) * | 2021-11-18 | 2023-08-22 | 厦门市美亚柏科信息股份有限公司 | 一种用于快速下载文件的方法和系统 |
CN114356245B (zh) * | 2022-01-12 | 2023-09-22 | 济南点量软件有限公司 | 一种海量文件快速比对更新的方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110788A (zh) * | 2006-07-20 | 2008-01-23 | 阿里巴巴公司 | 升级客户端软件的方法及系统 |
CN101212602A (zh) * | 2006-12-30 | 2008-07-02 | 中兴通讯股份有限公司 | 手持数字视频广播中电子服务指南信息更新的实现方法 |
CN101459503A (zh) * | 2007-12-12 | 2009-06-17 | 华为技术有限公司 | 一种实现数据同步的方法和装置 |
CN102082959A (zh) * | 2009-11-26 | 2011-06-01 | 深圳市闪联信息技术有限公司 | 一种嵌入式平台中同步epg服务器内容的方法及装置 |
CN102360410A (zh) * | 2011-09-30 | 2012-02-22 | 许式伟 | 文件系统的用户操作发现方法和应用该方法的同步系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1934807A4 (en) * | 2005-08-09 | 2011-08-17 | Zalag Corp | METHODS AND APPARATUS FOR ASSEMBLING, EXTRACTING AND DEPLOYING THE CONTENT OF ELECTRONIC DOCUMENTS |
CN101453418B (zh) * | 2007-12-05 | 2011-01-12 | 高德软件有限公司 | 客户端与服务器同步的更新方法 |
-
2012
- 2012-05-21 CN CN201210156032.1A patent/CN102693302B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110788A (zh) * | 2006-07-20 | 2008-01-23 | 阿里巴巴公司 | 升级客户端软件的方法及系统 |
CN101212602A (zh) * | 2006-12-30 | 2008-07-02 | 中兴通讯股份有限公司 | 手持数字视频广播中电子服务指南信息更新的实现方法 |
CN101459503A (zh) * | 2007-12-12 | 2009-06-17 | 华为技术有限公司 | 一种实现数据同步的方法和装置 |
CN102082959A (zh) * | 2009-11-26 | 2011-06-01 | 深圳市闪联信息技术有限公司 | 一种嵌入式平台中同步epg服务器内容的方法及装置 |
CN102360410A (zh) * | 2011-09-30 | 2012-02-22 | 许式伟 | 文件系统的用户操作发现方法和应用该方法的同步系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102693302A (zh) | 2012-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102693302B (zh) | 快速文件比对方法、系统及客户端 | |
US10776396B2 (en) | Computer implemented method for dynamic sharding | |
EP2302538B1 (en) | Method and system for capturing change of data | |
US9646030B2 (en) | Computer-readable medium storing program and version control method | |
CN105740303B (zh) | 改进的对象存储的方法及装置 | |
CN105074724A (zh) | 使用列式数据库中的直方图进行有效查询处理 | |
US8868502B2 (en) | Organizing versioning according to permissions | |
US8364723B1 (en) | Apparatus and method for realizing big data into a big object and non-transitory tangible machine-readable medium thereof | |
CN104603774A (zh) | 迁移目的地文件服务器和文件系统迁移方法 | |
CN105468473A (zh) | 数据迁移方法及数据迁移装置 | |
CN104298690A (zh) | 为关系数据库表建立索引结构并进行查询的方法和装置 | |
MX2010011958A (es) | Sincronizacion de documento a traves de protocolos sin estado. | |
US20150248421A1 (en) | System and method for recovering system status consistently to designed recovering time point in distributed database | |
CN108334515A (zh) | 一种处理崩溃文件中堆栈地址的方法、装置及系统 | |
CN110347651A (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN101184091A (zh) | 一种确定相似文件的方法及装置 | |
US10489356B1 (en) | Truncate and append database operation | |
Liang et al. | Mid-model design used in model transition and data migration between relational databases and nosql databases | |
CN105630475A (zh) | 一种数据标签组织系统及组织方法 | |
US20180032560A1 (en) | Index b-tree maintenance for linear sequential insertion | |
CN105205118A (zh) | 一种基于文件分块的镜像文件同步方法 | |
WO2020209832A1 (en) | Tracking attribution of content in an online collaborative electronic document | |
CN106326393A (zh) | 一种小图片的存储、读取方法和装置 | |
CA2702133A1 (en) | Redistribute native xml index key shipping | |
Singh et al. | Nonreplicated Static Data Allocation in Distributed Databases Using Biogeography‐Based Optimization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |