本发明属于计算机和互联网领域,尤其涉及大数据领域,具体的,涉及一种大数据的冗余检测方法。
背景技术:
::随着计算机和互联网技术的快速发展,我们处在了一个信息爆炸的时代,为了处理大量的信息,出现了大数据的概念。所谓大数据,是指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。由于数据的海量特性,人们仅仅凭一己之力很难对这些数据这些分析,但是在以云计算为代表的技术创新大幕的衬托下,这些原本很难收集和使用的数据开始容易被利用起来了,通过各行各业的不断创新,大数据逐步为人类创造更多的价值。但是,尽管用于做大数据分析的计算机越来越多,性能越来越好,但是面对海量数据仍然力不从心,因此大数据分析的第一步,是检测和消除其中的相同数据,即冗余数据,通过冗余数据检测,大数据系统可以仅保存冗余数据的一份存档,其余的冗余数据改以指针代替,指向上述存档。一方面是减少存储空间和网络带宽的占用,另一方面是减少数据分析量。现有技术中的常见冗余检测方法是通过比较存储文件的哈希值来检测冗余数据。但是单纯以文件为单位来检测冗余,其粒度太大,不能处理相似文件中的部分相同数据,因此需要考虑减小粒度,能够尽可能检测相似文件间的部分冗余数据。技术实现要素:为了解决现有技术中的上述问题,本发明提出了一种大数据冗余检测方法,该方法能够快速查找到冗余数据,对于可能出现的相似文件,有效的降低数据匹配的粒度,可以尽可能的找到相似文件中的冗余数据块。本发明所采用的技术方案如下:一种大数据冗余检测方法,该方法包括如下步骤:1)在大数据系统的数据库内建立所有文件的哈希值表FH_table以及各个数据块的哈希值表BH_table;2)当大数据系统需要存储一个新文件时,计算该文件的哈希值,同时检查FH_table里是否存储有该文件的哈希值,如果有,则确认该文件是冗余数据,方法结束;如果没有,则在FH_table中记录该文件的哈希值;3)将该文件作为一个数据单元加入数据检测集合,该数据检测集合是待检测的数据单元的集合;4)判断该数据检测集合是否为空集,如果是,则方法结束,如果不是,继续执行后续步骤;5)从数据检测集合中取出一个数据单元,计算该数据单元的哈希值,检测BH_table和FH_table里是否有该数据单元的哈希值,如果有,则确认该数据单元是冗余数据,并返回步骤4;如果没有,则继续后续步骤;6)判断该数据单元的大小是否小于Blocksize,所述Blocksize是一个预定义的阈值,如果小于,则存储该数据单元,并将该数据单元的哈希值记录在BH_table中,同时返回步骤4,否则继续后续步骤;7)设该数据单元的大小为L字节,随机生成一个自然数R,使得其满足1≤R≤L-Blocksize+1;从而在该数据单元中确定一个定长数据块,该定长数据块包括该数据单元的第R个字节到第R+Blocksize-1个字节;8)对该数据块在数据单元中的位置进行扩展,获得一个不定长数据块;9)计算所述不定长数据块的哈希值,判断该不定长数据块的哈希值是否记录在BH_table或FH_table中,如果是,则该不定长数据块是冗余数据;如果不是,则存储该不定长数据块,并将其哈希值记录在BH_table中;10)将所述数据单元去除该不定长数据块后,所剩下的每个数据块都作为一个数据单元加入数据检测集合,并返回步骤4。在本发明中:所述的步骤8)中对数据块在数据单元中的位置进行扩展的具体步骤如下:8.1)判断该数据块的前边界是否是该数据单元的第1个字节,如果是,则转步骤8.3,否则继续后续步骤;8.2)获取该数据块的前边界的字节,计算其是否满足预定的条件,如果不满足,则将该数据块的前边界向前移动一个字节,并返回步骤8.1,否则继续执行后续步骤;8.3)判断该数据块的后边界是否为数据单元的最后一个字节,如果是,扩展方法结束,否则继续后续步骤;8.4)获取该数据块后边界的字节,计算其是否满足预定的条件,如果不满足,将数据块的后边界向后移动一个字节,并返回步骤8.3),如果满足,则扩展方法结束。在本发明中,所述步骤8.2)包括计算该数据块的前边界所在的字节是否等于预定义的边界向量,如果相等,则认为前边界满足预定条件。在本发明中,所述步骤8.2)包括计算该数据块的前边界所在的字节是否等于边界向量,如果相等,则认为前边界满足预定条件;其中所述边界向量根据该数据单元计算得到,即扫描该数据单元的所有字节,统计不同字节出现的次数,选取出现次数最少的字节作为该边界向量,如果出现次数最少的字节有多个,则从中选取在该数据单元中位置最靠前的一个作为该边界向量。在本发明中,所述步骤8.2)包括获取该数据块前边界所在的字节H0以及H0之后的7个字节,依次是H1,H2,……,H7,并通过下述公式计算动态边界向量DH,即DH=H0⊕(H1<<1)⊕(H2<<2)⊕……⊕(H7<<7),判断DH是否等于预定义的边界向量值,如果相等,则认为前边界满足预定条件。在本发明中,所述步骤8.4)包括计算该数据块的后边界所在的字节是否等于预定义的边界向量,如果相等,则认为后边界满足预定条件。在本发明中,所述步骤8.4)包括计算该数据块的后边界所在的字节是否等于边界向量,如果相等,则认为后边界满足预定条件;其中所述边界向量根据该数据单元计算得到,即扫描该数据单元的所有字节,统计不同字节出现的次数,选取出现次数最少的字节作为该边界向量,如果出现次数最少的字节有多个,则从中选取在该数据单元中位置最靠前的一个作为该边界向量。在本发明中,所述步骤8.4)包括获取该数据块后边界所在的字节T0以及T0往前的7个字节,依次是T1,T2,……,T7,通过下述公式计算动态边界向量DT,即DT=T0⊕(T1<<1)⊕(T2<<2)⊕……⊕(T7<<7),判断DT是否等于预定义的边界向量值,如果相等,则认为后边界满足预定条件。采用上述技术方案后,本发明的技术效果是:本发明能够快速查找到冗余数据,并且对于可能出现的相似文件,有效的降低数据匹配的粒度,可以尽可能的找到相似文件中的冗余数据块。【附图说明】此处所说明的附图是用来提供对本发明的进一步理解,构成本申请的一部分,但并不构成对本发明的不当限定,在附图中:图1是本发明的方法流程图。【具体实施方式】下面将结合附图以及具体实施例来详细说明本发明,其中的示意性实施例以及说明仅用来解释本发明,但并不作为对本发明的不当限定。参见图1,本发明的基本思想是,对于整个大数据系统,在每个新的文件存储到系统的存储设备时,首先对该文件整体进行哈希值计算,如果文件的哈希值在系统内已经存在,则该文件就是冗余数据;如果不存在,则存储该哈希值,同时对文件内部的数据进行冗余数据检测。文件内部的冗余检测方法通过在文件内部随机选择一个定长数据块,并对该数据块进行扩展,扩展到满足预定条件为止,再进行数据块的哈希值计算和检测,判断其是否是冗余数据。最后将文件的剩余部分视作两个新文件重复上述过程。上述方法结合了定长数据块和变长数据块检测,因此更加灵活,同时具有了两种数据块的检测优点。本发明冗余检测方法的具体步骤如下:1)在数据库内建立所有文件的哈希值表FH_table以及各个数据块的哈希值表BH_table。在大数据系统内,所有数据是以文件形式存在的,因此本发明首先为每个文件都计算出一个哈希值,保存在数据库内;其次,根据本发明下述的方法,文件在系统中实际是被分割为数据块保存的,针对每一个数据块,也都计算出一个哈希值,保存在数据库内。上述保存的所有哈希值应该是各不相同的,相同的哈希值只保存一次。在系统初始状态下(即还没有开始存储文件时),这两个哈希值表都是空的,通过下面的步骤逐步加入数据。哈希算法可以选择本领域中任何一种公知的算法,本发明不再赘述。2)当大数据系统需要存储一个新文件时,计算该文件的哈希值,检查FH_table里是否存储有该文件的哈希值,如果有,则说明该文件是冗余数据,方法结束;如果没有,则在FH_table中记录该文件的哈希值,然后继续后续检测步骤。全文件的哈希值检测是最基础的检测文件冗余的方法,如果该文件的哈希值已经存在,说明系统中已经存储了该文件,该文件是冗余数据,无需再次存储该文件,因此只需要为该文件生成一个指针,指向系统中具有相同哈希值的文件即可。3)将该文件作为一个数据单元加入数据检测集合。该数据检测集合是待检测的数据单元的集合,初始状态为空,每个文件在开始时,都是以整体作为一个数据单元加入该集合,而下述的检测步骤都是以数据单元为基础的。4)判断数据检测集合是否为空集,如果是,则方法结束;如果不是,继续执行后续步骤。5)从数据检测集合中取出一个数据单元,计算该数据单元的哈希值,检测BH_table和FH_table里是否有该数据单元的哈希值,如果有,说明该数据单元是冗余数据,并返回步骤4;如果没有,则继续后续步骤。这一步骤检测了数据单元是否在数据块的哈希值表中存在,如果存在,则说明该数据单元是冗余数据,同样可以不存储而只保留一个指针指向具有相同哈希值的数据块。6)如果该数据单元的大小小于预定义的Blocksize,则存储该数据单元,并将该数据单元的哈希值记录在BH_table中,返回步骤4,否则继续后续步骤。上述Blocksize是一个预定义的数值,代表了检测时的定长数据块的大小,如果该数据单元的大小小于Blocksize,说明数据单元太小,没有必要为其再划分数据块。7)设该数据单元的大小为L字节,随机生成一个自然数R,使得其满足1≤R≤L-Blocksize+1;基于该随机数,可以从该数据单元中获得一个定长数据块,即该数据块包括该数据单元的第R个字节到第R+Blocksize-1个字节(该数据单元的字节从1开始计数),显然,该数据块的大小刚好是Blocksize个字节。8)对该数据块在数据单元中的位置进行扩展,从而获得一个不定长数据块。具体的,从步骤7)得到的数据块在该数据单元中的前边界是R,后边界是R+Blocksize-1,数据块记为[R,R+Blocksize-1],步骤8)按照一定的算法扩展前边界和后边界,最后得到新的数据块[head,tail],head是前边界,tail是后边界,其中head≤R,tail≥R+Blocksize-1。9)计算步骤8)得到的不定长数据块的哈希值,判断该哈希值是否记录在BH_table或FH_table中,如果是,则该不定长数据块是冗余数据;如果不是,则存储该不定长数据块,并将其哈希值记录在BH_table中。与前面的步骤类似,步骤9)如果检测到该不定长数据块是冗余数据,则同样只需要为其生成和保存一个指针,只有非冗余数据时,才存储该数据块。10)将所述数据单元去除该不定长数据块后,所剩下的每个数据块都作为一个数据单元加入数据检测集合,并返回步骤4。举例而言,假设原数据单元的长度为1000字节,所述不定长数据块的前后边界为200和900,即数据块[200,900],那么该数据单元去除该不定长数据块后,剩下了2个数据块,即[1,199]和[901,1000],并将这两个数据块作为两个数据单元加入数据检测集合,重新返回步骤4。实际上,在去除该不定长数据块后,数据单元剩下的数据块可能是0-2个。反复执行上述步骤4-9直到数据检测集合为空。在实际应用中,由于大数据系统可能不断的有新文件存储,因此可以将上述步骤1-3和步骤4-9并行执行。此外,本发明只涉及冗余数据的检测,至于如何处理冗余数据,本领域已经有多种公知的方法,使用指针来表示只是其中的一种方法,本发明对此不作限制,具体的处理冗余数据的方法不再赘述。下面对步骤8)中的数据块扩展方法作出说明,扩展的基本思想是,把数据块的前边界向前移动,后边界向后移动,直到满足预定条件为止,具体步骤如下:8.1)判断数据块的前边界是否已经到了数据单元的第1个字节,如果到了,则说明前边界已经到了数据单元的最前端,已经无法向前移动,转到步骤8.3)去扩展后边界,否则继续后续步骤。8.2)获取数据块的前边界所在的字节,计算其是否满足预定的条件,如果不满足,将数据块的前边界向前移动一个字节,返回步骤8.1),否则继续执行后续步骤。步骤8.2)的预定条件可以根据具体情况采用,作为不同的实施例,本发明给出了三种可以采用的条件:①固定边界向量:设数据块的前边界所在的字节为H0,计算H0是否等于预定义的边界向量H,如果相等,则认为前边界满足预定条件;这里的边界向量H是一个预先定义的固定的字节;②半固定边界向量:与固定边界向量类似,设数据块的前边界所在的字节为H0,计算H0是否等于边界向量H,如果相等,则认为前边界满足预定条件;但是这里的边界向量H是根据数据单元计算得到的,即扫描数据单元的所有字节,统计不同字节出现的次数,选取出现次数最少的字节作为边界向量H,如果出现次数最少的字节有多个,则从中选取在数据单元中位置最靠前的一个;由于一个字节只有8个位,总共只有28=256种不同字节,对256个数据的统计并不会对执行效率产生很大影响,却可以提高发现冗余数据的概率;动态边界向量:动态边界向量需要考虑前边界的多个字节,设数据块的前边界所在的字节为H0,并且H0之后的7个字节依次是H1,H2,……,H7(即H0之后的第1个字节为H1,第2个字节为H2,以此类推),则通过下述公式计算动态边界向量DH,即DH=H0⊕(H1<<1)⊕(H2<<2)⊕……⊕(H7<<7),换言之,对所有的Hi<<i都进行异或运算,得到DH,然后判断DH是否等于预定义的边界向量值,如果相等,则认为前边界满足预定条件。上述三种条件判断方法,执行效率依次降低,但是冗余检测的成功率依次升高,可以根据具体需求采用。8.3)判断数据块的后边界是否已经到了数据单元的最后一个字节,如果到了,扩展方法结束,否则继续后续步骤。8.4)获取数据块后边界所在的字节,计算其是否满足预定的条件,如果不满足,将数据块的后边界向后移动一个字节,返回步骤8.3);如果满足,则扩展方法结束。与前边界的判断类似,步骤8.4)的预定条件也有三种:①固定边界向量:设数据块的后边界所在的字节为T0,计算T0是否等于预定义的边界向量H,如果相等,则认为后边界满足预定条件;这里的边界向量H是一个预先定义的固定的字节;②半固定边界向量:设数据块的后边界所在的字节为T0,计算T0是否等于边界向量H,如果相等,则认为后边界满足预定条件;其中边界向量H是根据数据单元计算得到的,即扫描数据单元的所有字节,统计不同字节出现的次数,选取出现次数最少的字节作为边界向量H,如果出现次数最少的字节有多个,则从中选取在数据单元中位置最靠前的一个;动态边界向量:动态边界向量需要考虑后边界的多个字节,设数据块的后边界所在的字节为T0,并且从T0往前的7个字节依次是T1,T2,……,T7(即T0往前的第1个字节为T1,第2个字节为T2,以此类推),则通过下述公式计算动态边界向量DT,即DT=T0⊕(T1<<1)⊕(T2<<2)⊕……⊕(T7<<7),换言之,对所有的Ti<<i都进行异或运算,得到DT,然后判断DT是否等于预定义的边界向量值,如果相等,则认为后边界满足预定条件。上述三种条件判断方法,执行效率依次降低,但是冗余检测的成功率依次升高,可以根据具体需求采用。以上所述仅是本发明的较佳实施方式,故凡依本发明专利申请范围所述的构造、特征及原理所做的等效变化或修饰,均包括于本发明专利申请范围内。当前第1页1 2 3 当前第1页1 2 3