具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明重复数据查找的方法的实施例,参见图1,本实施例的方法可以包括:
步骤100,对文件进行分块,生成每个分块数据的元数据信息,其中所述分块数据的元数据信息中包括所述分块数据的指纹信息;
本实施例中,当接收到重删任务文件后,首先对文件数据进行分块;计算每个分块数据的元数据信息,其中,分块数据的元数据信息包括分块数据的指纹信息;除此,分块数据的元数据信息还可以包括分块数据在共享文件系统中所属的文件序号,分块数据在所属文件中的起始位置,分块长度,该节点分配的处理节点编号,以及分块的引用计数信息等;
计算分块数据的指纹信息,该指纹信息的算法可以采用hash值的算法,得到每个分块数据的hash值作为该分块数据的指纹信息,当然,也可以采用MD5等其他算法,只要能获得分块数据的唯一标识即可;
步骤102,根据分块数据的指纹信息将分块数据的指纹信息发送给元数据服务器,以使元数据服务器在数据库中查找所述接收的分块数据的指纹信息是否已经存储在数据库中,并返回查询结果;
本发明实施例中,可以预先根据所采用的哈希(hash)算法计算得到hash的范围值,将hash范围值分为m个分段得到m个hash值分段,每个元数据服务器对应不同的hash分段,每个元数据服务器可以对应m/n个hash分段,其中,n为元数据服务器的个数,通常可以配置m为n的整数倍。
对于HASH值的范围确定,可以通过采用常见HASH算法生成20个字节的HASH值,在确定HASH分段时,是通过将HASH值的最后一个字节右移5位。这样计算之后的结果能表示的范围就在23内,也就是0~7。可以表示HASH分段范围。
本发明实施例中,可以根据分块数据的指纹信息确定指纹信息在预先设置的指纹信息分段中的哪一段,根据确定的指纹信息分段,将分块数据的指纹信息发送至与该指纹信息所在分段对应的元数据服务器,以便后续由元数据服务器进行进一步的查询工作。
本发明实施例中,元数据库划分为若干个小组,每个元数据服务器都能访问到每一个小组;这样,将待重复数据删除的数据被划分为若干分块数据,因为分块数据的元数据分发给了多个元数据服务器,每个元数据服务器负责在数据库中查找一个或多个元数据信息,以确认所查找的元数据信息是否在数据库中已经存储,提升查找效率。
步骤104,接收所述查询结果,当在数据库中没有查询到所述分块数据指纹信息时,将分块数据指纹信息对应的分块数据存储到共享文件系统中,并指令元数据服务器在数据库中插入该分块数据指纹信息对应的元数据信息;当在数据库中查询到分块数据指纹信息时,指令元数据服务器更新该指纹信息在数据库中对应的分块数据的引用计数。
分块数据的引用计数表示在有多少个相同的分块数据被记录为一个分块数据,其中,所述被记录的一个分块数据的数据内容,和一个所述的相同分块数据的内容相同。引用次数的更新,是指在原有引用次数的基础之上,加上本次新增的引用次数。在数据库中,对分块数据内容相同的分块数据仅保留一份实例,如后续有相同的分块欲存储到数据库中时,因为数据库中对该分块数据已经保留了一份实例,因此不需要再保存该相同的分块数据,在用到给分块数据时,将分块数据的位置指向所保存的这个单一的实例,分块数据每被指向一次,就认为被引用一次;对于数据库中的这个单一实例而言,被指向了多少次,就可以认为被引用了多少次,也就表示有多少个相同的分块数据被记录为一个分块数据。
其中,接收到的查询结果中包括是否在数据库中查找到相同的指纹信息,若是,表示在数据库中已经存储有所查找的指纹信息了,若否,表示在数据库中目前还没有存储所查找的指纹信息;
当查询结果为“是”时,则在数据库中更新所查找的指纹信息对应的分块数据的引用计数;当查询结果为“否”时,将所查找的分块数据的指纹信息对应的分块数据存储到共享文件系统中,并由元数据服务器在数据库中插入该分块数据指纹信息对应的元数据信息。
本发明实施例中,对待重删文件进行分块后,通过分块数据的指纹信息来确定负责查询的元数据服务器,而当在数据库中查询到已经存储有该分块数据指纹信息后,将分块数据指纹信息对应的分块数据发送至共享文件系统,而不用再发送给元数据服务器进行存储,从而很大程度上降低了链路开销,提升了系统性能。
参见图2,本发明实施例还提供了另一种重复数据删除的方法,包括:
步骤200,对文件进行分块,生成每个分块数据的元数据信息,其中所述分块数据的元数据信息中包括所述分块数据的指纹信息;
在实际操作中,可能会同时处理多个文件的重复数据删除工作,而将文件分块后,可能会有相同的分块数据的情况;或者,一个文件中包括多个相同分块数据的情况;为了更好地降低链路开销,本发明实施例中还可以包括:
步骤201:根据分块数据的指纹信息查找相同分块数据,将相同分块数据记录为一个分块数据,并根据相同分块数据的数量更新所记录的该分块数据对应的元数据信息中的引用计数;
本实施例中,首先需要将文件分块,然后将所有分块数据中内容相同的分块数据仅保留一份实例,其他用到该分块数据的位置通过引用的方式指向该单一实例,从而起到减小空间占用的效果。对于单一实例分块而言,在原文件中有多少个与其内容相同的分块数据,我们就会对该单一实例分块记录其被指向的次数,这个值就是在向元数据服务器发送查询指令之前,分块数据对应的做引用计数。
通过步骤201,在向元数据服务器发送查询指令之前,先将相同的分块数据进行整合,整合后的相同分块数据就仅记录为一个分块数据,并根据相同分块数据的数量将整合后的分块数据对应的元数据中,将引用计数更新。例如:有6个分块数据的指纹信息相同,在向元数据下发查询指令之前,将6个分块数据仅记录为一个分块数据,并将该记录的分块数据对应的引用计数更新为6,表示给分块数据已经被引用了6次。通过步骤201,针对相同分块数据,可以仅下发一个指纹信息给元数据了。
步骤202,根据分块数据的指纹信息确定所述指纹信息在哪一个预置的指纹信息分段中,将分块数据的指纹信息发送至与所确定的指纹信息分段对应的元数据服务器;
预先设置指纹信息分段的方法与图1对应的实施例相同,可参见图1对应的实施例。
步骤204,元数据服务器在数据库中查找所接收的分块数据的指纹信息是否已经在数据库中存在,若是,则执行步骤206,若否,则执行步骤208;
步骤206,向元数据服务器发送更新所查找的指纹信息对应的分块数据的引用计数的指令;
本发明实施例中,如果数据库中已经存储有分块数据的指纹信息时,则向元数据发出更新分块数据被引用的次数的指令;
其中,如果被查找的指纹信息对应的分块数据元数据中,引用计数已经为6,则更新存储在数据库中该分块数据对应的元数据信息中的引用计数时,引用计数加6;
步骤208,将所查找的指纹信息对应的分块数据存储到共享文件系统中,向元数据服务器发送所查找指纹信息对应的分块数据的元数据信息,并指令元数据服务器将元数据信息插入数据库;
步骤210,元数据服务器执行所接收的将所查找指纹信息对应的分块数据的元数据信息插入数据库的指令;
本发明实施例中,提供一个共享文件系统,用于存储真实数据,即分块数据,并且,该共享文件系统对于所有的重复数据查找装置来说,存储分块数据的位置每个重复数据查找装置都可以访问到。
可选的,在对重删后的文件进行数据恢复时,本发明实施例还包括:
根据所述文件的分块数据在共享文件系统中的存放信息,生成记录文件以替换所述文件;
当需要恢复所述文件中的数据时,通过所述记录文件,读取所述文件的分块数据在所述共享文件系统中的存放信息,获得文件的分块数据以恢复所述文件中的数据。
当需要恢复重删后文件的数据时,通过读取所述文件的分块数据在所述共享文件系统中的存放信息,从所述共享文件系统上指定文件的偏移位置和分块长度,获得文件的分块数据以恢复重复数据删除前的数据。其中,“指定文件”是指存放目前分块数据的文件;在文件系统中,按照HASH分段将属于不同HASH分段的分块数据存放到不同文件中,便于多节点处理时并发访问,并且分块数据对应的元数据中存放了该分块数据在共享文件系统中所属文件的序号,通过所属文件的序号可以找到分块数据存放的文件。
通常对一个文件进行重复数据删除时,生成一个记录该文件中分块数据信息的记录文件,在重复数据删除完成后,用该文件替换掉原文件,由于此时文件中不再有分块数据,仅仅是一些记录文件,因此起到减小空间占用的重删目的。在用户使用该文件时,由底层驱动判断目前文件类型,如果是重删后文件,则调用重复数据查找装置恢复该文件为重删前文件,再提供给使用者。
本发明实施例中,对待重复数据删除文件进行分块后,并通过分块数据的指纹信息来确定负责查询的元数据服务器,而当在数据库中查询到已经存储有该分块数据指纹信息后,将分块数据指纹信息对应的分块数据发送至共享文件系统,而不用再发送给元数据服务器进行存储,并且,对待重删文件进行分块后,将相同分块数据进行整合后,对相同分块数据统一下发查询指令,从而很大程度上降低了链路开销,提升了系统性能。
与上述方法相应的,本发明实施例还提供了相应的装置和系统,下面进行具体说明,需要说明的是,对与方法一致的内容,下面不再做详细介绍。
本发明实施例还提供了一种重复数据查找装置,参见图3,包括:
数据划分模块300,用于对文件进行分块,生成每个分块数据的元数据信息,其中所述分块数据的元数据信息中包括所述分块数据的指纹信息;
其中,对文件进行分块和生产指纹信息的方法可参见方法实施例中的方法。
发送模块302,用于根据分块数据的指纹信息将分块数据的指纹信息发送给元数据服务器,以使元数据服务器在数据库中查找所述接收的分块数据的指纹信息是否已经存储在数据库中,并返回查询结果;
查询结果处理模块304,接收所述查询结果,当在数据库中没有查询到所述分块数据指纹信息时,将分块数据指纹信息对应的分块数据存储到共享文件系统中,并指令元数据服务器在数据库中插入该分块数据指纹信息对应的元数据信息;当在数据库中查询到分块数据指纹信息时,指令元数据服务器更新该指纹信息在数据库中对应的分块数据的引用计数。
通过本发明实施例所提供的装置,对待重删文件进行分块后,通过分块数据的指纹信息来确定负责查询的元数据服务器,而当在数据库中查询到已经存储有该分块数据指纹信息后,将分块数据指纹信息对应的分块数据发送至共享文件系统,而不用再发送给元数据服务器进行存储,从而很大程度上降低了链路开销,提升了系统性能。
本发明实施例还提供另一种重复数据查找装置,参见图4,包括:
数据划分模块400,用于对文件进行分块,生成每个分块数据的元数据信息,其中所述分块数据的元数据信息中包括所述分块数据的指纹信息;
整合模块402,用于将分块数据的指纹信息发送给元数据服务器之前,根据分块数据的指纹信息查找相同分块数据,将相同分块数据记录为一个分块数据,并根据相同分块数据的数量更新记录的该分块数据对应的元数据信息中的引用计数;
发送模块404,用于根据分块数据的指纹信息将分块数据的指纹信息发送给元数据服务器,以使元数据服务器在数据库中查找所述接收的分块数据的指纹信息是否已经存储在数据库中,并返回查询结果;
其中,所述发送模块根据分块数据的指纹信息确定所述指纹信息在哪一个预置的指纹信息分段;根据确定的指纹信息分段,将分块数据的指纹信息发送至与所述确定的指纹信息分段对应的元数据服务器。
本发明实施例中,提供一个共享文件系统,用于存储真实数据,即分块数据,并且,该共享文件系统对于所有的重复数据查找装置来说,存储分块数据的位置每个重复数据查找装置都可以访问到;
查询结果处理模块406,接收所述查询结果,当在数据库中没有查询到所述分块数据指纹信息时,将分块数据指纹信息对应的分块数据存储到共享文件系统中,并指令元数据服务器在数据库中插入该分块数据指纹信息对应的元数据信息;当在数据库中查询到分块数据指纹信息时,指令元数据服务器更新该指纹信息在数据库中对应的分块数据的引用计数;
其中,查询结果处理模块406,还可以用于,根据文件的分块数据在共享文件系统中的存放信息,生成记录文件以替换所述文件。
数据恢复模块408,用于当需要恢复所述文件的数据时,通过所述记录文件,读取所述文件的分块数据在所述共享文件系统中的存放信息,获得文件的分块数据以恢复所述文件中的数据。
通过本发明实施例所提供的装置,对待重复数据删除文件进行分块后,并通过分块数据的指纹信息来确定负责查询的元数据服务器,而当在数据库中查询到已经存储有该分块数据指纹信息后,不用再发送给元数据服务器进行存储,并且,对待重删文件进行分块后,将相同分块数据进行整合后,对相同分块数据统一下发查询指令,从而很大程度上降低了链路开销,提升了系统性能。
本发明实施例还提供一种重复数据查找系统,参见图5,包括:
重复数据查找装置500,用于对文件进行分块,生成每个分块数据的元数据信息,其中所述分块数据的元数据信息中包括所述分块数据的指纹信息;用于根据分块数据的指纹信息将分块数据的指纹信息发送给元数据服务器指令元数据服务器进行重复数据查询;接收元数据服务器返回的查询结果,当在数据库中没有查询到所述分块数据指纹信息时,将分块数据指纹信息对应的分块数据存储到共享文件系统中,并指令元数据服务器在数据库中插入所述分块数据元数据信息;当在数据库中查询到分块数据指纹信息时,指令元数据服务器更新该指纹信息在数据库中对应的分块数据的引用计数。
元数据服务器502,用于接收所述重复数据查找装置发送的将分块数据的指纹信息,在数据库中查找所接收的分块数据的指纹信息是否已经在数据库中存在,并向所述重复数据查找装置返回查询结果;执行所述重复数据查找装置发送的更新所查找的指纹信息对应的分块数据的引用计数的指令和将接收到的元数据信息插入数据库的指令。
数据库504,用于存储分块数据的元数据信息,其中,元数据信息中包括分块数据的指纹信息及该分块数据被引用的次数。
本发明实施例中,对待重删文件进行分块后,通过分块数据的指纹信息来确定负责查询的元数据服务器,而当在数据库中查询到已经存储有该分块数据指纹信息后,将分块数据指纹信息对应的分块数据发送至共享文件系统,而不用再发送给元数据服务器进行存储,从而很大程度上降低了链路开销,提升了系统性能。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。