1.一种数据备份与恢复方法,其特征在于,所述方法包括:S11.初始化一个哈希表HTB,哈希表HTB的关键码为数据块指纹,值为该数据块指纹在本次备份中的出现次数;
S22.对每个被数据去重处理过的数据块的数据块指纹,查找所述数据块指纹是否存在于哈希表HTB中:
S2201.如果存在,将其出现次数加1;
S2202.如果不存在,插入一条记录到哈希表HTB中,记录的关键码为该数据块的指纹,值为其出现次数,赋值为1;
S33.重复步骤S22直到备份结束,并将哈希表HTB中所有出现次数大于等于2的数据块指纹和出现次数写入磁盘;
S300.初始化数据恢复所需要的备份信息、恢复缓存CacheR;
S301.读取需恢复数据的文件谱;
S302.从文件谱中读取恢复数据所需的数据块指纹;判断该数据块指纹是否为空;
S3021.如果为空,表示所有所需数据块已找到,执行步骤S306;
S3022.如果不为空,执行步骤S303;
S303.查看该数据块指纹是否存在于哈希表HTR中;
S3031.如果存在且其数据块内容不为空,获取对应的数据块内容,并将对应记录的数据块出现次数减1,判断数据块出现次数是否等于0;
S30311.如果等于0,将对应记录从哈希表HTR中移除以节约内存,执行步骤S302;
S30312.如果不等于0,执行步骤S302;
S304.查看该数据块指纹是否存在于恢复缓存中;
S3041.如果存在,获取对应的数据块内容;
S3042.如果不存在,将包含所需数据块的容器读取到恢复缓存中,获取该数据块内容;
S305.判断该数据块的指纹是否存在于哈希表HTR中;
S3051.如果存在,将数据块内容拷贝给记录的数据块内容,将该数据块出现次数减1;
在队列Queue尾部插入一个指针指向哈希表HTR中对应的记录;执行步骤S3053;
S3052.如果不存在,执行步骤S302;
S3053.判断哈希表HTR的大小是否大于上限值Max;
S30531.如果大于Max,移除队列Queue头部指针指向的哈希表HTR中记录,执行步骤S3053;
S30532.如果不大于Max,执行步骤S302;
S306.清空哈希表HTR、队列Queue和恢复缓存CacheR。
2.如权利要求1所述的一种数据备份与恢复方法,其特征在于,S300中,所述初始化数据恢复所需要的备份信息、恢复缓存CacheR具体包括:S1.初始化一个哈希表HTR,哈希表HTR的关键码为数据块指纹,值为一个结构体,所述结构体包括数据块在备份中的出现次数和数据块内容;
S2.初始化一个空队列Queue,用来记录自引用数据块在恢复时的出现顺序;
S4.初始化一个空的恢复缓存CacheR;
S5.读取备份时写入到磁盘的出现次数大于等于2的一个自引用数据块信息,所述自引用数据块信息包括数据块指纹和出现次数,用该自引用数据块信息初始化一个记录并插入哈希表HTR,记录的关键码为数据块指纹,值中结构体的出现次数为数据块指纹对应的数据块的出现次数,值中结构体的数据块内容为空;
重复步骤S4直到所有备份时统计的自引用数据块都被读取。
3.一种用于实现数据备份的计算机设备,其特征在于,所述计算机设备包括:一个或更多个处理器;
一个或更多个存储器;
一个或更多个模块,其被存在存储器中且能够由所述一个或更多个处理器中的至少一个处理器以执行如权利要求1或2所述的一种数据备份与恢复方法的步骤。
4.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,该计算机程序被处理器执行时实现如权利要求1或2所述的一种数据备份与恢复方法的步骤。