关于文件夹同步的那点事

摘要

        本文分析了文件夹之间进行一对一同步所涉及的概念,并根据这一概念,分析出实现文件夹之间同步背后的模型,以及遇到的问题。本文最后还对文件夹之间一对多的特殊情况进行分析。

概念

        所谓文件夹同步,就是通过同步操作,将两个文件夹中的内容保持一致,即所包含的文件和文件夹(如无特殊说明,下文中用文件指代文件和文件夹)的内容是一样的。此处的文件夹指代的是广义的文件夹,可以是本地,也可以是远程。

        文件夹同步类型包括:一次性同步、实时修改同步。

        一次性同步是指,执行一次同步后,两个文件夹中的内容即一致。同步后,又修改。若想再次保持一致,则必须再次执行一次性同步。

        实时修改同步则指的是,文件夹处于监控状态中,可即使获知文件夹内某个文件或文件夹的修改,此时仅需要针对修改的文件进行同步。Windows平台和Linux平台都支持文件修改的实时监控。网络文件夹的监控则需要网络协议的支持。

        真正的文件夹同步操作,往往是两者的结合。

思路

        若将每个文件或文件夹看成一个元素,那么同步文件夹内的文件和文件夹就组成了一个集合,如下图所示的A。所谓文件夹同步,就是将集合A和集合B根据某种规则变成同一个集合C。


        为了得到这种规则,需要将集合的模型细化。考虑集合A->C的情况,如下图所示。当集合A中的文件转化集合C时,文件可以分三部分:第一部分是集合D,只作了文件的修改(内容或属性的修改,文件位置的移动)。第二部分是集合A-D:删除的文件。第三部分是集合C-D:新增的文件。


        由此,我们可以得到文件的修改类型:新建,更新,改名(包含文件名称的修改和文件位置的移动),删除。

        现在考虑下A、B两边同时修改的情况:

        1)A未修改,B未修改:不同步。

        2)A修改,B未修改:集合B需要参考A的当前状态进行修改。

        3)A未修改,B修改:集合A需要参考B的当前状态进行修改。

        4)A修改,B修改:如果两边的修改时相对独立的,就可以互相参考着同步。若对同一文件,两边都有修改,需要考虑冲突情况处理。一端文件可能的修改有四种情况,此时需要查看另一端的状态,需要增加两种(无和不存在)。冲突的处理中,最复杂的就是两边同时改名文件夹时的情况。但是无论怎么处理,都应该保证文件数据不丢失。

        对整个集合之间的同步操作属于一次性同步。若是实时修改同步,实际上就是对集合中某个文件进行的同步,所采用的规则是一样的。

一对多同步

        所谓一对多同步,就是指一个文件夹,有多个文件夹与之同步,且要保证所有文件夹之间的文件是一样的。此场景出现在当前比较火的云盘同步上。在这种情况下,我们将一个文件夹称之为服务端,多个文件夹称之为客户端。此时,又会增加一些问题:

        1)当多个客户端操作单个文件的时候,需要在服务端对此文件进行互斥操作。

        2)应该在服务端增加类似于SVN的文件版本记录功能,以防止用户数据的丢失。此时,可以根据需要,记录下文件修改的一些附属信息,比如:修改时间、修改的客户端名称等。

后语

        本系列后续文章,将根据本文,详细介绍文件夹同步中的一些细节,请持续关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值