安全网盘系统中一种基于目录树的数据同步方法

文档序号:7852763阅读:226来源:国知局
专利名称:安全网盘系统中一种基于目录树的数据同步方法
技术领域
基于目录树的数据同步方法属于多机同步领域,尤其涉及其中文件同步领域。
背景技术
数据同步是指同一份数据在不同的存储设备或终端与服务器、终端与终端之间的备份操作。目前,在网盘系统中使用较多的数据同步方法是SyncML协议和Rsync方法。SyncML是一种平台无关的信息同步标准协议,它基于平台无关的XML语言,可以在若干网络,平台及设备间进行一个开放的,全行业规范的普遍的 远程数据及个人信息同步。Rsync方法是一种增量上传的同步方法,通过比对文件块的哈希值作为判断依据执行同步操作。但是,随着云存储的发展,越来越多的人开始认可并使用云存储服务来存放自己的私密数据,云存储系统的安全性要求也与日俱增。作为云存储的重要应用之一,网盘系统随着安全机制的添加,使用传统的基于SyncML协议或Rsync方法的数据同步方式在同步的效率和复杂性方面都存在着一定的不足。

发明内容
本发明的目的是设计一种新的数据同步方法,使得网盘系统中的客户端与服务器之间在添加了安全机制的情况下能够正确的、高效的进行数据同步。为达到这一目的,本发明提出了一种基于目录树的数据同步方法,它的特征在于由客户端向服务器发起同步请求,服务器验证客户端身份后将它保存在服务器端的服务器端目录树(Sever Directory Tree)返回给客户端,客户端将服务器端目录树、客户端目录树(ClientDirectory Tree)和磁盘目录树(Disk Directory Tree)进行比对,再根据比对的结果生成相应的操作队列进行操作,完成数据同步的过程。本发明的特征在于,它是在由客户端计算机、服务器以及云存储服务器三者共同构成的基于个人用户共享的安全网络存储系统CorsBox中实现的,所述客户端计算机和服务器之间通过Internet网连接,所述服务器和云存储服务器之间通过以太网交换机连接,所述安全网盘系统中一种基于同步目录树的数据同步方法依次含有以下步骤步骤(I ),客户端计算机初始化所有目录树步骤(I. 1),客户端计算机向服务器发起同步请求,服务器计算机对客户端的用户身份进行验证,然后将该用户的服务器端目录树返回给客户端;步骤(I. 2),客户端计算机读取保存在本地的客户端目录树生成文件,在内存中创造了该用户的客户端目录树和组成所述用户的客户端目录树的客户端目录树结点客户端目录树是一个二叉树结构,它的格式包括root、nodes、nodesCount和maxnodesCount,其中,nodes,以数组方式记录了所述客户端目录树的所有结点;nodesCount,记录了所述客户端目录树中的总结点数;maxNodesCount,表示所述客户端目录树最多允许包含的结点数;
客户端目录树结点的格式包括nodeType、name、appendAttribute、IastModifyTime、Ichild 和 rchild,其中nodeType,记录所述客户端目录树中的结点所对应的是目录还是文件;name,记录所述客户端目录树中所述目录或文件的名称;appendAttribute,对所述客户端目录树中的目录而言,记录的是是否被共享,对所述客户端目录树中的文件而言,记录的是最新版本的版本号;Ichild,记录了在所述客户端目录树中该结点的左孩子的索引号;rchild,记录了在所述客户端目录树中该结点的右孩子的索引号;IastModifytime,记录所述基于个人用户共享安全网络存储系统CorsBox所维护·的该结点的最新修改时间;步骤(I. 3),客户端计算机根据步骤(I. I)的返回的服务器端目录树在内存中创建该用户的服务器端目录树,用于记录所述云存储服务器中的实时数据状态;用户的服务器端目录树的结构与客户端目录树完全相同,只是nodes数组中的结点类型是用户服务器端目录树结点,用户服务器端目录树结点包括nodeType、name、appendAttribute、lchild和rchild,其中nodeType,记录所述用户服务器端目录树中的结点所对应的是目录或文件;name,记录所述的目录或文件的名称;appendAttribute,对所述用户服务器端目录树中的目录而言,记录的是是否被共享,对所述用户服务器端目录树中的文件而言,记录的是最新版本的版本号;Ichild,记录了在所述用户服务器端目录树中该结点的左孩子的索引号;rchild,记录了在所述用户服务器端目录树中该结点的右孩子的索引号;步骤(I. 4),所述客户端计算机在每次同步时扫描磁盘中的所述客户端目录树的目录及其子目录,在内存中创造用户磁盘目录树记录用户的实时数据,用户磁盘目录树的结构与客户端目录树完全相同,只是nodes数组中的结点类型是磁盘目录树结点,用户磁盘目录树结点包括nodeType、name、lastModifyTime、Ichild 和 rchild,其中nodeType,记录所述用户磁盘目录树中的结点所对应的是目录还是文件;name,记录所述磁盘目录树中所述目录或文件的名称;IastModifytime,记录了在所述客户端计算机中该结点的最后修改时间;lchild,记录了在所述磁盘目录树中该结点的左孩子的索引号;rchild,记录了在所述磁盘目录树中该结点的右孩子的索引号;步骤(2),客户端计算机依次按照如下步骤比对客户端目录树与磁盘目录树;步骤(2. I),客户端计算机将客户端目录树排序,排序方法如下步骤(2. I. 1),创建一个当前结点指针指向客户端目录树的根节点,若当前结点为空,则排序完成,否则使用步骤(2. I. 2)中的方法进行排序;步骤(2. I. 2),对待当前结点的左孩子对应的右结点链,某个结点的右节点链定义为一个集合,该集合包含该节点及其右孩子、右孩子的右孩子……,直到右孩子为空,按照字典序的方式顺序排序,对字符串来说,字典序是指若A字符串的首字母在字典中顺序排在字符串B的首字母之前,则称在字典序中A>B,若想相等则比较第二个字母,以此类推;步骤(2. I. 3),将当前结点指针依次指向其左孩子的右结点链中的每一个结点,若该结点的类型为目录,则递归执行步骤(2. I. 1),若为文件则直接跳过;步骤(2. 2),客户端计算机将磁盘目录树排序,排序方法与步骤(2. I) —样;步骤(2. 3),客户端计算机依次按照如下步骤比对客户端目录树与磁盘目录树,生成比对结果步骤(2. 3. 1),分别设置客户端目录树的当前结点指针⑶T和磁盘目录树的当前结点指针DDT,然后将CDT指向客户端目录树的根节点,DDT当前指针指向磁盘目录树的根节点;

