CN111324483B - 一种数据恢复方法、装置以及相关设备 - Google Patents
一种数据恢复方法、装置以及相关设备 Download PDFInfo
- Publication number
- CN111324483B CN111324483B CN201811526775.7A CN201811526775A CN111324483B CN 111324483 B CN111324483 B CN 111324483B CN 201811526775 A CN201811526775 A CN 201811526775A CN 111324483 B CN111324483 B CN 111324483B
- Authority
- CN
- China
- Prior art keywords
- directory
- target
- node
- identity
- data
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1464—Management of the backup or restore process for networked environments
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据恢复方法、装置以及相关设备,方法包括:获取目标数据,并将目标数据被删除前所在目录的路径信息,作为目标路径信息;根据目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树;目标拓扑顺序是每个目录信息在目标路径信息中的先后顺序;按照目标拓扑顺序,对目标目录树所包含的所有目录依次进行恢复处理,得到与目标路径信息相匹配的目标目录,将目标数据还原至目标目录下。采用本发明,可以在数据恢复时合理分配存储空间的层级架构,提高读取存储空间中文件的效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据恢复方法、装置以及相关设备。
背景技术
当今人们对网络的依赖性越来越大,通过网络寻找数据、共享资料已经成为信息交换的主要途径。网络硬盘(简称网盘)的出现很大程度能够满足人们在共享资源和远程传输方面的需求。用户可以通过互联网登录网站访问网络硬盘,进行信息数据上传、下载、共享等操作。U盘虽然体积小,但容易遗失;移动硬盘体积较大,携带不便。而网络硬盘就很好的克服了上述缺点,可以很便捷地在不同终端之间进行文件的共享。
在网盘中,当某个文件被删除后,该文件会进入网盘的回收站。当需要将该文件还原时,该文件会直接恢复至网盘的根目录下。例如,文档G被删除前所在的原路径为:root\A\B,即文档G是在目录B下,目录B是在目录A下,目录A是在目录root下。当文档G被删除,且又被还原时,文档G就会还原在目录root下,即还原后文档G的路径就是:root\。
上述可知,当被删除的文件都被还原至根目录下时,会造成根目录包含的文件数量巨大,使得存储空间的层级架构分配不合理,进而导致读取存储文件的效率低下。
发明内容
本发明实施例提供一种数据恢复方法、装置以及相关设备,可以在数据恢复时合理分配存储空间的层级架构,提高读取存储空间中文件的效率。
本发明实施例一方面提供了一种数据恢复方法,包括:
获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息;
根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树;所述目标拓扑顺序是每个所述目录信息在所述目标路径信息中的先后顺序;
按照所述目标拓扑顺序,对所述目标目录树所包含的所有目录依次进行恢复处理,得到与所述目标路径信息相匹配的目标目录,将所述目标数据还原至所述目标目录下。
其中,所述获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息,包括:
当接收到与所述目标数据对应的恢复请求时,根据所述恢复请求中所携带的与所述目标数据对应的目标身份标识,获取所述目标数据;
在数据库中查找与所述目标身份标识对应的目标键值对,在所述目标键值对中提取所述目标路径信息。
其中,所述根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树,包括:
创建初始目录树,为所述初始目录树设置根节点;
根据所述目标路径信息所包含的至少一个目录信息,生成多个目录节点,根据所述多个目录节点分别对应的目录信息在所述目标路径信息中的顺序,确定所述目标拓扑顺序;
根据所述目标拓扑顺序,将所述多个目录节点依次添加至所述初始目录树中,得到所述目标目录树。
其中,所述根节点具有第一状态标识;所述多个目录节点均具有第二状态标识;
所述按照所述目标拓扑顺序,对所述目标目录树所包含的所有目录依次进行恢复处理,得到与所述目标路径信息相匹配的目标目录,将所述目标数据还原至所述目标目录下,包括:
创建具有先进先出特性的目标队列,将所述目标目录树中的根节点添加至所述目标队列的队尾处;
将位于所述目标队列队首处的节点作为目标节点,遍历所述目标目录树,将所述目标节点对应的所有具有第二状态标识的子节点中的任一子节点,作为目标子节点;
将所述目标节点对应的目录信息中的身份标识所指示的目录,确定为指示目录,在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识;
将所述目标子节点的第二状态标识设置为所述第一状态标识,并将所述目标子节点添加至所述目标队列的队尾处;
当所述目标节点对应的所有子节点中不存在具有第二状态标识的子节点时,将所述目标节点从所述目标队列中删除,并将位于所述目标队列队首处的节点作为目标节点;
当所述目标队列为空集时,将所述恢复目录确定为所述目标目录,查找所述目标目录树中叶节点对应的目录信息中的身份标识,将查找到的身份标识对应的目录作为所述目标目录中的叶目录,将所述目标数据还原于所述目标目录中的叶目录下。
其中,所述在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识,包括:
若所述目标路径信息中存在同名路径信息,则将所述同名路径信息对应的目标数据确定为还原数据,将所述还原数据还原至所述指示目录下,将所述还原数据中具有所述目标子节点对应的目录信息中的目录名称的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录的身份标识;所述同名路径信息和所述目标子节点对应的目录信息所指示的目录的路径信息相同;
若所述目标路径信息中不存在所述同名路径信息,则在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识。
其中,所述在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识,包括:
将所述目标子节点对应的目录信息中的目录名称作为辅助目录名称,将所述目标子节点对应的目录信息中的身份标识作为辅助身份标识;
当所述指示目录中不存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,在所述指示目录中创建目录,作为所述恢复目录,并为所述恢复目录设置身份标识;
在所述目标目录树中,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录对应的身份标识;所述恢复目录的目录名称和所述目标子节点对应的目录信息中的目录名称相同;
当所述指示目录中存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,将所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录的身份标识。
其中,还包括:
当所述指示目录中存在具有所述辅助目录名称,但不具有所述辅助身份标识的目录时,将所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录的身份标识。
其中,还包括:
当接收到与所述目标数据对应的删除请求时,根据所述删除请求,确定与所述目标数据对应的目标身份标识,并查询与所述目标身份标识对应的目标路径信息;
将所述目标身份标识和所述目标路径信息组合为目标键值对,将所述目标键值对存储在数据库中,并删除所述目标数据。
本发明实施例一方面提供了一种数据恢复装置,包括:
获取模块,用于获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息;
构建模块,用于根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树;所述目标拓扑顺序是每个所述目录信息在所述目标路径信息中的先后顺序;
还原模块,用于按照所述目标拓扑顺序,对所述目标目录树所包含的所有目录依次进行恢复处理,得到与所述目标路径信息相匹配的目标目录,将所述目标数据还原至所述目标目录下。
其中,所述获取模块,包括:
获取单元,用于当接收到与所述目标数据对应的恢复请求时,根据所述恢复请求中所携带的与所述目标数据对应的目标身份标识,获取所述目标数据;
提取单元,用于在数据库中查找与所述目标身份标识对应的目标键值对,在所述目标键值对中提取所述目标路径信息。
其中,所述构建模块,包括:
设置单元,用于创建初始目录树,为所述初始目录树设置根节点;
生成单元,用于根据所述目标路径信息所包含的至少一个目录信息,生成多个目录节点,根据所述多个目录节点分别对应的目录信息在所述目标路径信息中的顺序,确定所述目标拓扑顺序;
所述生成单元,还用于根据所述目标拓扑顺序,将所述多个目录节点依次添加至所述初始目录树中,得到所述目标目录树。
其中,所述根节点具有第一状态标识;所述多个目录节点均具有第二状态标识;
所述还原模块,包括:
创建单元,用于创建具有先进先出特性的目标队列,将所述目标目录树中的根节点添加至所述目标队列的队尾处;
遍历单元,用于将位于所述目标队列队首处的节点作为目标节点,遍历所述目标目录树,将所述目标节点对应的所有具有第二状态标识的子节点中的任一子节点,作为目标子节点;
所述遍历单元,还用于将所述目标节点对应的目录信息中的身份标识所指示的目录,确定为指示目录;
恢复单元,用于在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识;
添加单元,用于将所述目标子节点的第二状态标识设置为所述第一状态标识,并将所述目标子节点添加至所述目标队列的队尾处;
删除单元,用于当所述目标节点对应的所有子节点中不存在具有第二状态标识的子节点时,将所述目标节点从所述目标队列中删除,并将位于所述目标队列队首处的节点作为目标节点;
查找单元,用于当所述目标队列为空集时,将所述恢复目录确定为所述目标目录,查找所述目标目录树中叶节点对应的目录信息中的身份标识,将查找到的身份标识对应的目录作为所述目标目录中的叶目录,将所述目标数据还原于所述目标目录中的叶目录下。
其中,所述恢复单元,包括:
第一恢复子单元,用于若所述目标路径信息中存在同名路径信息,则将所述同名路径信息对应的目标数据确定为还原数据,将所述还原数据还原至所述指示目录下,将所述还原数据中具有所述目标子节点对应的目录信息中的目录名称的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录的身份标识;所述同名路径信息和所述目标子节点对应的目录信息所指示的目录的路径信息相同;
第二恢复子单元,用于若所述目标路径信息中不存在所述同名路径信息,则在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识。
其中,所述第二恢复子单元,包括:
第一确定子单元,用于将所述目标子节点对应的目录信息中的目录名称作为辅助目录名称,将所述目标子节点对应的目录信息中的身份标识作为辅助身份标识;
所述第一确定子单元,还用于当所述指示目录中不存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,在所述指示目录中创建目录,作为所述恢复目录,并为所述恢复目录设置身份标识;
所述第一确定子单元,还用于在所述目标目录树中,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录对应的身份标识;所述恢复目录的目录名称和所述目标子节点对应的目录信息中的目录名称相同;
第二确定子单元,用于当所述指示目录中存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,将所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录的身份标识。
其中,还包括:
第三确定子单元,用于当所述指示目录中存在具有所述辅助目录名称,但不具有所述辅助身份标识的目录时,将所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录的身份标识。
其中,还包括:
查询模块,用于当接收到与所述目标数据对应的删除请求时,根据所述删除请求,确定与所述目标数据对应的目标身份标识,并查询与所述目标身份标识对应的目标路径信息;
组合模块,用于将所述目标身份标识和所述目标路径信息组合为目标键值对,将所述目标键值对存储在数据库中,并删除所述目标数据。
本发明实施例一方面提供了一种电子设备,包括:处理器和存储器;
所述处理器和存储器相连,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行如本发明实施例中的方法。
本发明实施例一方面提供了一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如本发明实施例中的方法。
本发明实施例通过根据待还原的目标数据在原路径上所包含的多个目录,以及多个目录在原路径上的前后顺序,构建目录树,按照多个目录在原路径上的前后顺序,依次还原目录树中所包含的目录,这样在还原目标数据之前就将原路径上的所有目录进行了还原,最后就可以将目标数据还原至原路径下。将目标数据还原至原路径下可以丰富数据的还原方式,同时,相比将目标数据还原到根目录,将目标数据还原回原路径的方式可以使得存储空间的层级分配更加合理,进而提高读取存储空间中数据的效率,进一步地,还原到原路径也可以降低存储空间的维护和管理成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据恢复的系统架构图;
图2a-图2b是本发明实施例提供的一种数据恢复的场景示意图;
图3是本发明实施例提供的一种数据恢复方法的流程示意图;
图4是本发明实施例提供的一种数据恢复的交互示意图;
图5是本发明实施例提供的另一种数据恢复方法的流程示意图;
图6a-图6g是本发明实施例提供的一种数据还原的过程示意图;
图7是本发明实施例提供的一种数据恢复装置的结构示意图;
图8是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,是本发明实施例提供的一种数据恢复的系统架构图。服务器10a为用户终端集群提供服务,用户终端集群可以包括:用户终端10b、用户终端10c、...、用户终端10d。当用户终端(可以是用户终端10b、用户终端10c或用户终端10d)接收到删除文件的删除请求时,将该删除请求发送至服务器10a,服务器10a根据删除请求确定待删除的文件,并记录待删除的文件的路径信息,举例来说,可以将此路径信息记录在服务器的一个文件中,这个文件可以是表格式文件,文字格式文件或其他任何可用于记录的文件,后续将该文件从当前目录移动至服务器10a中的回收站。当用户终端接收到关于上述文件的恢复请求时,将恢复请求发送至服务器10a,服务器10a根据恢复请求查找该文件的路径信息。服务器10a根据查询到的路径信息所包含的目录构建目录树,其中,路径信息中的一个目录就对应目录树中的一个节点。服务器10a按照目录树中从根节点到叶节点的前后顺序,依次确定每个节点对应的目录在路径信息对应的原路径上是否被删除,若没有被删除,就确定下一个节点对应的目录在原路径上是否被删除,若目录被删除,则创建一个和被删除目录相同名称的目录。生成或找到上述路径信息中所包含的目录后就恢复了删除文件的被删除前的原路径,将待恢复文件从回收站移动至该文件被删除前的原路径下。这样,删除后再恢复的文件就可以恢复至原路径下。当然,若文件是存储在用户终端本地的,也可以由用户终端构建目录树,并还原目录树中所包含的目录,以将文件还原至原路径下。
其中,如图1所示的设备10b、10c、10d等用户终端可以包括手机、平板电脑、笔记本电脑、掌上电脑、智能音响、移动互联网设备(MID,mobile internet device)、POS(PointOf Sales,销售点)机、可穿戴设备(例如智能手表、智能手环等)等。
请参见图2a-图2b,是本发明实施例提供的一种数据恢复的场景示意图。下述以删除网盘中的文件并恢复该文件至原路径为例。如界面20a所示,在根目录(目录名称为:我的网盘)下,存在一级目录,该一级目录的名称为:资料。在上述“资料”目录下,存在两个二级目录,两个二级目录的名称分别为:学习资料和工作资料。如界面20b所示,在“学习资料”目录下,存在两个文档,两个文档的名称分别为:文档1和文档2。接收关于删除文档2的删除请求,根据该删除请求查询到文档2的路径信息为:(我的网盘,1)>(资料,01)>(学习资料,001)>,文档2的路径信息还可以表示为:(我的网盘,1)\(资料,01)\(学习资料,001)\。路径信息中包含的是数据被删除前原路径上所有目录的目录信息,目录信息包括目录名称和身份标识(IDentity,ID),也可以将路径信息理解为具有层级关系的目录信息集合,其中一个磁盘或者一个非空文件夹就可以是一个目录。例如:(我的网盘,1)表示:目录名称为:我的网盘;该目录的身份标识为:1。还需说明的是,对外向用户展示的是仅仅是目录的目录名称,因此用户看到的路径信息是只包含目录名称的路径信息,数据还原至原路径下的意思是将数据还原至具有被删除前所在相同目录名称的目录下,但还原后的目录的身份标识和被删除前的目录的身份标识不一定相同。
确定文档2的身份标识为:0002。将文档2的路径信息以及文档2的身份标识组合为键值对(key-value pair),并存储在数据库中,后续就将文档2从当前目录(此时文档2所在的当前目录是“学习资料”目录)下,移动至回收站。如界面20c所示,接收关于删除“学习资料”目录的删除请求,根据该删除请求查询到“学习资料”目录的路径信息为:(我的网盘,1)>(资料,01)>,并确定“学习资料”目录的身份标识为:001。将“学习资料”目录的路径信息以及“学习资料”目录的身份标识组合为键值对,并存储在上述数据库中,后续就将“学习资料”目录从当前目录(此时“学习资料”目录所在的当前目录是“资料”目录)下,移动至回收站。需要注意的是,由于文档2已经被提前删除了,删除“学习资料”目录时,“学习资料”目录中只包含了文档1。如界面20d所示,网盘中的回收站已经存在文档2以及“学习资料”目录。
接收还原请求,该还原请求中携带待还原数据的身份标识,根据身份标识确定待还原的数据是:文档2和“学习资料”目录。根据文档2的身份标识,在数据库中查询对应的键值对为:(0002,(我的网盘,1)>(资料,01)>(学习资料,001)),根据“学习资料”目录的身份标识,在数据库中也查询对应的键值对为:(001,(我的网盘,1)>(资料,01))。2个键值对中的路径信息中所包含的目录信息包括:“我的网盘”目录(该目录的ID为1)、“资料”目录(该目录的ID为01)、“学习资料”目录(该目录的ID为001),根据上述3个目录信息生成3个节点,每个节点都存在对应的目录信息,目录信息包括目录名称和目录的身份标识。如图2b所示,创建一棵只包含根节点(Root)的树,为了和其余生成的节点对称,可以同样为根节点设置一个ID:0,根据上述3个节点对应的目录信息在路径信息中的前后关系,将3个节点依次添加至树中,得到目录树20e。为目录树20e的根节点设置第一状态标识,并为其余3个节点设置第二状态标识。为了还原目录树20e中的目录,创建队列20f,按照从上至下的顺序,依次还原目录树20e中的目录。
具体还原过程为:如图2b所示,将根节点插入队列20f中,将队列20f中位于队首的节点作为目标节点,那么当前的目标节点就是根节点,从根节点的所有具有第二状态标识的子节点中,选择一个具有第二状态标识的子节点,作为目标子节点,即将“我的网盘”节点作为目标子节点。由于“我的网盘”这个目录没有被删除,也没有被修改,也就是说“我的网盘”目录不论是目录名称,身份标识,所在的路径都没有发生变化,那么就可以保持目录树20e中“我的网盘”节点的身份标识“1”不变。将“我的网盘”节点的第二状态标识设置为第一状态标识,并添加至队列20f中的队尾处(此时队列20f中存在“Root”节点和“我的网盘”节点)。由于目标节点的所有子节点中,不存在具有第二状态标识的子节点了,那么就在队列20f中删除目标节点,即删除根节点(此时队列20f中仅存在“我的网盘”节点)。
同样地,将队列20f中位于队首的节点作为目标节点,那么当前的目标节点就是“我的网盘”节点,从“我的网盘”节点的所有具有第二状态标识的子节点中,选择一个具有第二状态标识的子节点,作为目标子节点,即将“资料”节点作为目标子节点。由于“资料”这个目录没有被删除,也没有被修改,也就是说“资料”目录不论是目录名称,身份标识,所在的路径也都没有发生变化,那么就可以保持目录树20e中“资料”节点的身份标识“01”不变。将“资料”节点的第二状态标识设置为第一状态标识,并添加至队列20f中的队尾处(此时队列20f中存在“我的网盘”节点和“资料”节点)。由于目标节点的所有子节点中,不存在具有第二状态标识的子节点了,那么就在队列20f中删除目标节点,即删除“我的网盘”节点(此时队列20f中只存在“资料”节点)。
同样将队列20f中位于队首的节点作为目标节点,那么当前的目标节点就是“资料”节点,从“资料”节点的所有具有第二状态标识的子节点中,选择一个具有第二状态标识的子节点,作为目标子节点,即将“学习资料”节点作为目标子节点。由于“学习资料”节点的目录的路径信息“(我的网盘,1)>(资料,01)>”和待还原的数据“学习资料”目录被删除前的路径信息“(我的网盘,1)>(资料,01)>”相同,那么就将该待还原的数据从回收站移动至目标节点对应的目录下,即确定目标节点中的身份标识:01,将“我的资料”目录还原至身份标识为“01”所指示的目录下,即是将“我的资料”目录还原至“资料”目录下,由于“我的资料”目录是从回收站还原至“资料”目录下的,因此“我的资料”目录对应的身份标识不会发生变化,也就不用更新“我的资料”目录的目录信息。需要说明的是,此时还原回去的“我的资料”文件中是只包含文档1的。将“学习资料”节点的第二状态标识设置为第一状态标识,并添加至队列20f中的队尾处(此时队列20f中存在“资料”节点和“学习资料”节点)。由于目标节点的所有子节点中,不存在具有第二状态标识的子节点了,那么就在队列20f中删除目标节点,即删除“资料”节点(此时队列20f中只存在“学习资料”节点)。
类似地,将队列20f中位于队首的节点作为目标节点,那么当前的目标节点就是“学习资料”节点,由于目标节点不存在对应的子节点了,那么就在队列20f中删除目标节点,即删除“学习资料”节点。
至此,目录树20e中的目录都已经还原到原路径上,由于待还原数据中“学习资料”目录也是目录树20e中的目录,在还原目录树20e中的目录时,就已经还原了。待还原的数据就剩文档2,提取目录树20e的叶节点对应的身份标识:001,将文档2还原至该身份标识对应的目录,即是将文档2还原至“学习资料”目录中。如界面20c所示,在“我的网盘”目录下,存在“资料”目录,在“资料”目录下存在“学习资料”目录,在“学习资料”目录下,存在文档1和文档2,即所有待还原数据都还原至原路径下。
将目标数据还原至原路径下可以丰富数据的还原方式,同时,相比将目标数据还原到根目录,将目标数据还原回原路径,可以使得存储空间的层级分配更加合理,进而提高读取存储空间中数据的效率,进一步地,还原到原路径也可以降低存储空间的维护和管理成本。
其中,创建目录树、创建队列、还原目录的具体过程可以参见以下图3至图6g所对应的实施例。
进一步地,请参见图3,是本发明实施例提供的一种数据恢复方法的流程示意图。如图3所示,所述数据恢复方法可以包括:
步骤S101,获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息。
具体的,接收关于目标数据的恢复请求,其中,目标数据是待还原的数据,恢复请求是指将待还原的目标数据从回收站还原至原路径下,目标数据的数量可以是一个,也可以是多个,若是目标数据的数量是多个,那么就是批量还原。目标数据可以是文件,也可以是目录,其中,目录中可以包含文件,层级最低的为文件,其余的都为目录,例如,文件夹A中包含照片B和歌曲C,那么照片B和歌曲C都属于文件,对应地文件夹A就属于目录,再例如,文件夹A中包含一个空白文件夹B,那么文件夹B就属于文件,对应地文件夹A就属于目录。恢复请求中携带与目标数据对应的身份标识(ID),将目标数据对应的身份标识称为目标身份标识,也可以说恢复请求中携带与目标数据对应的目标身份标识,身份标识是在终端中用于表征数据(包括文件和目录)的唯一编码,身份标识可以是数值、字母或者数值和字母的组合。
终端根据目标身份标识,在文件存储系统中获取目标身份标识对应的数据(目标数据)。在数据库中查找与目标身份标识对应的键值对,作为目标键值对,键值对中包括数据的身份标识和路径信息,提取目标键值对中的路径信息,作为目标路径信息。其中,键值对中的路径信息是指数据在被删除前所在目录的路径信息,路径信息是由目标数据在被删除前原路径上的所有目录的目录信息构成,每个目录都存在对应的目录信息,目录信息中包括目录名称和身份标识。终端对外向用户展示路径信息是原路径上的所有目录的目录名称。也可以理解为,数据在被删除时就会生成对应的键值对,键值对中包括该数据的身份标识,以及该数据的路径信息,并存储在数据库中,以用于后续的数据还原。其中,文件存储系统是存储文件或者目录的索引和数据信息。
例如,目录A(身份标识为0001)被删除前在目录B(身份标识为001)中,目录B又在目录C(身份标识为01)中,那么目录A的路径信息就是目录B的目录信息和目录C的目录信息所组合而成的路径信息,即目录A的路径信息为:(C,01)\(B,001)。
可选的,接收关于目标数据的删除请求,根据该删除请求确定待删除的目标数据的身份标识(称为目标身份标识),在文件存储系统中,查询该目标身份标识对应的目录,并查询该目录所在路径的路径信息,作为目标路径信息。将目标路径信息和目标身份标识组合为键值对,称为目标键值对,将目标键值对存储在数据库中,并删除目标数据。其中,文件存储系统是存储文件或者目录的索引和数据信息。
步骤S102,根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树;所述目标拓扑顺序是每个所述目录信息在所述目标路径信息中的先后顺序。
具体的,创建初始目录树,为初始目录树设置一个虚拟的根节点,为了和后续的节点对应,根节点也对应一个包含目录名称和身份标识的目录信息,虽然根节点是虚拟节点,但根节点对应的目录信息中的身份标识与其他目录的身份标识也是一样的。根据目标路径信息中所包含的目录信息,生成对应的目录节点,目录节点的名称可以是目录信息中的目录名称,目标节点的身份标识可以是目录信息中的身份标识,也可以理解为每个目录节点都存在与之对应的目录信息。若多个目标路径信息中包括部分相同的目录信息,那些相同的目录信息只生成一次目标节点即可。例如,目标路径信息为:(A,01)\(B,001)\(C,0001),和(A,01)\(B,001),其中路径信息中的“(A,01)”表示目录信息,目录信息中的“A”表示目录名称,目录信息中的“01”表示身份标识。虽然上述目标路径信息中一共包括5个目录信息,但其中2个目录信息都是相同的,因此只需要生成3个目录节点即可,此处的目录信息相同是指目录信息中的目录名称和身份标识均相同。
由于目标路径信息中包含至少一个目录的目录信息,根据每个目录信息在目标路径信息中前后顺序,确定目标拓扑顺序,目标拓扑顺序也可以是指每个目录信息在所有目录信息中的先后顺序。
例如,目标路径信息为:(A,01)\(B,001)\(C,0001),该目标路径信息表示目录A是目录B的父目录,目录B又是目录C的父目录,那么目标拓扑顺序就是:目录信息((A,01))→目录信息((B,001))→目录信息((C,0001))。又例如,目标路径信息为:(A,01)\(B,001)\(C,0001),以及(D,02)\(E,002),那么目标拓扑顺序就是:目录信息(A,01)→目录信息(B,001)→目录信息(C,0001);以及目录信息(D,02)→目录信息(E,002),上述两项目标拓扑顺序是平等关系。
由于每个目录信息都对应目录节点,根据确定的目标拓扑顺序,依次将生成的目录节点添加至初始目录树中的根节点下,得到目标目录树(如上述图2a所对应实施例中的目录树20e)。若有多项目标拓扑顺序,那么每项目标拓扑顺序中的目录节点就是初始目录树中根节点的一个分支。
仍以上述为例,目标拓扑顺序为:目录信息(A,01)→目录信息(B,001)→目录信息(C,0001);以及目录信息(D,02)→目录信息(E,002),那么将目录信息(A,01)对应的节点A作为根节点的左子节点,目录信息(B,001)对应的节点B作为节点A的子节点,目录信息(C,0001)对应的节点C作为节点B的子节点;将目录信息(D,02)对应的节点D作为根节点的右子节点,将目录信息(E,002)对应的节点E作为节点D的子节点,这样就构成了包含根节点、节点A、节点B、节点C、节点D和节点E的目标目录树。
步骤S103,按照所述目标拓扑顺序,对所述目标目录树所包含的所有目录依次进行恢复处理,得到与所述目标路径信息相匹配的目标目录,将所述目标数据还原至所述目标目录下。
具体的,目标目录树是按照目标拓扑顺序从根节点到叶节点依次构造的,为了保证能够将目标数据还原至原路径下,以及当批量还原目标数据时,提高还原的效率,仍旧按照目标拓扑顺序,从目标目录树中的根节点到叶节点依次恢复节点对应的目录,恢复后得到的目录都称为恢复目录,当目标目录树中的所有节点对应的恢复目录都恢复完毕时,可以将所有的恢复目录作为目标目录。这样在还原目标数据之前,已经将原路径上的所有目录恢复完毕,后续再将目标数据还原至目标目录下,即是将目标数据还原至原路径下。需要说明的是,数据还原至原路径下的意思是将数据还原至具有被删除前所在相同目录名称的目录下,但还原后的目录的身份标识和被删除前的目录的身份标识不一定相同,目录的身份标识是由操作系统创建目录时,一并生成的。
为了保证恢复目录的顺序,首先创建具有先进先出特性的队列(如上述图2a所对应实施例中的队列20f),称为目标队列,此时目标队列中不存在任何数据。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,进行插入操作的端称为队尾端,进行删除操作的端称为队头端,可以知道,随着向队列中插入数据,队列的队尾处不断变化;随着向队列中删除数据,队列的队头处不断变化。为目标目录树中的根节点设置第一状态标识,第一状态标识用于标识该节点为已处理的节点(由于根节点对应的目录是虚拟目录,不能被删除,为根节点设置第一状态可以当做根节点对应的目录已经被还原了),为目标目录树中除根节点以外的所有节点设置第二状态标识。首先将目标目录树中的根节点插入目标队列中,即将根节点插入目标队列的队尾处,从目标队列的队首处提取节点作为目标节点,此时目标队列中只有一个节点,即是根节点,此时该根节点既处于队尾处也是处于队首处,即根节点就是目标节点。遍历目标目录树中所有目标节点对应的具有第二状态标识的子节点,按照广度优先原则,从目标节点对应的具有第二状态标识的子节点中,选择一个子节点,作为目标子节点。当然,也可以按照深度优先原则,从目标节点对应的具有第二状态标识的子节点中,选择目标子节点。其中,广度优先是沿着目标目录树的宽度搜索目标目录树中的节点,深度优先是沿着目标目录树的深度搜索目标目录树中的节点。
将目标节点对应的目录信息中的身份标识所指示的目录,确定为指示目录。在指示目录中,若目标子节点对应的目录已经被删除了(即是在文件存储系统中已经不存在目标子节点对应的目录了),在指示目录下创建一个和被删除目录同样目录名称的目录,并为新创建的目标设置身份标识,上述设置的身份标识是和其余的目录(包括被删除的目录)的身份标识都不相同。将新创建的目录作为恢复目录,并根据恢复目录的身份标识,更新目标子节点对应的目录信息中的身份标识,更新后,目标子节点所对应的目录就是新创建的目录。若目标子节点对应的目录没有发生任何改变,那么就可以不作处理,直接将目标子节点对应的目录作为恢复目录即可。
目标子节点就处理完毕,就可以将恢复目录作为目标目录,并将目标子节点的第二状态标识设置为第一状态标识,并将目标子节点插入目标队列中。继续从目标节点对应的具有第二状态标识的子节点中,选择一个子节点,作为目标子节点,继续对目标子节点对应的目录进行恢复处理,继续将目标子节点对应的第二状态标识设置为第一状态标识,并添加至目标队列的队尾。当目标节点不存在具有第二状态标识的子节点时,将目标节点从目标队列中删除。继续将位于目标队列队首的节点,作为目标节点,再次从当前目标节点的所有具有第二状态标识的子节点中选择目标子节点,依次类推,直到目标队列为空集,说明此时目标目录树中的所有节点对应的目标目录都恢复完毕,即目标路径信息所指示的路径上所有目标目录都恢复完毕。根据目标目录树中对应的目录信息中的身份标识,将目标数据还原至上述叶节点对应身份叶节点标识所指示的目标目录中,这样就将目标数据还原至原路径下。
请参见图4,是本发明实施例提供的一种数据恢复的交互示意图,如图4所示,用户在终端的页面中选择删除的数据(称为目标数据),目标数据可以是文件也可以是目录,终端生成删除请求,并将该删除请求发送至删除服务器。删除服务器根据删除请求,在文件存储系统中查询该目标数据所在目录的路径信息,作为目标路径信息。删除服务器将查询的目标路径信息和目标数据的身份标识关联存储在数据库中,同时在文件存储系统中删除目标数据。当用户在终端的页面中选择恢复上述目标数据时,终端生成还原请求,并将该还原请求发送至还原服务器,还原服务器在数据库中查找目标数据对应的目标路径信息,根据目标路径信息中所包含的目录信息,生成目标目录树。还原服务器按照从根节点到叶子节点的顺序,依次还原目标目录树中所包含的目录。目标目录树中的目录还原完毕后,说明目标数据被删除前目标路径信息所对应的原路径下的所有目录都构建完成,最后将目标数据还原至原路径下即可,也就是在文件存储系统中还原目标数据。
需要说明的是,若一个文件在不同的目录下被执行了复制操作,可以得到多个内容相同但身份标识不同的文件,对终端来说,由于身份标识不一样,因此复制得到的多个文件是多个独立、互不相同的文件。若这些文件都被删除且需要同时批量还原,由于被删除前这些文件的路径信息都各不相同,因此可以构建多个分支的目标目录树,再按目标拓扑顺序依次还原目标目录树中的目录,最后将删除的文件的还原至原不同目录下。对删除服务器来说,需要查询待删除文件的路径信息,并将路径信息记录在数据库中,以及删除上述复制的文件。
本发明实施例通过根据待还原的目标数据在原路径上所包含的多个目录,以及多个目录在原路径上的前后顺序,构建目录树,按照多个目录在原路径上的前后顺序,依次还原目录树中所包含的目录,这样在还原目标数据之前就将原路径上的所有目录进行了还原,最后就可以将目标数据还原至原路径下。将目标数据还原至原路径下可以丰富数据的还原方式,同时,相比将目标数据还原到根目录,将目标数据还原回原路径的方式可以使得存储空间的层级分配更加合理,进而提高读取存储空间中数据的效率,进一步地,还原到原路径也可以降低存储空间的维护和管理成本。
进一步地,请参见图5,是本发明实施例提供的另一种数据恢复方法的流程示意图,数据恢复方法的具体过程可以包括如下步骤:
步骤S201,获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息。
步骤S202,根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树;所述目标拓扑顺序是每个所述目录信息在所述目标路径信息中的先后顺序。
其中,步骤S201-步骤S202的具体实现方式可以参见上述图3对应实施例中的步骤S101-步骤S102,这里不再进行赘述。
步骤S203,创建具有先进先出特性的目标队列,将所述目标目录树中的根节点添加至所述目标队列的队尾处。
具体的,为目标目录树中的根节点设置第一状态标识,为目标目录树中除根节点以外的所有节点设置第二状态标识。为了保证目录的恢复顺序,首先创建具有先进先出特性的队列,称为目标队列,此时目标队列中不存在任何数据。队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,进行插入操作的端称为队尾端,进行删除操作的端称为队头端,可以知道,随着向队列中插入数据,队列的队尾处不断变化;随着向队列中删除数据,队列的队头处不断变化。将目标目录树中的根节点添加至目标队列的队尾处,此时目标队列中就包含根节点,且根节点既是目标队列的队首所指向的节点,也是目标队列的队尾所指向的节点。
步骤S204,将位于所述目标队列队首处的节点作为目标节点,遍历所述目标目录树,将所述目标节点对应的所有具有第二状态标识的子节点中的任一子节点,作为目标子节点。
具体的,将位于目标队列队首处的节点作为目标节点,此时目标目录树中的根节点就是目标节点。遍历目标目录树中所有目标节点对应的具有第二状态标识的子节点,按照广度优先原则或者深度优先原则,从目标节点对应的具有第二状态标识的子节点中,选择一个子节点,作为目标子节点。
步骤S205,将所述目标节点对应的目录信息中的身份标识所指示的目录,确定为指示目录,在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识。
具体的,将目标节点对应的目标信息中的身份标识所指示的目录作为指示目录,需要说明的是,由于目标目录树中的根节点是虚拟节点,对应地,也可以设置一个虚拟目录作为根节点对应的指示目录。当待还原的目标数据不止一个时,那么对应的目标路径信息也不止一个,检测多个目标路径信息中是否存在和目标子节点对应的目录的路径信息相同的目标路径信息,若存在的话,将上述存在的目标路径信息作为同名路径信息,并将同名路径信息对应的目标数据作为还原数据,并将还原数据还原至目标节点所指示的指示目录中。再将还原数据中具有目标子节点对应的目录信息中的目录名称的目录确定为恢复目录,并将目标子节点对应的目录信息中的身份标识替换为上述恢复目录的身份标识,实际上,由于是直接将部分目标数据作为恢复目录,并还原至指示目录下,因此还原回来的目标数据(恢复目录)的身份标识是没有改变的,即无论是替换前或者替换后,目标子节点对应的目录信息中的身份标识都是一样的。上述情况是对应于目标数据A是目标数据B路径上的目录,那么目标数据A对应的目标路径信息就是同名路径信息,就需要先将目标数据A还原回去。
举例来说,目录A中包含目录B,目录B中包含目录C,目录C中包含文件D。先将文件D删除,然后再将目录B删除,且需要将文件D和目录B批量还原,那么目录B的目标路径信息为:(目录A,1)\;文件D的目标路径信息为:(目录A,1)\(目录B,2)\(目录C,3)。当目标节点为目录A对应的节点A时,对应地,目标子节点为目录B对应的节点B,此时目标子节点(节点B)对应的目录的路径信息是:(目录A,1)\,与目标路径信息“(目录A,1)\”相同,那么目标路径信息“(目录A,1)\”就是同名路径信息,该同名路径信息对应的目标数据是目录B,因此将目录B作为还原数据,还原至目标节点所指示的目录下,即将目录B还原至目录A中。同时,目标子节点(节点B)对应的目录信息为:(目录B,2),即目标子节点对应的目录信息中的目录名称为:目录B,该目录名称和还原数据“目录B”的目录名称相同,因此,将目录B作为恢复目录,并替换节点B对应的目录信息中的身份标识,由于是直接将目录B还原,实际上,身份标识没有发生变化,就不必进行替换。
通过上述检测同名路径信息,在批量还原时,可以避免重复还原不同目标路径信息上的相同目录,可以提高还原效率。
若目标路径信息中不存在同名路径信息,则提取目标子节点对应的目录信息中的目录名称,作为辅助目录名称;提取目标子节点对应的目录信息中的身份标识,作为辅助身份标识。在目标节点所指示的指示目录中,检测指示目录中是否包含同时具有辅助目录名称和辅助身份标识的目录。
若在指示目录中不存在同时具有辅助目录名称和辅助身份标识的目录,那么说明该子节点对应的目录被删除了,或者目录名称被修改了。为了达到将目标数据还原至原路径下的目的,在指示目录中创建一个目录,作为恢复目录,并为该恢复目录设置唯一的身份标识,且创建的恢复目录的目录名称和辅助目录名称相同,需要说明的是,新创建的目录,它的身份标识必然是唯一的,即使目录已经被删除,被删除目录的身份标识也不可能和新创建的目录的身份标识一样,但目录名称可以相同。可以理解为,新创建的目录和被删除的目录都具有相同的目录名称,但新创建的目录的身份标识和被删除目录的身份标识是不一样的,由于终端向用户展示的路径信息是只包含目录名称的,单从用户角度看路径信息,当前创建的目录和被删除的目录是一样,但对终端来说,两个目录是不一样的。由于已经重新创建了目录,且创建的目录是对应与目标子节点的,因此将目标子节点对应的目录信息中的身份标识替换为新创建的目录的身份标识,由于目录名称是一样的,那么目标子节点对应的目录信息中的目录名称就可以不作处理。
若在指示目录中包含同时具有辅助目录名称和辅助身份标识的目录,那么说明该子节点对应的目录没有被删除,目录名称也没有被修改,目录保持不变。直接将指示目录中同时具有辅助目录名称和辅助身份标识的目录,作为恢复目录,即是将该子节点对应的目录作为恢复目录,同样地,将目标子节点对应的目录信息中的身份标识替换为该恢复目录(在指示目录下没有发生任何变化的目录)的身份标识。由于在指示目录下,恢复目录无论是目录名称和身份标识都没有发生变化,因此为了提高效率,在这种情况下,可以不用对目标子节点对应的目录信息中的身份标识作任何处理,保持目标子节点对应的目录信息不变即可。
若在指示目录中存在具有辅助目录名称,但不具有辅助身份标识的目录,为了减少合并冲突,就可以直接将指示目录中具有辅助目录名称,但不具有辅助身份标识的目录作为恢复目录,此时恢复目录的身份标识和目标子节点的对应的目录信息中的身份标识不同,因此需要将目标子节点的对应的目录信息中的身份标识替换为上述恢复目录的身份标识,即替换为目录中具有辅助目录名称,但不具有辅助身份标识的目录的身份标识。出现这种情况,是由于目标子节点对应的目录被删除了,或者目录名称被修改了,然后在其他情况下在目标节点对应的指示目录下创建了一个同名的目录(新创建目录的身份标识必然和被删除目录的身份标识不一样)。例如,用户自主在指示目录下,创建了一个同名目录。当执行恢复操作时,就可以直接将上述同名目录作为恢复目录,进而更新目标子节点的目录信息中的身份标识即可,不必再重新创建,这样也可以避免合并冲突,进一步提高效率,降低和用户之间的交互次数(一般说来,当存在合并冲突时,都需要用户手动选择是否进行合并)。
步骤S206,将所述目标子节点的第二状态标识设置为所述第一状态标识,并将所述目标子节点添加至所述目标队列的队尾处。
具体的,上述步骤是恢复一个节点对应的目录,得到的恢复目录。将上述确定的恢复目录确定为目标目录,并将当前的目标子节点的第二状态标识设置为第一状态标识,然后再将携带第一状态标识的目标子节点插入目标队列的队尾。也就是说,若已经将目标子节点对应的目录恢复到目标节点对应的目录下,且已经更新了目标子节点对应的目录信息中的身份标识,那么说明目标子节点对应的目录已经处理完毕,可以修改目标子节点的状态标识,用于表明目标子节点已经处理完成,已经处理完成的节点就插入目标队列中。这样可以保证是按照目标拓扑顺序(从目标目录树的根节点到叶节点),对目标目录树中的目录进行的目录恢复。
步骤S207,当所述目标节点对应的所有子节点中不存在具有第二状态标识的子节点时,将所述目标节点从所述目标队列中删除,并将位于所述目标队列队首处的节点作为目标节点。
具体的,将目标子节点插入至目标队列后,又要确定下一个目标子节点。检测目标节点对应的子节点中,是否还存在具有第二状态标识的子节点,即是检测是否存在还没被处理的子节点,若还存在具有第二状态标识的子节点,那么又继续按照广度优先原则,从具有第二状态标识的子节点中,选择目标子节点,继续按照上述方式,对目标子节点对应的目录进行恢复。若目标节点对应的所有子节点中,不存在具有第二状态标识符的子节点了,说明目标节点的所有子节点都处理完毕,就将目标节点从目标队列中的删除。删除了目标节点后,继续将目标队列中位于对首处的节点作为目标节点,再次从目标节点中选择具有第二状态标识的目标子节点,继续对目标子节点对应的目录进行恢复。
上述过程可以总结为:外层循环是将目标队列中位于队首的节点作为目标节点,即外层循环是选择目标节点,内层循环是从目标节点的子节点中选择具有第二状态标识的目标子节点,即内层循环是选择目标子节点,循环体是将目标子节点对应的目录进行恢复。恢复的过程是:若目标路径信息中包含同名路径信息,则将同名路径信息对应的目标数据进行还原;若目标路径信息中不包含同名路径信息,则检测目标子节点对应的目录是否被删除或者被改名称,若被删除或者被改名称,就创建一个同名的新的目录,并更新目标子节点对应身份标识,更新身份标识后使得目标子节点对应的是最新的目录,而不再是那个被删除的目录了。若目标子节点对应的目录仍在父目录下(目标节点对应的目录)且发生任何变化,那么可以保持不变。按照这个过程,可以还原目标目录树中所包含的目录。
步骤S208,当所述目标队列为空集时,将所述恢复目录确定为所述目标目录,查找所述目标目录树中叶节点对应的目录信息中的身份标识,将查找到的身份标识对应的目录作为所述目标目录中的叶目录,将所述目标数据还原于所述目标目录中的叶目录下。
具体的,当目标队列为空集时,说明目标目录树中的所有节点都处理完毕,即目标数据原路径上的所有目录都已经还原。接下来,将目标数据进行还原,查找目标目录树中叶节点对应的目录信息中的身份标识,查找到的身份标识所指示的目录就是目标目录中的叶目录,叶目录是所有目标目录中层级最低的目录,将目标数据还原在上述叶目录下。
需要说明的是,若目标路径信息中包含了同名路径信息,那么部分目标数据在上述还原目标目录树中的目录的时候,就已经还原,此处是将其余未还原的目标数据还原到叶目录下。若未还原的目标数据只有一个,那么就直接将目标数据还原至叶目录下,若未还原的目标数据还有多个,叶目录可能是多个,也可能是一个。此时就需要对每个目标数据依次还原,首先查找目标数据对应的目标路径信息,根据查找到的路径信息确定在目标目录树中与该路径信息对应的叶节点,同样地根据叶节点的身份标识,确定叶目录,将目标数据还原到叶目录下,按照上述方式,可以将多个目标数据依次还原至叶目录下。
可选的,当待还原的目标数据不止一个时,检测目标数据对应的所有目标路径信息中,是否存在和目标子节点对应的目录的路径信息相同的目标路径信息,若存在的话,进一步检测上述存在路径信息对应的目标数据是否属于目录类型,若目标数据也属于目录类型时,再进一步检测目标数据的目录名称和目标子节点对应的目录信息中的目录名称是否相同,若上述三个条件均满足,那么将满足上述三个条件的目标数据作为同名数据。将同名数据还原至目标节点所指示的指示目录中。由于同名数据属于目录类型,因此直接将同名数据确定为恢复目录,并将目标子节点对应的目录信息中的身份标识替换为上述恢复目录的身份标识,实际上,由于是直接将同名数据作为恢复目录,并还原至指示目录下,因此还原回来的同名数据(恢复目录)的身份标识是没有改变的,即无论是替换前或者替换后,目标子节点对应的目录信息中的身份标识都是一样的。上述情况是对应于目标数据A是目标数据B路径上的目录,那么目标数据A就是同名数据,就需要先将目标数据A还原回去。
举例来说,目录A中包含目录B,目录B中包含目录C,目录C中包含文件D。先将文件D删除,然后再将目录B删除,且需要将文件D和目录B批量还原,那么目录B的目标路径信息为:(目录A,1)\;文件D的目标路径信息为:(目录A,1)\(目录B,2)\(目录C,3)。当目标节点为目录A对应的节点A时,对应地,目标子节点为目录B对应的节点B,此时目标子节点(节点B)对应的目录的路径信息是:(目录A,1)\与目标路径信息“(目录A,1)\”相同,且目标数据“目录B”属于目录类型,同时,目标子节点(节点B)对应的目录信息为:(目录B,2),即目标子节点对应的目录信息中的目录名称为:目录B,该目录名称和目标数据“目录B”的目录名称相同,那么目标数据“目录B”就是同名数据,将该同名数据还原至目标节点所指示的目录下,即将目录B还原至目录A中,将目录B作为恢复目录,并替换节点B对应的目录信息中的身份标识,由于是直接将目录B还原,实际上,身份标识没有发生变化,就不必进行替换。
对应地,当目标队列为空集时,说明目标目录树中的所有节点都处理完毕,即目标数据原路径上的所有目录都已经还原。接下来,将目标数据进行还原,即在目标目录树中查找与目标数据相匹配的节点,作为数据所在节点,提取数据所在节点的目录信息中的身份标识,将目标数据还原至上述查找到的身份标识对应的目录下。此处的匹配是指目标数据在目标目录树所对应所有节点中,层级最低节点。例如,目标数据A的目标路径信息为:(目录A,01)\(目录B,001),若在目标目录树中,目标数据A的目标路径信息对应的目录节点为:节点A和节点B,那么与目标数据匹配的数据所在节点即是层级最低的节点B。
需要说明的是,若目标数据中包含了同名数据,那么同名数据在上述还原目标目录树中的目录的时候,就已经还原,此处是将其余未还原的目标数据还原到目标数据对应的数据所在节点所指示的目录下。
请参见图6a-图6g,是本发明实施例提供的一种数据还原的过程示意图。现有目录A1和目录A2,目录B1是目录A1的子目录,目录C1是目录B1的子目录,且目录C1中包含文档1;目录B2是目录A2的子目录,且目录B2中包含文档2,如图6a所示,用户删除了文档1、文档2、目录B1、目录B2和目录C1,现需要恢复文档1、文档2和目录B1,在数据库中查询到文档1的目标路径信息为:(A1,01)\(B1,001)\(C1,0001);文档2的目标路径信息为:(A2,02)\(B2,002);目录B1的路径信息为:(A1,01)\。根据上述3项目标路径信息构建目标目录树。
如图6b所示,按照目标路径信息所包含的目录信息,构建目标目录树(目标目录树包含虚拟的根节点R),每个节点都存在对应的目录信息,目录信息包括目录名称和该目录的身份标识。为目标目录树中的节点R设置第一状态标识,为目标目录树中的除节点R以外的其余节点设置第二状态标识。创建目标队列,将节点R添加至目标队列中。将位于目标队列首位的节点作为目标节点,即节点R为目标节点,在节点R的所有具有第二状态标识的子节点中,按照广度优先原则,选择节点A1为目标子节点(图6b中用虚线表示节点A1为当前处理对象)。由于节点A1对应的目录没有被删除,也没有被修改名称,仍在原路径下,因此,对节点A1对应的目录信息就不必作任何更新操作。节点A1处理完毕,那么就将节点A1的第二状态标识设置为第一状态标识,并插入目标队列的队尾。此时目标队列中就包含节点R和节点A1。
如图6c所示,继续在节点R的所有具有第二状态标识的子节点中,按照广度优先原则,选择节点A2为目标子节点(图6c中用虚线表示节点A2为当前处理对象),同样地,由于节点A2对应的目录没有被删除,也没有被修改名称,仍在原路径下,因此,对节点A2对应的目录信息就不必作任何更新操作。节点A2处理完毕,那么就将节点A2的第二状态标识设置为第一状态标识,并插入目标队列的队尾。此时目标队列中就包含节点R、节点A1和节点A2。
如图6d所示,由于节点R的所有子节点中,不存在具有第二状态标识的子节点了,因此将节点R从目标队列中删除,此时,目标队列中就包含节点A1和节点A2。将位于目标队列首位的节点作为目标节点,即节点A1为目标节点,在节点A1的所有具有第二状态标识的子节点中,按照广度优先原则,选择节点B1为目标子节点(图6d中用虚线表示节点B1为处理对象)。由于目录B1的目标路径信息和节点B1对应的目录(目录B1,身份标识001)的路径信息相同,因此,目录B1的目标路径信息是同名路径信息,且目录B1是还原数据。将目录B1还原至节点A1对应的目录中,由于目录B1是还原回来的,因此节点B1对应的目录信息也不必修改。节点B1处理完毕,那么就将节点B1的第二状态标识设置为第一状态标识,并插入目标队列的队尾。此时目标队列中就包含节点A1、节点A2和节点B1。
如图6e所示,由于节点A1的所有子节点中,不存在具有第二状态标识的子节点了,因此将节点A1从目标队列中删除,此时,目标队列中就包含节点A2和节点B1。将位于目标队列首位的节点作为目标节点,即节点A2为目标节点,在节点A2的所有具有第二状态标识的子节点中,按照广度优先原则,选择节点B2为目标子节点(图6e中用虚线表示节点B2为当前处理对象)。由于目录B2已经被删除,且目录B2不是目标数据,因此在节点A2对应的目录A2下,创建一个新的、目录名称为B2的目录,为该新的目录设置唯一标识符:102。将节点B2中对应的目录信息中的身份标识由002替换为102。节点B2处理完毕,那么就将节点B2的第二状态标识设置为第一状态标识,并插入目标队列的队尾。此时目标队列中就包含节点A2、节点B1和节点B2。
如图6f所示,由于节点A2的所有子节点中,不存在具有第二状态标识的子节点了,因此将节点A2从目标队列中删除,此时,目标队列中就包含节点B1和节点B2。将位于目标队列首位的节点作为目标节点,即节点B1为目标节点,在节点B1的所有具有第二状态标识的子节点中,按照广度优先原则,选择节点C1为目标子节点(图6f中用虚线表示节点C1为当前处理对象)。由于目录C1已经被删除,且目录C1不是目标数据,因此在节点B1对应的目录B1下,创建一个新的、目录名称为C1的目录,为该新的目录设置唯一标识符:1001。将节点C1中对应的目录信息中的身份标识由0001替换为1001。节点C1处理完毕,那么就将节点C1的第二状态标识设置为第一状态标识,并插入目标队列的队尾。此时目标队列中就包含节点B1、节点B2和节点C1。
如图6g所示,由于节点B1的所有子节点中,不存在具有第二状态标识的子节点了,因此将节点B1从目标队列中删除,此时,目标队列中就包含节点B2、节点C1。同样地,节点B2的所有子节点中,不存在具有第二状态标识的子节点了,因此将节点B2从目标队列中删除,此时,目标队列中就包含节点C1。节点C1的所有子节点中,不存在具有第二状态标识的子节点了,因此将节点C1从目标队列中删除,此时,目标队列为空集,说明目标目录树中的所有目录都还原完毕。
目标数据中就剩文档1和文档2还未还原,根据文档1对应的目标路径信息,确定该目标路径信息在目标目录树中的叶节点为节点C1,提取节点C1对应的目录信息中的身份标识:1001,将文档1还原至身份标识为1001的目录中。根据文档2对应的目标路径信息,确定该目标路径信息在目标目录树中的叶节点为节点B2,提取节点B2对应的目录信息中的身份标识:102,将文档2还原至身份标识为102的目录中。
本发明实施例通过根据待还原的目标数据在原路径上所包含的多个目录,以及多个目录在原路径上的前后顺序,构建目录树,按照多个目录在原路径上的前后顺序,依次还原目录树中所包含的目录,这样在还原目标数据之前就将原路径上的所有目录进行了还原,最后就可以将目标数据还原至原路径下。将目标数据还原至原路径下可以丰富数据的还原方式,同时,相比将目标数据还原到根目录,将目标数据还原回原路径的方式可以使得存储空间的层级分配更加合理,进而提高读取存储空间中数据的效率,进一步地,还原到原路径也可以降低存储空间的维护和管理成本。
进一步的,请参见图7,是本发明实施例提供的一种数据恢复装置的结构示意图。如图7所示,数据恢复装置1可以包括:获取模块11、构建模块12、还原模块13。
获取模块11,用于获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息;
构建模块12,用于根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树;所述目标拓扑顺序是每个所述目录信息在所述目标路径信息中的先后顺序;
还原模块13,用于按照所述目标拓扑顺序,对所述目标目录树所包含的所有目录依次进行恢复处理,得到与所述目标路径信息相匹配的目标目录,将所述目标数据还原至所述目标目录下。
其中,获取模块11、构建模块12、还原模块13的具体功能实现方式可以参见上述图3对应实施例中的步骤S101-步骤S103,这里不再进行赘述。
请参见图7,获取模块11可以包括:获取单元111、提取单元112。
获取单元111,用于当接收到与所述目标数据对应的恢复请求时,根据所述恢复请求中所携带的与所述目标数据对应的目标身份标识,获取所述目标数据;
提取单元112,用于在数据库中查找与所述目标身份标识对应的目标键值对,在所述目标键值对中提取所述目标路径信息。
其中,获取单元111、提取单元112的具体功能实现方式可以参见上述图3对应实施例中的步骤S101,这里不再进行赘述。
请参见图7,构建模块12可以包括:设置单元121、生成单元122。
设置单元121,用于创建初始目录树,为所述初始目录树设置根节点;
生成单元122,用于根据所述目标路径信息所包含的至少一个目录信息,生成多个目录节点,根据所述多个目录节点分别对应的目录信息在所述目标路径信息中的顺序,确定所述目标拓扑顺序;
所述生成单元122,还用于根据所述目标拓扑顺序,将所述多个目录节点依次添加至所述初始目录树中,得到所述目标目录树。
其中,设置单元121、生成单元122的具体功能实现方式可以参见上述图3对应实施例中的步骤S102,这里不再进行赘述。
请参见图7,所述根节点具有第一状态标识;所述多个目录节点均具有第二状态标识;
还原模块13可以包括:创建单元131、遍历单元132、恢复单元133、添加单元134、删除单元135、查找单元136。
创建单元131,用于创建具有先进先出特性的目标队列,将所述目标目录树中的根节点添加至所述目标队列的队尾处;
遍历单元132,用于将位于所述目标队列队首处的节点作为目标节点,遍历所述目标目录树,将所述目标节点对应的所有具有第二状态标识的子节点中的任一子节点,作为目标子节点;
所述遍历单元132,还用于将所述目标节点对应的目录信息中的身份标识所指示的目录,确定为指示目录;
恢复单元133,用于在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识;
添加单元134,用于将所述目标子节点的第二状态标识设置为所述第一状态标识,并将所述目标子节点添加至所述目标队列的队尾处;
删除单元135,用于当所述目标节点对应的所有子节点中不存在具有第二状态标识的子节点时,将所述目标节点从所述目标队列中删除,并将位于所述目标队列队首处的节点作为目标节点;
查找单元136,用于当所述目标队列为空集时,将所述恢复目录确定为所述目标目录,查找所述目标目录树中叶节点对应的目录信息中的身份标识,将查找到的身份标识对应的目录作为所述目标目录中的叶目录,将所述目标数据还原于所述目标目录中的叶目录下。
其中,创建单元131、遍历单元132、恢复单元133、添加单元134、删除单元135、查找单元136的具体功能实现方式可以参见上述图3对应实施例中的步骤S103,这里不再进行赘述。
请参见图7,恢复单元133可以包括:第一恢复子单元1331、第二恢复子单元1332。
第一恢复子单元1331,用于若所述目标路径信息中存在同名路径信息,则将所述同名路径信息对应的目标数据确定为还原数据,将所述还原数据还原至所述指示目录下,将所述还原数据中具有所述目标子节点对应的目录信息中的目录名称的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录的身份标识;所述同名路径信息和所述目标子节点对应的目录信息所指示的目录的路径信息相同;
第二恢复子单元1332,用于若所述目标路径信息中不存在所述同名路径信息,则在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识。
其中,第一恢复子单元1331、第二恢复子单元1332的具体功能实现方式可以参见上述图5对应实施例中的步骤S205,这里不再进行赘述。
请参见图7,第二恢复子单元1332可以包括:第一确定子单元13321、第二确定子单元13322。
第一确定子单元13321,用于将所述目标子节点对应的目录信息中的目录名称作为辅助目录名称,将所述目标子节点对应的目录信息中的身份标识作为辅助身份标识;
所述第一确定子单元13321,还用于当所述指示目录中不存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,在所述指示目录中创建目录,作为所述恢复目录,并为所述恢复目录设置身份标识;
所述第一确定子单元13321,还用于在所述目标目录树中,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录对应的身份标识;所述恢复目录的目录名称和所述目标子节点对应的目录信息中的目录名称相同;
第二确定子单元13322,用于当所述指示目录中存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,将所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录的身份标识。
其中,第一确定子单元13321、第二确定子单元13322的具体功能实现方式可以参见上述图5对应实施例中的步骤S205,这里不再进行赘述。
请参见图7,第二恢复子单元1332可以包括:第一确定子单元13321、第二确定子单元13322,还可以包括:第三确定子单元13323。
第三确定子单元13323,用于当所述指示目录中存在具有所述辅助目录名称,但不具有所述辅助身份标识的目录时,将所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录的身份标识。
其中,第三确定子单元13323的具体功能实现方式可以参见上述图5对应实施例中的步骤S205,这里不再进行赘述。
请参见图7,数据恢复装置1可以包括:获取模块11、构建模块12、还原模块13,还可以包括:查询模块14、组合模块15。
查询模块14,用于当接收到与所述目标数据对应的删除请求时,根据所述删除请求,确定与所述目标数据对应的目标身份标识,并查询与所述目标身份标识对应的目标路径信息;
组合模块15,用于将所述目标身份标识和所述目标路径信息组合为目标键值对,将所述目标键值对存储在数据库中,并删除所述目标数据。
其中,查询模块14、组合模块15的具体功能实现方式可以参见上述图3对应实施例中的步骤S101,这里不再进行赘述。
本发明实施例通过根据待还原的目标数据在原路径上所包含的多个目录,以及多个目录在原路径上的前后顺序,构建目录树,按照多个目录在原路径上的前后顺序,依次还原目录树中所包含的目录,这样在还原目标数据之前就将原路径上的所有目录进行了还原,最后就可以将目标数据还原至原路径下。将目标数据还原至原路径下可以丰富数据的还原方式,同时,相比将目标数据还原到根目录,将目标数据还原回原路径的方式可以使得存储空间的层级分配更加合理,进而提高读取存储空间中数据的效率,进一步地,还原到原路径也可以降低存储空间的维护和管理成本。
进一步地,请参见图8,是本发明实施例提供的一种电子设备的结构示意图。如图8所示,上述图8中的数据恢复装置1可以应用于所述电子设备1000,所述电子设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,所述电子设备1000还可以包括至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图8所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在图8所示的电子设备1000中,网络接口1004可提供网络通讯功能;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息;
根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树;所述目标拓扑顺序是每个所述目录信息在所述目标路径信息中的先后顺序;
按照所述目标拓扑顺序,对所述目标目录树所包含的所有目录依次进行恢复处理,得到与所述目标路径信息相匹配的目标目录,将所述目标数据还原至所述目标目录下。
在一个实施例中,所述处理器1001在执行获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息时,具体执行以下步骤:
当接收到与所述目标数据对应的恢复请求时,根据所述恢复请求中所携带的与所述目标数据对应的目标身份标识,获取所述目标数据;
在数据库中查找与所述目标身份标识对应的目标键值对,在所述目标键值对中提取所述目标路径信息。
在一个实施例中,所述处理器1001在执行根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树时,具体执行以下步骤:
创建初始目录树,为所述初始目录树设置根节点;
根据所述目标路径信息所包含的至少一个目录信息,生成多个目录节点,根据所述多个目录节点分别对应的目录信息在所述目标路径信息中的顺序,确定所述目标拓扑顺序;
根据所述目标拓扑顺序,将所述多个目录节点依次添加至所述初始目录树中,得到所述目标目录树。
在一个实施例中,所述根节点具有第一状态标识;所述多个目录节点均具有第二状态标识;
所述处理器1001在执行按照所述目标拓扑顺序,对所述目标目录树所包含的所有目录依次进行恢复处理,得到与所述目标路径信息相匹配的目标目录,将所述目标数据还原至所述目标目录下时,具体执行以下步骤:
创建具有先进先出特性的目标队列,将所述目标目录树中的根节点添加至所述目标队列的队尾处;
将位于所述目标队列队首处的节点作为目标节点,遍历所述目标目录树,将所述目标节点对应的所有具有第二状态标识的子节点中的任一子节点,作为目标子节点;
将所述目标节点对应的目录信息中的身份标识所指示的目录,确定为指示目录,在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识;
将所述目标子节点的第二状态标识设置为所述第一状态标识,并将所述目标子节点添加至所述目标队列的队尾处;
当所述目标节点对应的所有子节点中不存在具有第二状态标识的子节点时,将所述目标节点从所述目标队列中删除,并将位于所述目标队列队首处的节点作为目标节点;
当所述目标队列为空集时,将所述恢复目录确定为所述目标目录,查找所述目标目录树中叶节点对应的目录信息中的身份标识,将查找到的身份标识对应的目录作为所述目标目录中的叶目录,将所述目标数据还原于所述目标目录中的叶目录下。
在一个实施例中,所述处理器1001在执行在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识时,具体执行以下步骤:
若所述目标路径信息中存在同名路径信息,则将所述同名路径信息对应的目标数据确定为还原数据,将所述还原数据还原至所述指示目录下,将所述还原数据中具有所述目标子节点对应的目录信息中的目录名称的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录的身份标识;所述同名路径信息和所述目标子节点对应的目录信息所指示的目录的路径信息相同;
若所述目标路径信息中不存在所述同名路径信息,则在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识。
在一个实施例中,所述处理器1001在执行在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识时,具体执行以下步骤:
将所述目标子节点对应的目录信息中的目录名称作为辅助目录名称,将所述目标子节点对应的目录信息中的身份标识作为辅助身份标识;
当所述指示目录中不存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,在所述指示目录中创建目录,作为所述恢复目录,并为所述恢复目录设置身份标识;
在所述目标目录树中,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录对应的身份标识;所述恢复目录的目录名称和所述目标子节点对应的目录信息中的目录名称相同;
当所述指示目录中存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,将所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录的身份标识。
在一个实施例中,所述处理器1001还执行以下步骤:
当所述指示目录中存在具有所述辅助目录名称,但不具有所述辅助身份标识的目录时,将所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录的身份标识。
在一个实施例中,所述处理器1001还执行以下步骤:
当接收到与所述目标数据对应的删除请求时,根据所述删除请求,确定与所述目标数据对应的目标身份标识,并查询与所述目标身份标识对应的目标路径信息;
将所述目标身份标识和所述目标路径信息组合为目标键值对,将所述目标键值对存储在数据库中,并删除所述目标数据。
将目标数据还原至原路径下可以丰富数据的还原方式,同时,相比将目标数据还原到根目录,将目标数据还原回原路径,可以使得存储空间的层级分配更加合理,进而提高读取存储空间中数据的效率,进一步地,还原到原路径也可以降低存储空间的维护和管理成本。
应当理解,本发明实施例中所描述的电子设备1000可执行前文图3到图6g所对应实施例中对所述数据恢复方法的描述,也可执行前文图7所对应实施例中对所述数据恢复装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本发明实施例还提供了一种计算机存储介质,且所述计算机存储介质中存储有前文提及的数据恢复装置1所执行的计算机程序,且所述计算机程序包括程序指令,当所述处理器执行所述程序指令时,能够执行前文图3到图6g所对应实施例中对所述数据恢复方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本发明所涉及的计算机存储介质实施例中未披露的技术细节,请参照本发明方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (11)
1.一种数据恢复方法,其特征在于,包括:
获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息;
创建初始目录树,为所述初始目录树设置根节点;
根据所述目标路径信息所包含的至少一个目录信息,生成多个目录节点,根据所述多个目录节点分别对应的目录信息在所述目标路径信息中的顺序,确定所述目标拓扑顺序;所述根节点具有第一状态标识;所述多个目录节点均具有第二状态标识;
根据所述目标拓扑顺序,将所述多个目录节点依次添加至所述初始目录树中,得到所述目标目录树;所述目标拓扑顺序是每个所述目录信息在所述目标路径信息中的先后顺序;
创建具有先进先出特性的目标队列,将所述目标目录树中的根节点添加至所述目标队列的队尾处;
将位于所述目标队列队首处的节点作为目标节点,遍历所述目标目录树,将所述目标节点对应的所有具有第二状态标识的子节点中的任一子节点,作为目标子节点;
将所述目标节点对应的目录信息中的身份标识所指示的目录,确定为指示目录,在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识;
将所述目标子节点的第二状态标识设置为所述第一状态标识,并将所述目标子节点添加至所述目标队列的队尾处;
当所述目标节点对应的所有子节点中不存在具有第二状态标识的子节点时,将所述目标节点从所述目标队列中删除,并将位于所述目标队列队首处的节点作为目标节点;
当所述目标队列为空集时,将所述恢复目录确定为目标目录,查找所述目标目录树中叶节点对应的目录信息中的身份标识,将查找到的身份标识对应的目录作为所述目标目录中的叶目录,将所述目标数据还原于所述目标目录中的叶目录下。
2.根据权利要求1所述的数据恢复方法,其特征在于,所述获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息,包括:
当接收到与所述目标数据对应的恢复请求时,根据所述恢复请求中所携带的与所述目标数据对应的目标身份标识,获取所述目标数据;
在数据库中查找与所述目标身份标识对应的目标键值对,在所述目标键值对中提取所述目标路径信息。
3.根据权利要求1所述的数据恢复方法,其特征在于,所述在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识,包括:
若所述目标路径信息中存在同名路径信息,则将所述同名路径信息对应的目标数据确定为还原数据,将所述还原数据还原至所述指示目录下,将所述还原数据中具有所述目标子节点对应的目录信息中的目录名称的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录的身份标识;所述同名路径信息和所述目标子节点对应的目录信息所指示的目录的路径信息相同;
若所述目标路径信息中不存在所述同名路径信息,则在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识。
4.根据权利要求3的所述的数据恢复方法,其特征在于,所述在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识,包括:
将所述目标子节点对应的目录信息中的目录名称作为辅助目录名称,将所述目标子节点对应的目录信息中的身份标识作为辅助身份标识;
当所述指示目录中不存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,在所述指示目录中创建目录,作为所述恢复目录,并为所述恢复目录设置身份标识;
在所述目标目录树中,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录对应的身份标识;所述恢复目录的目录名称和所述目标子节点对应的目录信息中的目录名称相同;
当所述指示目录中存在同时具有所述辅助目录名称和所述辅助身份标识的目录时,将所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中同时具有所述辅助目录名称和所述辅助身份标识的目录的身份标识。
5.根据权利要求4所述的数据恢复方法,其特征在于,还包括:
当所述指示目录中存在具有所述辅助目录名称,但不具有所述辅助身份标识的目录时,将所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述指示目录中具有所述辅助目录名称,但不具有所述辅助身份标识的目录的身份标识。
6.根据权利要求1所述的数据恢复方法,其特征在于,还包括:
当接收到与所述目标数据对应的删除请求时,根据所述删除请求,确定与所述目标数据对应的目标身份标识,并查询与所述目标身份标识对应的目标路径信息;
将所述目标身份标识和所述目标路径信息组合为目标键值对,将所述目标键值对存储在数据库中,并删除所述目标数据。
7.一种数据恢复装置,其特征在于,包括:
获取模块,用于获取目标数据,并将所述目标数据被删除前所在目录的路径信息,作为目标路径信息;
构建模块,用于根据所述目标路径信息所包含的至少一个目录信息和目标拓扑顺序,构建目标目录树;所述目标拓扑顺序是每个所述目录信息在所述目标路径信息中的先后顺序;
还原模块,用于按照所述目标拓扑顺序,对所述目标目录树所包含的所有目录依次进行恢复处理,得到与所述目标路径信息相匹配的目标目录,将所述目标数据还原至所述目标目录下;
其中,所述构建模块,包括:
设置单元,用于创建初始目录树,为所述初始目录树设置根节点;
生成单元,用于根据所述目标路径信息所包含的至少一个目录信息,生成多个目录节点,根据所述多个目录节点分别对应的目录信息在所述目标路径信息中的顺序,确定所述目标拓扑顺序;所述根节点具有第一状态标识;所述多个目录节点均具有第二状态标识;
所述生成单元,还用于根据所述目标拓扑顺序,将所述多个目录节点依次添加至所述初始目录树中,得到所述目标目录树;
所述还原模块,包括:
创建单元,用于创建具有先进先出特性的目标队列,将所述目标目录树中的根节点添加至所述目标队列的队尾处;
遍历单元,用于将位于所述目标队列队首处的节点作为目标节点,遍历所述目标目录树,将所述目标节点对应的所有具有第二状态标识的子节点中的任一子节点,作为目标子节点;
所述遍历单元,还用于将所述目标节点对应的目录信息中的身份标识所指示的目录,确定为指示目录;
恢复单元,用于在所述指示目录中,对所述目标子节点对应的目录进行恢复处理,得到恢复目录,根据所述恢复目录的身份标识,更新所述目标子节点对应的目录信息中的身份标识;
添加单元,用于将所述目标子节点的第二状态标识设置为所述第一状态标识,并将所述目标子节点添加至所述目标队列的队尾处;
删除单元,用于当所述目标节点对应的所有子节点中不存在具有第二状态标识的子节点时,将所述目标节点从所述目标队列中删除,并将位于所述目标队列队首处的节点作为目标节点;
查找单元,用于当所述目标队列为空集时,将所述恢复目录确定为目标目录,查找所述目标目录树中叶节点对应的目录信息中的身份标识,将查找到的身份标识对应的目录作为所述目标目录中的叶目录,将所述目标数据还原于所述目标目录中的叶目录下。
8.根据权利要求7所述的数据恢复装置,其特征在于,所述获取模块,包括:
获取单元,用于当接收到与所述目标数据对应的恢复请求时,根据所述恢复请求中所携带的与所述目标数据对应的目标身份标识,获取所述目标数据;
提取单元,用于在数据库中查找与所述目标身份标识对应的目标键值对,在所述目标键值对中提取所述目标路径信息。
9.根据权利要求7所述的数据恢复装置,其特征在于,所述恢复单元,包括:
第一恢复子单元,用于若所述目标路径信息中存在同名路径信息,则将所述同名路径信息对应的目标数据确定为还原数据,将所述还原数据还原至所述指示目录下,将所述还原数据中具有所述目标子节点对应的目录信息中的目录名称的目录确定为所述恢复目录,将所述目标子节点对应的目录信息中的身份标识替换为所述恢复目录的身份标识;所述同名路径信息和所述目标子节点对应的目录信息所指示的目录的路径信息相同;
第二恢复子单元,用于若所述目标路径信息中不存在所述同名路径信息,则在所述指示目录中,对所述目标子节点对应的目录进行创建,得到所述恢复目录,根据所述恢复目录的身份标识,在所述目标目录树中,更新所述目标子节点对应的目录信息中的身份标识。
10.一种电子设备,其特征在于,包括:处理器和存储器;
所述处理器和存储器相连,其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行如权利要求1-6任一项所述的方法。
11.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811526775.7A CN111324483B (zh) | 2018-12-13 | 2018-12-13 | 一种数据恢复方法、装置以及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811526775.7A CN111324483B (zh) | 2018-12-13 | 2018-12-13 | 一种数据恢复方法、装置以及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111324483A CN111324483A (zh) | 2020-06-23 |
CN111324483B true CN111324483B (zh) | 2023-04-18 |
Family
ID=71170137
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811526775.7A Active CN111324483B (zh) | 2018-12-13 | 2018-12-13 | 一种数据恢复方法、装置以及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111324483B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648977A (zh) * | 2016-12-05 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种安卓系统文件的恢复方法及装置 |
CN106886610A (zh) * | 2017-04-11 | 2017-06-23 | 广东浪潮大数据研究有限公司 | 一种分布式文件系统的文件管理方法及装置 |
CN108197270A (zh) * | 2018-01-04 | 2018-06-22 | 中科边缘智慧信息科技(苏州)有限公司 | 分布式文件系统数据回收方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4877921B2 (ja) * | 2006-01-25 | 2012-02-15 | 株式会社日立製作所 | ストレージシステム、記憶制御装置及び記憶制御装置のリカバリポイント検出方法 |
-
2018
- 2018-12-13 CN CN201811526775.7A patent/CN111324483B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648977A (zh) * | 2016-12-05 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种安卓系统文件的恢复方法及装置 |
CN106886610A (zh) * | 2017-04-11 | 2017-06-23 | 广东浪潮大数据研究有限公司 | 一种分布式文件系统的文件管理方法及装置 |
CN108197270A (zh) * | 2018-01-04 | 2018-06-22 | 中科边缘智慧信息科技(苏州)有限公司 | 分布式文件系统数据回收方法 |
Non-Patent Citations (2)
Title |
---|
On the Recovery of R-Trees;Tuukka Haapasalo;《 IEEE Transactions on Knowledge and Data Engineering》;20110818;第25卷(第1期);全文 * |
基于磁带分级存储的文件备份系统设计与实现;王笑冉;《计算机安全》;20140331(第3期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111324483A (zh) | 2020-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9792340B2 (en) | Identifying data items | |
US8997041B2 (en) | Method of managing script, server performing the same and storage media storing the same | |
CN113986873B (zh) | 一种海量物联网数据模型化的处理、存储与共享方法 | |
WO2015120071A2 (en) | Content based organization of file systems | |
CN111045857B (zh) | 数据备份和恢复的方法、电子设备和计算机可读存储介质 | |
CN110851209B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
US20150106335A1 (en) | Hierarchical data archiving | |
CN109101599B (zh) | 一种增量索引更新方法及系统 | |
CN110515543B (zh) | 基于对象存储桶的快照方法、装置和系统 | |
CN111400334B (zh) | 数据处理方法、装置、存储介质及电子装置 | |
CN112084270A (zh) | 一种数据血缘处理方法、装置、存储介质及设备 | |
CN110807028B (zh) | 用于管理存储系统的方法、设备和计算机程序产品 | |
CN111104377A (zh) | 文件管理的方法、电子设备和计算机可读存储介质 | |
CN105843809B (zh) | 数据处理方法和装置 | |
CN111522791A (zh) | 一种分布式文件重复数据删除系统及方法 | |
CN115705313A (zh) | 一种数据处理方法、装置、设备及计算机可读存储介质 | |
CN111176901B (zh) | 一种hdfs删除文件恢复方法、终端设备及存储介质 | |
US20220222146A1 (en) | Versioned backup on an object addressable storage system | |
CN111324483B (zh) | 一种数据恢复方法、装置以及相关设备 | |
EP2420945A1 (en) | Foldering by stable query | |
CN108241758B (zh) | 数据查询方法及相关设备 | |
CN113934742B (zh) | 数据更新方法、节点信息存储方法、电子设备及介质 | |
EP4002143A1 (en) | Storage of file system items related to a versioned snapshot of a directory-based file system onto a key-object storage system | |
JP2016051383A (ja) | 帳票データ管理プログラム、帳票データ管理方法、及び情報処理装置 | |
JP2015176407A (ja) | 検索装置、検索方法、検索用プログラムおよび検索用データ構造 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40025259 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |