发明内容
本发明的发明目的是解决上述现有的文件同步技术中如何有效地处理重命名操作的问题,以降低多设备同步系统的复杂性和减少重命名相关的数据传输量。
为实现上述发明目的,本发明提供了一种多设备间文件同步的重命名处理方法,该方法包括:
步骤1,目的进程向服务器或源进程发送获取同步信息的请求;
步骤2,所述服务器查询服务器端所有文件的当前元数据,获取所述同步信息并发送给所述目的进程;或所述源进程查询源进程端所有文件的当前元数据,获取所述同步信息并发送给所述目的进程;
步骤3,所述目的进程比较所述同步信息与本地文件元数据,确定新添加文件集合和被删除的文件集合,从而计算得出重命名操作;
步骤4,所述目的进程执行所述重命名操作,根据执行结果调整重命名后的文件属性、更新本地元数据信息。
进一步的,所述步骤1之前还包括源进程处理步骤:
源进程监控同步目录,当检测到一个文件A被重命名为文件B时,将该重命名映射为{删除文件A,添加文件B},据此映射调整并记录文件A、B的元数据信息,并在有所述服务器时将所述元数据信息发送给服务器。
进一步的,所述服务器端的当前元数据,是指服务器最后一次与任意终端通信并更新后的文件元数据;所述源进程端的当前元数据,是指源进程处理完所有监控到的源进程端事件后,能准确反应源进程端文件状态的文件元数据。
其中所述同步信息为文件元数据的列表,该列表须包含以下信息要素:新添加的文件路径及其文件指纹;要删除的文件路径及其文件指纹,其中所述文件路径指的是文件相对于同步目录的路径,所述文件指纹是采用数据摘要算法产生文件内容的信息摘要,在概率上唯一的标识该文件内容。
进一步的,所述步骤3包括:
步骤31,所述目的进程分别从所述新添加文件集合和被删除的文件集合中选取具有相同文件指纹的文件各一个,将其映射为一个重命名操作,并从两个集合中分别删除;
步骤32,,重复所述步骤31的操作直到两个集合中任意一个为空或者不存在文件指纹相同的元素为止。
进一步的,所述目的进程不对目录执行计算和重命名操作,而是直接处理目录的添加和删除操作。
进一步的,所述映射和记录操作包括:显式的操作,通过监控同步目录,一旦检测到重命名操作,则修改本地文件元数据中对应文件的状态;隐含的操作,定期扫描同步目录,重新生成本地文件元数据信息。
进一步的,所述步骤1之前源进程处理步骤还包括:
目录重命名的处理步骤,所述源进程监控到所述同步目录下某目录的重命名操作时,则将该重命名映射为该目录本身和其下所有文件和子目录的相应的{添加,删除}操作,并据此映射调整和记录以及发送相应的元数据。
为实现上述发明目的,本发明还提供一种多设备间文件同步的重命名处理系统,该系统包括:
发送请求模块,用于通过目的进程向服务器或源进程发送获取同步信息的请求;
获取请求模块,用于通过所述服务器查询服务器端所有文件的当前元数据,获取所述同步信息并发送给所述目的进程;或用于通过所述源进程查询源进程端所有文件的当前元数据,获取所述同步信息并发送给所述目的进程。
计算处理模块,用于通过所述目的进程比较所述同步信息与本地文件元数据,确定新添加文件集合和被删除的文件集合,从而计算得出重命名操作;
执行操作模块,用于通过所述目的进程执行所述重命名操作,根据执行结果调整重命名后的文件属性、更新本地元数据信息。
进一步的,所述发送请求模块之前还包括
源进程处理模块,用于通过源进程监控同步目录,当检测到一个文件A被重命名为文件B时,将该重命名映射为{删除文件A,添加文件B},据此映射调整并记录文件A、B的元数据信息,并且在有所述服务器的情况下,将所述元数据信息发送给服务器。
进一步的,所述计算处理模块包括:
执行模块,所述目的进程分别从所述新添加文件集合和被删除的文件集合中选取具有相同文件指纹的文件各一个,将其映射为一个重命名操作,并从两个集合中分别删除;
结果获得模块,重复所述步骤31的操作直到两个集合中任意一个为空或者不存在文件指纹相同的元素为止。
进一步的,所述发送请求模块之前还包括:
目录重命名的处理模块,所述源进程监控到所述同步目录下某目录的重命名操作时,则将该重命名映射为该目录本身和其下所有文件和子目录的相应的{添加,删除}操作,并据此映射调整和记录以及发送相应的元数据。
进一步的,所述映射和记录显式的实施,通过监控同步目录,一旦检测到重命名操作,则修改本地文件元数据中对应文件的状态;或隐含的完成,定期扫描同步目录,重新生成本地文件元数据信息。
本发明的有益功效在于,解决现有的文件同步技术中如何有效地处理重命名操作的问题,以降低多设备同步系统的复杂性和减少重命名相关的数据传输量;基于状态元数据的同步信息保证了信息的可重入性,解决了处理中操作顺序的依赖,也不用关心传输过程中操作丢失的情况,降低了处理过程的复杂度。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
具体实施方式
图1是本发明的多设备间文件同步的重命名处理方法流程图。图1所示,该方法包括:
步骤1,目的进程向服务器(有服务器的情况)或源进程(无服务器的情况)发送获取同步信息的请求;
步骤2,所述服务器查询服务器端所有文件的当前元数据,获取所述同步信息并发送给所述目的进程;或者所述源进程查询源进程端所有文件的当前元数据,获取所述同步信息并发送给所述目的进程;
步骤3,所述目的进程比较所述同步信息与本地文件元数据,确定新添加文件集合和被删除的文件集合,从而计算得出重命名操作;
步骤4,所述目的进程执行所述重命名操作,根据执行结果调整重命名后的文件属性、更新本地元数据信息。
进一步的,所述步骤1之前还包括源进程处理步骤:
源进程监控同步目录,当检测到一个文件A被重命名为文件B时,将该重命名映射为{删除文件A,添加文件B},据此映射调整并记录文件A、B的元数据信息,并在有服务器的情况下,将所述元数据信息发送给服务器。
其中所述服务器端当前元数据,是指服务器最后一次与任意终端通信并更新后的文件元数据;所述源进程端当前元数据,是指源进程处理完所有监控到的事件后,能准确反映源进程端所有文件的当前状态的文件元数据。
其中所述同步信息为文件元数据的列表,该列表须包含以下信息要素:新添加的文件路径及其文件指纹;要删除的文件路径及其文件指纹,其中所述文件路径指的是文件相对于同步目录的路径,所述文件指纹是采用数据摘要算法产生文件内容的信息摘要,在概率上唯一的标识该文件内容。
其中所述映射和记录显式的实施,通过监控同步目录,一旦检测到重命名操作,则修改本地文件元数据中对应文件的状态;或隐含的完成,定期扫描同步目录,重新生成本地文件元数据信息。
所述步骤3计算得出重命名操作还进一步包括如下处理:(1)目的进程分别从添加文件集合和删除文件集合中选取具有相同文件指纹的文件各一个,将其映射为一个重命名操作,并从两个集合中分别删除。(2)重复所述(1)的操作直到两个集合中任意一个为空或者不存在文件指纹相同的元素为止。
所述步骤1之前的源进程处理步骤还进一步包括目录重命名的处理:源进程监控到同步目录下目录的重命名操作时,则将该重命名映射为该目录本身和目录下所有文件和子目录的相应的{添加,删除}操作,并据此映射调整和记录以及(有服务器时)发送相应的元数据。
所述步骤3和步骤4还进一步包括目录重命名的处理:目的进程不对目录执行重命名操作,以避免目录重命名的副作用(子目录和文件也被重命名),而是直接的处理目录的添加和删除操作。图2是本发明的多设备间文件同步的重命名处理系统示意图;图1所示,该系统包括:
发送请求模块100,用于通过目的进程向服务器或源进程发送获取同步信息的请求;
获取请求模块200,用于通过所述服务器查询服务器端所有文件的当前元数据,获取所述同步信息并发送给所述目的进程;或者用于所述源进程查询源进程端所有文件的当前元数据,获取所述同步信息并发送给所述目的进程;
计算处理模块300,用于通过所述目的进程比较所述同步信息与本地文件元数据,确定新添加文件集合和被删除的文件集合,从而计算得出重命名操作;
执行操作模块400,用于通过所述目的进程执行所述重命名操作,根据执行结果调整重命名后的文件属性、更新本地元数据信息。
进一步的,所述发送请求模块100之前还包括
源进程处理模块,用于通过源进程监控同步目录,当检测到一个文件A被重命名为文件B时,将该重命名映射为{删除文件A,添加文件B},据此映射调整并记录文件A、B的元数据信息,并且在有服务器的情况下,将所述元数据信息发送给服务器。
进一步的,所述源进程处理模块还包括
源进程发送模块,用于在有服务器的情况下,将调整并记录后的元数据信息发送给服务器。
其中所述服务器端当前元数据,是指服务器最后一次与任意终端通信并更新后的文件元数据;所述源进程端当前元数据,是指源进程处理完所有监控到的事件后,能准确反映源进程端所有文件的当前状态的文件元数据。
其中所述同步信息为文件元数据的列表,该列表须包含以下信息要素:新添加的文件路径及其文件指纹;要删除的文件路径及其文件指纹,其中所述文件路径指的是文件相对于同步目录的路径,所述文件指纹是采用数据摘要算法产生文件内容的信息摘要,在概率上唯一的标识该文件内容。
其中所述映射和记录显式的实施,通过监控同步目录,一旦检测到重命名操作,则修改本地文件元数据中对应文件的状态;或隐含的完成,定期扫描同步目录,重新生成本地文件元数据信息。
进一步的,所述计算处理模块包括:
执行模块,所述目的进程分别从所述新添加文件集合和被删除的文件集合中选取具有相同文件指纹的文件各一个,将其映射为一个重命名操作,并从两个集合中分别删除;
结果获得模块,重复所述步骤31的操作直到两个集合中任意一个为空或者不存在文件指纹相同的元素为止。
进一步的,所述发送请求模块之前还包括:
目录重命名的处理模块,所述源进程监控到所述同步目录下某目录的重命名操作时,则将该重命名映射为该目录本身和其下所有文件和子目录的相应的{添加,删除}操作,并据此映射调整和记录以及发送相应的元数据。
图3描述了本发明一实施例的文件同步流程图。本实施例有服务器,文件同步具体步骤如下:
初始状态:终端设备A(以下简称“终端A”)、终端设备B(以下简称“终端B”)和服务器处于同步状态。同步目录下存在目录dirD包含文件/fileA.txt、/fileB.txt、/dirD/fileC.txt三者通过表(具体实现可以使数据库也可以是文件)来维护同步目录状态,初始表状态如下:
设备A、B:
服务器:
101用户在设备终端中进行重命名操作(事件,非本方法的步骤)
具体地,假设用户在终端上进行了如下操作:重命名fileA.txt为fileA1.txt;重命名dirD为dirE;将fileB.txt移动到dirE下。在本流程中,我们仅关注文件的重命名操作。这里的重命名可以使文件的重命名操作,也可以是文件的移动操作。
102终端检测到重命名操作将其处理为{添加,删除}对
具体地,假设终端A是通过ReadDirectoryChanges机制监控同步目录。检测到上述操作之后,将其转化为{删除/fileA.txt,添加fileA1.txt}、{删除/dirD,添加/dirE}、{删除/dirD/fileC.txt,添加/dirE/fileC.txt}、{删除/fileB.txt,添加/dirE/fileB.txt}四对操作,对这四对操作进行处理并得到如下的本地状态。
103终端将文件添加、删除状态提交给服务器
具体地,终端A根据本地是否需要提交信息标志确定送给服务器信息。本例中信息的内容如下:
104服务器处理提交请求并更新服务器端文件元数据
具体地,服务器处理上述请求,更新本地文件元信息如下下表所示。
201获取同步信息请求
具体的,终端B向服务器发送获取同步信息请求,以获得同步信息。
202生成同步信息
具体地,服务器查询服务器端所有文件的当前元数据,根据B是否已同步标志确定需要发送给B的同步信息。所述文件的当前元数据,一般是指服务器最后一次与任意终端通信并更新后的文件元数据。本例中,生成的同步信息如下:
203返回同步信息
具体地,服务器将上述同步信息发送给终端B。
204处理同步信息,计算重命名操作
具体地,终端B比较上述同步信息和本地文件元数据,可以确定如下新增文件集合{/fileA.txt,/dirE/fileB.txt,/dirE/fileC.txt},删除文件集合{/fileA.txt,/fileB.txt,/dirD/fileC.txt}(注意:目录不在两个集合中).根据本专利所述处理规则,计算得出如下重命名操作:重命名/fileA.txt到/fileA1.txt,重命名(移动)/fileB.txt为/dirE/fileB.txt,重命名(移动)/dirD/fileC.txt为/dirD/fileC.txt。
205处理重命名操作,调整文件属性,更新本地元数据信息
具体的,终端B执行上述重命名操作,可以顺序也可以并发。在执行过程中创建需要的目录/dirE。根据执行结果,调整和更新本地的元数据。例如,在所有操作成功的情况下,更新后本地元数据如下:
206在重命名的基础上,执行其它文件操作完成此次同步
具体的,终端B在上述重命名的基础上,重新计算尚需完成的文件操作。本例中,所有文件操作都已完成,目录/dirE的创建操作由于重命名操作的副作用也已完成。唯一需要完成的是/dirD的删除操作。因此,终端B根据上述计算结果,进一步执行/dirD的删除操作,并根据执行结果调整本地元数据。在所有操作成功的情况下,更新后本地元数据如下,完成本次同步操作。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。