步骤(2. 3. 2),对客户端目录树与服务器端目录树中当前结点指针各自所指向的结点使用(2. 3. 2. I)中的方法进行结点比对;步骤(2. 3. 2. 1),若⑶T当前所指向的结点和DDT当前所指向的结点中,有且仅有一个为空,则在比对结果数组⑶TvsDDT中增加一个元素记录该路径下为空的那颗目录树缺失结点,并返回;若CDT当前所指向的结点和DDT当前所指向的结点均为空,则直接返回;若CDT当前所指向的结点和DDT当前所指向的结点均不为空,则按字典序比对两个当前结点中name域的值若CDT指向的结点中name域的值较大,则将DDT指向其右孩子,转步骤(2. 3.2);反之则将⑶T指向其右孩子,转步骤(2. 3.2);若⑶T当前所指向的结点和DDT当前所指向的结点的name域值相同,即依照字典序比较,结果为等于,则比对两个结点中的IastModifyTime域的值若IastModifyTime域的值不相同,贝U在比对结果数组(DTvsDDT中增加一个元素记录当前结点所代表的文件的最后修改时间不同,并转步骤(2. 3. 3);若IastModifyTime域的值相同,贝U直接转步骤(2. 3. 3);步骤(2. 3. 3),将⑶T和DDT分别指向各自的左孩子结点,然后再次从步骤(2. 3. 2)开始执行;步骤(2. 3. 4),将CDT和DDT分别指向各自的右孩子结点,然后再次从步骤(2. 3. 2)开始执行;步骤(2. 3. 5),当执行到这一步的时候,客户端目录树与磁盘目录树已将整棵树比对完毕,并将所有缺失的结点与最后修改时间不相同的结点信息都已记录在比对结果数组CDTvsDDT 中;步骤(3),客户端比对客户端目录树与服务器端目录树步骤(3. 1),客户端将服务器端目录树排序,排序方法与步骤(2. I)—样;步骤(3. 2),客户端计算机依次按照如下步骤比对客户端目录树与服务器端目录树,生成比对结果步骤(3. 2. I ),分别设置客户端目录树的当前结点指针⑶T,和服务器目录树的当前结点指针SDT,然后将CDT指向客户端目录树的根节点,SDT指向服务器端目录树的根节占.步骤(3. 2. 2),对客户端目录树与服务器端目录树各自的当前结点指针所指向的结点使用步骤(3. 2. 2. I)中的方法进行结点比对;步骤(3. 2. 2. 1),若⑶T当前所指向的结点和SDT当前所指向的结点中,有且仅有一个为空,则在比对结果数组⑶TvsSDT中增加一个元素记录该路径下为空的那颗目录树缺失结点,并返回;若CDT当前所指向的结点和SDT当前所指向的结点均为空,则直接返回;若CDT当前所指向的结点和SDT当前所指向的结点均不为空,则按字典序比对两个当前结点中name域的值若CDT指向的结点中name域的值较大,则将SDT指向其右孩子,转步骤(3. 2.2);反之则将⑶T指向其右孩子,转步骤(3. 2.2);若⑶T当前所指向的结点和SDT当前所指向的结点的name域值相同,即依照字典序比较,结果为等于,则比对两个结点中的appendAttribute域的值;若appendAttribute域的值不相同,贝U在比对结果数组⑶TvsSDT中增加一个元素记录当前结点所代表的文件的版本号不同,并转步骤(3. 2. 3);若appendAttribute域的值相同,贝U直接转步骤(3. 2. 3);
·
步骤(3. 2. 3),将⑶T和SDT分别指向各自的左孩子结点,然后再次从步骤(3. 2. 2)开始执行,步骤(3. 2. 4 ),将CDT和SDT分别指向各自的右孩子结点,然后再次从步骤(3. 2. 2)开始执行,步骤(3. 2. 5),当执行到这一步的时候,客户端目录树与服务器端目录树已将整棵树比对完毕,并将所有存在结点缺失的路径或文件版本号不同的结点信息都记录在比对结果CDTvsSDT数组当中;步骤(4),客户端比对步骤(2)和步骤(3)的比对结果,并根据此结果执行相应的同步操作,完成同步过程步骤(4. 1),将步骤(2)中的比对结果⑶TvsDDT数组中的元素按照路径的字典序进行排序;步骤(4. 2),将步骤(3)中的比对结果⑶TvsSDT数组中的元素按照路径的字典序进行排序;步骤(4. 3),按照如下步骤依次比对数组CDTvsDDT、CDTvsSDT中的元素,生成需要执行的同步操作;步骤(4. 3. I),数组CDTvsDDT、CDTvsSDT各自的第一个元素作为两个比对结果传入的结点,称为传入结点,进入步骤(4. 3. 2);步骤(4. 3. 2),比对两个传入结点的路径,将比对结果分为以下几种情况考虑若步骤(2)中的比对结果传入的结点记录的路径的字典序较小,则根据该结点记录的信息分以下情况考虑,并将步骤(2)中传入结点的下一结点与步骤(3)中的传入结点作为新的传入结点再次从步骤(4. 3. 2)开始执行;I.若该结点记录的信息为客户端目录树中存在此结点,而磁盘目录树中不存在此结点,则表示该结点对应文件或目录已被客户端离线删除,因此需要对此路径执行下载操作;2.若该结点记录的信息为磁盘目录树中存在此结点,而客户端目录树中不存在此结点,则表示该文件或目录是用户在未开启云存储服务客户端的时候增加的,因此需要对此路径执行上传操作;3.若结点记录的信息为客户端目录树与磁盘目录树中都存在此结点,但它们的最后修改时间不同,则表示用户在未开启云存储服务客户端的时候修改了此文件,而在这段时间内其他客户端并没有提交此文件的新版本至服务器,因此需要对此路径执行上传操作;若步骤(3)中的比对结果传入的结点记录的路径的字典序较小,则根据该结点记录的信息分以下情况考虑,并将步骤(3)中传入结点的下一结点与步骤(2)中的传入结点作为新的传入结点再次从步骤(4. 3. 2)开始执行;I.若该结点记录的信息为客户端目录树中存在此结点,而服务器端目录树中不存在此结点,则表示此文件或目录已被其他客户端删除,应在本地将它删除;2.若该结点记录的信息为服务器端目录树中存在此结点,而客户端目录树中不存在此结点,则表示此文件或目录是其他客户端上传的,应对 此路径执行下载操作;3.若结点记录的信息为客户端目录树与服务器端目录树中都存在此结点,但它们的版本号不同,则说明其他用户提交了新版本至服务器,而此用户并没有对此文件进行修改,因此需要对此路径执行下载操作;若步骤(2)中的路径与步骤(3)中的路径一致,则根据两个结点分别记录的信息分以下情况处理,并将两个传入结点的下一结点作为新结点再次从步骤(4. 3.2)开始执行;I.若步骤(2)中结点记录的信息为磁盘目录树缺失结点,而步骤(3)中结点记录的信息为服务器端端目录树缺失结点,则表示此文件或目录已被其他用户删除,同时该用户在为开启云存储服务客户端的情况下也删除了此文件或目录,因此只需将该路径对于的结点从客户端目录树中删除即可;2.若步骤(2)中结点记录的信息为磁盘目录树缺失结点,而步骤(3)中结点记录的信息为文件版本号不同,则表示其他用户已上传此文件的新版本,而此用户在未开启云存储服务客户端的情况下删除了此文件,因此需要对此路径执行下载操作;3.若步骤(2)中结点记录的信息为最后修改时间不同,而步骤(3)中结点记录的信息为服务器端端目录树缺失结点,则表示其他用户已将此文件删除,而本地用户在这段时间却对此文件进行了修改,因此需要对此路径执行上传操作;4.若步骤(2)中结点记录的信息为最后修改时间不同,而步骤(3)中结点记录的信息为版本号不同,则表示其他用户上传了此文件,而本地用户也修改了此文件,因此需要进行冲突处理,具体的方法是将本地文件重命名后上传,并从服务器端下载该文件的最新版本;步骤(5),依次执行步骤(4)中生成的同步操作,完成同步过程。本发明在清华大学计算机系高性能计算技术研究所的机基于个人用户共享的安全网络存储系统CorsBox中进行了测试与应用。试验结果表明,本发明能够正确的、高效的实现各个客户端与服务器之间的数据同步。


图I目录树及结点的右结点链,其中图I. 1,目录结构的树状结构逻辑组织方式;图I. 2,目录树的组织方式,其中share、dirl、dir2三个结点构成了 public结点的右结点链。图2同步方法的整体框架。
图3目录树排序的流程。图4客户端目录树与磁盘目录树比对的流程。图5客户端目录树与服务器端目录树比对的流程。图6对结果再次比对的流程。
具体实施例方式基于个人用户共享的安全网络存储系统CorsBox主要由客户端软件,服务器软件及云存储服务平台三部分构成,基于目录树的数据同步方法运行在所述的CorsBox系统中。CorsBox系统中,服务器和云存储之间通过以太网交换机连接在一起,客户端与服务器之间通过Internet连接。存放在客户端的目录树叫做客户端目录树,存放在服务器的·目录树叫做服务器端目录树,在客户端需要使用时实时扫描磁盘构建的目录树叫做磁盘目录树。当客户端需要同步时,先向服务器端发送同步请求,服务器端验证用户身份后将其服务器端目录树返回。服务器端目录树存放在服务器端,用于记录存储服务器中数据状态的实时情况。由于存储服务器只是机械式的存放数据的密文而并不记录数据的状态,服务器端目录树必须跟存储服务器中的实时数据状态保持一致。使用时,直接通过服务器端目录树来代替云端的数据状态。服务器端目录树的结点格式定义如下
Public class SDTNode { private int nodeType;
private String name; private int appendAttribute; private int IChild; private int rChild;
}其中nodeType用来记录该结点所对应的是目录还是文件,name用来记录目录名或文件名,appendAttribute属性对目录来说记录的是该目录是否被共享,对文件来说记录的是该文件最新版本的版本号,IChild记录了在服务器端目录树中该结点的左孩子的索引号,rChild记录了该结点右孩子的索引号。客户端从服务器的返回信息中构建出服务器端目录树,然后根据本地文件构建出客户端目录树,最后通过扫描磁盘的方式构建出磁盘目录树。目录树的格式定义如下Public class DTree I private DTNode root; private DTNode[] nodes; private int nodesCount; private int maxNodesCount;
}其中root表示目录树的根节点,nodes以数组的方式记录目录树中的所有结点,nodesCount记录此目录树中共有的结点数,maxNodesCount表示此目录树最多可以包含的结点数(即nodes已分配的空间,根据需要允许扩容)。客户端目录树存放在客户端,用于记录用户的本地数据的状态与结构。由于用户有可能在并未开启系统客户端的情况下对其本地数据进行操作,客户端目录树记录的其实是最近一次用户退出系统客户端时候的数据结构状态。客户端目录树结点格式定义如下
·
Public class SDTNode { private int nodeType; private String name;
private int appendAttribute; private int lastModifyTime; private int !Child; private int rChild;
}其中lastModifyTime用来记录该结点的最后修改时间,其余的域与服务器端目录树结点的含义一样。磁盘目录树跟前面两颗目录树有些不太相同,它只是用来记录用户数据的实时情况,以防用户在未开始客户端的情况下对数据进行了操作导致用户数据与客户端目录树不一致,因此不需要持久化,每次同步开始时扫描磁盘进行构建即可。磁盘目录树的格式定义
如下
Public class SDTNode { private int nodeType; private String name; private int lastModifyTime; private int !Child; private int rChild;
}
格式中所有的域的含义与客户端目录树结点的含义一样,但磁盘目录树中记录的是系统维护的最新的修改时间,而客户端目录树中记录的是系统(客户端)维护最后一次维护时的修改时间。客户端构建好三颗目录树后按照以下步骤完成同步操作。步骤(I):将三颗目录树分别排序,其流程如图3所示;步骤(2)比对客户端目录树和磁盘目录树,并将比对结果保存在⑶TvsDDT数组中,其流程如图4所示;步骤(3):比对客户端目录树和服务器端目录树,并将 比对结果保存在⑶TvsSDT数组中,其流程如图5所示;步骤(4):首先将⑶TvsDDT和⑶TvsSDT数组按照路径的字典序进行排序,然后比对⑶TvsDDT和⑶TvsSDT中的所有结点,生成操作队列(包含本地删除、上传、下载和冲突处理四种操作),其流程如图6所示;步骤(5):依次执行操作队列中的每一项操作,完成整个同步过程。
权利要求
1.安全网盘系统中一种基于目录树的同步方法,其特征在于,它是在由客户端计算机、服务器以及云存储服务器三者共同构成的基于个人用户共享的安全网络存储系统CorsBox中实现的,所述客户端计算机和服务器之间通过Internet网连接,所述服务器和云存储服务器之间通过以太网交换机连接,所述安全网盘系统中一种基于同步目录树的数据同步方法依次含有以下步骤 步骤(I ),客户端计算机初始化所有目录树 步骤(I. I ),客户端计算机向服务器发起同步请求,服务器计算机对客户端的用户身份进行验证,然后将该用户的服务器端目录树返回给客户端; 步骤(I. 2),客户端计算机读取保存在本地的客户端目录树生成文件,在内存中创造了该用户的客户端目录树和组成所述用户的客户端目录树的客户端目录树结点 客户端目录树是一个二叉树结构,它的格式包括root、nodes、nodesCount和maxnodesCount,其中, nodes,以数组方式记录了所述客户端目录树的所有结点; nodesCount,记录了所述客户端目录树中的总结点数; maxNodesCount,表示所述客户端目录树最多允许包含的结点数; 客户端目录树结点的格式包括nodeType、name、appendAttribute、IastModifyTime>Ichild 和 rchild,其中 nodeType,记录所述客户端目录树中的结点所对应的是目录还是文件; name,记录所述客户端目录树中所述目录或文件的名称; appendAttribute,对所述客户端目录树中的目录而言,记录的是是否被共享,对所述客户端目录树中的文件而言,记录的是最新版本的版本号; Ichild,记录了在所述客户端目录树中该结点的左孩子的索引号; rchild,记录了在所述客户端目录树中该结点的右孩子的索引号; IastModifytime,记录所述基于个人用户共享安全网络存储系统CorsBox所维护的该结点的最新修改时间; 步骤(I. 3),客户端计算机根据步骤(I. I)的返回的服务器端目录树在内存中创建该用户的服务器端目录树,用于记录所述云存储服务器中的实时数据状态;用户的服务器端目录树的结构与客户端目录树完全相同,只是nodes数组中的结点类型是用户服务器端目录树结点,用户服务器端目录树结点包括nodeType、name、appendAttribute、Ichild和rchild,其中 nodeType,记录所述用户服务器端目录树中的结点所对应的是目录或文件; name,记录所述的目录或文件的名称; appendAttribute,对所述用户服务器端目录树中的目录而言,记录的是是否被共享,对所述用户服务器端目录树中的文件而言,记录的是最新版本的版本号; Ichild,记录了在所述用户服务器端目录树中该结点的左孩子的索引号; rchild,记录了在所述用户服务器端目录树中该结点的右孩子的索引号; 步骤(I. 4),所述客户端计算机在每次同步时扫描磁盘中的所述客户端目录树的目录及其子目录,在内存中创造用户磁盘目录树记录用户的实时数据,用户磁盘目录树的结构与客户端目录树完全相同,只是nodes数组中的结点类型是磁盘目录树结点,用户磁盘目录树结点包括:nodeType、name、IastModifyTime、Ichild 和 rchild,其中 nodeType,记录所述用户磁盘目录树中的结点所对应的是目录还是文件; name,记录所述磁盘目录树中所述目录或文件的名称; IastModifytime,记录了在所述客户端计算机中该结点的最后修改时间; Ichild,记录了在所述磁盘目录树中该结点的左孩子的索引号; rchild,记录了在所述磁盘目录树中该结点的右孩子的索引号; 步骤(2),客户端计算机依次按照如下步骤比对客户端目录树与磁盘目录树; 步骤(2. 1),客户端计算机将客户端目录树排序,排序方法如下 步骤(2. I. 1),创建一个当前结点指针指向客户端目录树的根节点,若当前结点为空,则排序完成,否则使用步骤(2. I. 2)中的方法进行排序; 步骤(2. I. 2),对待当前结点的左孩子对应的右结点链,某个结点的右节点链定义为一个集合,该集合包含该节点及其右孩子、右孩子的右孩子……,直到右孩子为空,按照字典序的方式顺序排序,对字符串来说,字典序是指若A字符串的首字母在字典中顺序排在字符串B的首字母之前,则称在字典序中A>B,若想相等则比较第二个字母,以此类推; 步骤(2. I. 3),将当前结点指针依次指向其左孩子的右结点链中的每一个结点,若该结点的类型为目录,则递归执行步骤(2. I. 1),若为文件则直接跳过; 步骤(2. 2),客户端计算机将磁盘目录树排序,排序方法与步骤(2. I) 一样; 步骤(2. 3),客户端计算机依次按照如下步骤比对客户端目录树与磁盘目录树,生成比对结果 步骤(2. 3. 1),分别设置客户端目录树的当前结点指针CDT和磁盘目录树的当前结点指针DDT,然后将CDT指向客户端目录树的根节点,DDT当前指针指向磁盘目录树的根节占. 步骤(2. 3. 2),对客户端目录树与服务器端目录树中当前结点指针各自所指向的结点使用(2. 3. 2.1)中的方法进行结点比对; 步骤(2. 3. 2. 1),若CDT当前所指向的结点和DDT当前所指向的结点中,有且仅有一个为空,则在比对结果数组⑶TvsDDT中增加一个元素记录该路径下为空的那颗目录树缺失结点,并返回; 若CDT当前所指向的结点和DDT当前所指向的结点均为空,则直接返回; 若CDT当前所指向的结点和DDT当前所指向的结点均不为空,则按字典序比对两个当前结点中name域的值若CDT指向的结点中name域的值较大,则将DDT指向其右孩子,转步骤(2. 3.2);反之则将⑶T指向其右孩子,转步骤(2. 3.2); 若CDT当前所指向的结点和DDT当前所指向的结点的name域值相同,即依照字典序比较,结果为等于,则比对两个结点中的IastModifyTime域的值 若IastModifyTime域的值不相同,贝U在比对结果数组⑶TvsDDT中增加一个元素记录当前结点所代表的文件的最后修改时间不同,并转步骤(2. 3. 3); 若IastModifyTime域的值相同,贝U直接转步骤(2. 3. 3); 步骤(2. 3. 3),将⑶T和DDT分别指向各自的左孩子结点,然后再次从步骤(2. 3. 2)开始执行; 步骤(2. 3. 4),将CDT和DDT分别指向各自的右孩子结点,然后再次从步骤(2. 3. 2)开始执行; 步骤(2. 3. 5),当执行到这一步的时候,客户端目录树与磁盘目录树已将整棵树比对完毕,并将所有缺失的结点与最后修改时间不相同的结点信息都已记录在比对结果数组CDTvsDDT 中; 步骤(3 ),客户端比对客户端目录树与服务器端目录树 步骤(3. 1),客户端将服务器端目录树排序,排序方法与步骤(2. I) 一样; 步骤(3. 2),客户端计算机依次按照如下步骤比对客户端目录树与服务器端目录树,生成比对结果 步骤(3. 2. 1),分别设置客户端目录树的当前结点指针CDT,和服务器目录树的当前结点指针SDT,然后将CDT指向客户端目录树的根节点,SDT指向服务器端目录树的根节点;步骤(3. 2. 2),对客户端目录树与服务器端目录树各自的当前结点指针所指向的结点使用步骤(3. 2. 2. I)中的方法进行结点比对; 步骤(3. 2. 2. 1),若CDT当前所指向的结点和SDT当前所指向的结点中,有且仅有一个为空,则在比对结果数组⑶TvsSDT中增加一个元素记录该路径下为空的那颗目录树缺失结点,并返回; 若CDT当前所指向的结点和SDT当前所指向的结点均为空,则直接返回; 若CDT当前所指向的结点和SDT当前所指向的结点均不为空,则按字典序比对两个当前结点中name域的值若CDT指向的结点中name域的值较大,则将SDT指向其右孩子,转步骤(3. 2. 2);反之则将⑶T指向其右孩子,转步骤(3. 2. 2); 若CDT当前所指向的结点和SDT当前所指向的结点的name域值相同,即依照字典序比较,结果为等于,则比对两个结点中的appendAttribute域的值; 若appendAttribute域的值不相同,贝U在比对结果数组⑶TvsSDT中增加一个元素记录当前结点所代表的文件的版本号不同,并转步骤(3. 2. 3); 若appendAttribute域的值相同,贝U直接转步骤(3. 2. 3); 步骤(3. 2. 3),将⑶T和SDT分别指向各自的左孩子结点,然后再次从步骤(3. 2. 2)开始执行, 步骤(3. 2. 4),将CDT和SDT分别指向各自的右孩子结点,然后再次从步骤(3. 2. 2)开始执行, 步骤(3. 2. 5),当执行到这一步的时候,客户端目录树与服务器端目录树已将整棵树比对完毕,并将所有存在结点缺失的路径或文件版本号不同的结点信息都记录在比对结果CDTvsSDT数组当中; 步骤(4),客户端比对步骤(2)和步骤(3)的比对结果,并根据此结果执行相应的同步操作,完成同步过程 步骤(4. 1),将步骤(2)中的比对结果⑶TvsDDT数组中的元素按照路径的字典序进行排序; 步骤(4. 2),将步骤(3)中的比对结果⑶TvsSDT数组中的元素按照路径的字典序进行排序; 步骤(4. 3),按照如下步骤依次比对数组⑶TvsDDT、⑶TvsSDT中的元素,生成需要执行的同步操作;步骤(4. 3. 1),数组⑶TvsDDT、⑶TvsSDT各自的第一个元素作为两个比对结果传入的结点,称为传入结点,进入步骤(4. 3. 2); 步骤(4. 3. 2),比对两个传入结点的路径,将比对结果分为以下几种情况考虑 若步骤(2)中的比对结果传入的结点记录的路径的字典序较小,则根据该结点记录的信息分以下情况考虑,并将步骤(2)中传入结点的下一结点与步骤(3)中的传入结点作为新的传入结点再次从步骤(4. 3. 2)开始执行; .1.若该结点记录的信息为客户端目录树中存在此结点,而磁盘目录树中不存在此结点,则表示该结点对应文件或目录已被客户端离线删除,因此需要对此路径执行下载操作; .2.若该结点记录的信息为磁盘目录树中存在此结点,而客户端目录树中不存在此结点,则表示该文件或目录是用户在未开启云存储服务客户端的时候增加的,因此需要对此路径执行上传操作; .3.若结点记录的信息为客户端目录树与磁盘目录树中都存在此结点,但它们的最后修改时间不同,则表示用户在未开启云存储服务客户端的时候修改了此文件,而在这段时间内其他客户端并没有提交此文件的新版本至服务器,因此需要对此路径执行上传操作; 若步骤(3)中的比对结果传入的结点记录的路径的字典序较小,则根据该结点记录的信息分以下情况考虑,并将步骤(3)中传入结点的下一结点与步骤(2)中的传入结点作为新的传入结点再次从步骤(4. 3. 2)开始执行; .1.若该结点记录的信息为客户端目录树中存在此结点,而服务器端目录树中不存在此结点,则表示此文件或目录已被其他客户端删除,应在本地将它删除; .2.若该结点记录的信息为服务器端目录树中存在此结点,而客户端目录树中不存在此结点,则表示此文件或目录是其他客户端上传的,应对此路径执行下载操作; . 3.若结点记录的信息为客户端目录树与服务器端目录树中都存在此结点,但它们的版本号不同,则说明其他用户提交了新版本至服务器,而此用户并没有对此文件进行修改,因此需要对此路径执行下载操作; 若步骤(2)中的路径与步骤(3)中的路径一致,则根据两个结点分别记录的信息分以下情况处理,并将两个传入结点的下一结点作为新结点再次从步骤(4. 3. 2)开始执行; . 1.若步骤(2)中结点记录的信息为磁盘目录树缺失结点,而步骤(3)中结点记录的信息为服务器端端目录树缺失结点,则表示此文件或目录已被其他用户删除,同时该用户在为开启云存储服务客户端的情况下也删除了此文件或目录,因此只需将该路径对于的结点从客户端目录树中删除即可; .2.若步骤(2)中结点记录的信息为磁盘目录树缺失结点,而步骤(3)中结点记录的信息为文件版本号不同,则表示其他用户已上传此文件的新版本,而此用户在未开启云存储服务客户端的情况下删除了此文件,因此需要对此路径执行下载操作; .3.若步骤(2)中结点记录的信息为最后修改时间不同,而步骤(3)中结点记录的信息为服务器端端目录树缺失结点,则表示其他用户已将此文件删除,而本地用户在这段时间却对此文件进行了修改,因此需要对此路径执行上传操作; . 4.若步骤(2)中结点记录的信息为最后修改时间不同,而步骤(3)中结点记录的信息为版本号不同,则表示其他用户上传了此文件,而本地用户也修改了此文件,因此需要进行冲突处理,具体的方法是将本地文件重命名后上传,并从服务器端下载该文件的最新版本; 步骤(5 ),依次执行步骤(4 )中生成的同步操作,完成同步过程。
全文摘要
安全网盘系统中基于目录树的数据同步方法属于多机同步领域,尤其涉及其中文件同步领域。本发明的特征在于客户端只需要保存一颗客户端目录树就可以完成同步,提高了存储效率;服务器端通过目录树就可以知道云端数据的实时情况,减少了系统开销;产生同步操作的过程中仅进行了两次目录树比对和一次结果比对,提高了数据同步的效率;整个数据同步的过程与数据本身的内容无关,保证了同步过程中数据的安全性,因此可以适用于任何具有安全机制的网盘系统中。
文档编号H04L29/06GK102790760SQ201210179530
公开日2012年11月21日 申请日期2012年5月31日 优先权日2012年5月31日
发明者傅颖勋, 舒继武 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1