一种数据去重方法、系统、中心服务器及分布式服务器与流程

文档序号:14609573发布日期:2018-06-05 20:32阅读:488来源:国知局
一种数据去重方法、系统、中心服务器及分布式服务器与流程

本发明实施例涉及数据处理技术领域,尤其涉及一种数据去重方法、系统、中心服务器及分布式服务器。



背景技术:

数据去重是大数据数据预处理领域的一个重要组成部分,数据去重的性能和数据去重的准确性会直接影响数据预处理以及后期的数据挖掘、清洗、分析、存储等众多模块的性能、资源和数据准确性。

目前的数据去重是基于Redis内存的布隆过滤器(Bloomfilter)对数据进行去重。由于Bloomfilter和Redis内存均支持比特位的数据存储格式,因此可以将Redis内存与Bloomfilter的过滤功能结合。具体地,Redis内存可以为Bloomfilter提供存储空间,在Bloomfilter中利用哈希(Hash)函数计算各个待处理数据对应的比特位的位置,将计算得到的各个待处理数据对应的比特位的位置设置为1,并比较Redis内存的BitMap中对应位置的比特位的取值,从而实现分布式集群环境下的数据过滤去重。

在现有技术中,基于Redis的Bloomfilter去重方法,主要应用于爬虫(Python)框架Scrapy,对网络统一资源定位符(URL)进行去重。在进行网络爬虫数据过滤去重时,爬取到的数据逐条进入Bloomfilter中进行过滤,在Bloomfilter中进行多种Hash函数计算,根据Hash计算结果确定对应的比特位的位置,将对应位置的比特位的值设为1,再与Redis内存中的BitMap中对应位置的比特位的取值进行比较,实现过滤去重。

然而,目前网络爬虫中的Scrapy插件在进行过滤去重时,没有考虑分布式服务器发生宕机的情况,若分布式服务器出现宕机,则在该分布式服务器中正在过滤的数据会丢失,进而会影响数据库去重的准确性。



技术实现要素:

本发明实施例提供一种数据去重方法、系统、中心服务器及分布式服务器,可以防止分布式服务器宕机时对数据去重的影响,进而可以提高数据去重的准确性。

第一方面,本发明实施例提供了一种数据去重方法,包括:

中心服务器采用第一哈希算法将当前待处理数据进行哈希计算,获取所述当前待处理数据对应的第一哈希值,将所述当前待处理数据对应的第一哈希值分配到与其对应的分布式服务器中;

所述分布式服务器采用第二哈希算法将所述当前待处理数据对应的第一哈希值进行哈希计算,获取所述当前待处理数据对应的第二哈希值;

所述分布式服务器根据所述当前待处理数据对应的第二哈希值对所述当前待处理数据进行去重处理。

第二方面,本发明实施例还提供了一种中心服务器,所述中心服务器包括:第一计算模块和分配模块;其中,

所述第一计算模块,用于采用第一哈希算法将当前待处理数据进行哈希计算,获取当前待处理数据对应的第一哈希值;

所述分配模块,用于将当前待处理数据对应的第一哈希值分配到与其对应的分布式服务器中。

第三方面,本发明实施例还提供了一种分布式服务器,所述分布式服务器包括:第二计算模块和去重模块;其中,

所述第二计算模块,用于采用第二哈希算法将当前待处理数据对应的第一哈希值进行哈希计算,获取所述当前待处理数据对应的第二哈希值;

所述去重模块,用于根据所述当前待处理数据对应的第二哈希值对所述当前待处理数据进行去重处理。

第四方面,本发明实施例还提供了一种数据去重系统,所述系统包括:中心服务器和分布式服务器;其中,

所述中心服务器,用于采用第一哈希算法将当前待处理数据进行哈希计算,获取当前待处理数据对应的第一哈希值,将当前待处理数据对应的第一哈希值分配到与其对应的分布式服务器中;

所述分布式服务器,用于采用第二哈希算法将当前待处理数据对应的第一哈希值进行哈希计算,获取所述当前待处理数据对应的第二哈希值;根据所述当前待处理数据对应的第二哈希值对当前待处理数据进行去重处理。

本发明实施例提供了一种数据去重方法、系统、中心服务器及分布式服务器,中心服务器采用第一哈希算法获取当前待处理数据对应的第一哈希值,并将第一哈希值分配到与其对应的分布式服务器中,分布式服务器采用第二哈希算法将第一哈希值进行哈希计算,获取第二哈希值,分布式服务器根据第二哈希值对当前待处理数据进行去重处理。而现有的去重方法直接对待处理数据采用第二哈希算法获取第二哈希值,分布式服务器再对待处理数据进行去重,因此与现有技术相比,本发明实施例中心服务器采用第一哈希算法计算待处理数据的第一哈希值并分配至对应的分布式服务器中,可以防止分布式服务器宕机时对数据去重的影响,进而可以提高数据去重的准确性;并且,本发明实施例的技术方案实现简单方便、便于普及,适用范围更广。

附图说明

图1A为本发明实施例一提供的数据去重方法的流程图;

图1B为本发明实施例一提供的数据去重方法中第一哈希算法对应的分布式存储分配示意图;

图1C为本发明实施例一提供的数据去重方法中分布式服务器内部实现过滤去重时的数据流图;

图2为本发明实施例二提供的中心服务器的结构示意图;

图3为本发明实施例三提供的分布式服务器的结构示意图;

图4为本发明实施例四提供的数据去重系统的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

在进行详细说明之前,先对本发明中涉及到的相关内容作出解释,本发明中涉及的相关术语均为本领域技术人员知晓和理解的内容。哈希(Hash)算法即散列函数,它是一种单向密码体制,只有加密过程没有解密过程,Hash函数可以将任意长度的输入经过变化以后得到固定长度的输出,Hash函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。

服务器集群是一种提升服务器整体计算能力的解决方案,它由互相连接在一起的服务器群所组成的一个并行式或分布式系统。在计算机领域,对于海量数据处理有两大方向:第一个方向是集中式计算,就是通过不断增加处理器的数量来增强单个计算机的计算能力,从而提高处理数据的速度。第二个方向是分布式计算,就是把一组计算机通过网络相互连接组成分散系统,然后将需要处理的大量数据分散成多个部分,交由分散系统内的计算机组同时计算,最后将这些计算结果合并得到最终的结果,这些进行分布式计算的服务器就称为分布式服务器。尽管分散系统内的单个计算机的计算能力不强,但是由于每个计算机只计算一部分数据,而且是多台计算机同时计算,所以就分布式系统而言,处理数据的速度会远高于单个计算机。

虚拟机(Virtual Machine)在计算机科学中的体系结构中,是指一种特殊的软件。它可以在计算机平台和终端用户之间创建一种环境,终端用户基于这个软件所创建的环境来操作软件,虚拟机是可以像真实机器一样运行程序的计算机的软件实现。在计算机领域中,不同服务器之间进行数据的传输和交互是通过节点实现的。

比特位(Bit),是计算机最小的存储单位,以0或1来表示比特位的值。位数也叫字长,是指处理器一次运算所能处理的二进制数的位数。计算机字长有8位、16位、32位、64位之分,我们一般称8位(Bit))为一个字节(Byte)),16位为一个字长(Word),32位为一个双字长,64位为两个双字长。位数组是具有一定长度的位数的集合,例如位数组的长度为10000,那么它只能存放10000个比特位。

实施例一

图1A为本发明实施例一提供的数据去重方法的流程图。本实施例可适用于数据去重系统中针对海量数据进行去重过滤的情况,该方法可以由数据去重装置来执行,该数据去重装置可以采用软件和/或硬件的方式实现。参考图1A,该方法具体包括如下步骤:

S110、中心服务器采用第一哈希算法将当前待处理数据进行哈希计算,获取当前待处理数据对应的第一哈希值,将当前待处理数据对应的第一哈希值分配到与其对应的分布式服务器中。

在本发明的具体实施例中,待处理数据是指需要进行过滤去重的数据。中心服务器是指在当前待处理数据进入服务器进行过滤去重之前对待处理数据进行预处理的服务器。第一哈希算法是指一致性Hash计算,一致性Hash是一种分布式Hash算法,一致性Hash算法在多台服务器环境下,进行故障转移,提高系统的可用性,修正了使用的简单Hash算法带来的问题。一致性Hash算法引入了环状Hash空间的概念,将服务器节点的分配和数据的分配拆分成了两个独立的过程,数据和服务器节点的关联,不是通过Hash算法直接建立起来的,某一个节点的变化并不会影响到整个分布式系统。第一哈希值是指待处理数据在经过一致性Hash计算之后得到的Hash值,这个值被映射到环状Hash空间中。分布式服务器是指要对待处理数据进行过滤去重处理的服务器,分布式服务器可以为多个,且可以是真实机器或虚拟机建立的服务器。

示例性的,对于要进行过滤去重处理的数据,其在进入分布式服务器中进行过滤之前,首先要经过中心服务器的预处理,中心服务器对待处理数据进行预处理的目的是为了防止待处理数据在分布式服务器发生宕机情况时丢失数据的问题出现,同时由于虚拟节点的设置,还能够进一步使服务器集群之间负载均衡。中心服务器对待处理数据的预处理主要是进行第一哈希算法,也就是进行一致性Hash计算,待处理数据经过一致性Hash计算之后会得到第一哈希值。每一条待处理数据(整体或部分特定字段,视具体业务场景而定)进行一致性Hash算法之后得到的第一哈希值可以作为此条待处理数据的数据标识,这个数据标识是唯一确定的。

可选的,中心服务器根据当前待处理数据对应的第一哈希值和预先确定的各个分布式服务器对应的哈希值区间,确定当前待处理数据对应的第一哈希值所在的目标哈希值区间;

中心服务器获取目标哈希值区间对应的分布式服务器的工作状态;其中,工作状态包括:正常工作状态和异常工作状态;

当目标哈希值区间对应的分布式服务器的工作状态为正常工作状态时,中心服务器将当前待处理数据对应的第一哈希值分配到目标哈希值区间对应的分布式服务器中。

其中,预先确定的各个分布式服务器对应的哈希值区间是指,各个分布式服务器经过一致性Hash算法得到Hash值,并将其配置到0~232的环状Hash空间中,环状Hash空间的大小和各处的值均是确定的。目标哈希值区间是指,各个经过中心服务器预处理之后的待处理数据获得唯一的数据标识,这个数据标识映射到环状Hash空间中,第一哈希值不同,映射到的位置不同,对应的哈希值区间也不同。

示例性的,对待处理数据进行第一哈希算法可以理解为,待处理数据经过一致性Hash计算,得到第一哈希值,根据这个第一哈希值对待处理数据进行分配,预先设置好环状Hash空间的不同区间,不同的第一哈希值映射到环状Hash空间中不同的区间,不同的区间分别对应着不同的分布式服务器,也就是说不同的待处理数据被分配到了不同的分布式服务器中。

其中,中心服务器还获取目标哈希值区间对应的分布式服务器的工作状态。分布式服务器分为正常工作状态和异常工作状态。在正常工作状态下,分布式服务器可以正常工作,待处理数据进入分布式服务器中可以实现过滤去重的功能,如果分布式服务器处于异常的工作状态,那么在此分布式服务器中正在进行过滤去重处理的将不能被正常的过滤,这部分数据可以实现在封闭的环状Hash空间中进行顺时针方向的动态循环,被分配至相邻的下一分布式服务器中进行过滤。

图1B为本发明实施例一提供的数据去重方法中第一哈希算法对应的分布式存储分配示意图。示例性的,以图1B为例进行说明,图中NodeA1、NodeA2、NodeA3、NodeB1、NodeB2、NodeC1和NodeC2为各个虚拟节点,各个虚拟节点对应着各个分布式服务器,机器NodeA负载存储NodeA1、NodeA2、NodeA3的数据,机器NodeB负载存储NodeB1、NodeB2的数据,机器NodeC负载存储NodeC1、NodeC2的数据。各个待处理数据在进行分布式存储时,先经过一致性Hash计算得到第一哈希值,对应到这个环中的每个位置,假如key1对应到了图中所示的位置,然后沿顺时针找到一个机器节点NodeB2,NodeB2处于正常工作的状态,那么将key1存储到B2这个节点中。如果NodeB2处于异常工作状态,那么NodeB2正在处理的数据和正在排队等候进入NodeB2的待处理数据就会沿顺时针方向实现动态循环,被分配至相邻的下一分布式服务器节点NodeA2中进行过滤。

可选的,当目标哈希值区间对应的分布式服务器的工作状态为异常工作状态时,中心服务器根据目标哈希值区间确定下一个目标哈希值区间;

中心服务器将所述当前待处理数据对应的第一哈希值分配到下一个目标哈希值区间对应的分布式服务器中。

其中,下一目标哈希值区间是指当前哈希值区间对应的分布式服务器出现问题,示例性的,根据顺时针方向进行查找,相当于将原来的目标哈希值区间进行了扩展,扩展到了相邻的下一哈希值区间。

示例性的,以图1B为例进行说明,假如key1对应到了图中所示的位置,然后沿顺时针找到一个机器节点NodeB2,NodeB2处于正常工作的状态,那么将key1存储到B2这个节点中。如果NodeB2处于异常工作状态,不能顺利地实现过滤去重,那么从key1映射到的位置开始顺时针查找,将key1保存到找到的第一个分布式服务器上,也就是图1B中的NodeA2中,如果超过232仍然找不到分布式服务器,就会保存到第一台分布式服务器NodeA1上。由于这些虚拟节点数量很多,均匀分布,即使某个节点出现宕机,不会因为单节点压力过大导致系统崩溃。

示例性的,以具体的某个数据,例如数据汉字“中国”在进行过滤去重时,首先要在中心服务器中进行第一哈希算法,先求出数据汉字“中国”的键值“key1”经过第一哈希算法之后得到key1的第一哈希值为“110”,第一哈希值“110”映射到了图1B中key1的位置,沿顺时针找到节点NodeB2,NodeB2处于正常工作的状态,那么就将key1存储到B2这个节点中。也就是说数据汉字“中国”被分配至NodeB2这一分布式服务器中,要进入NodeB2分布式服务器进行过滤去重。如果NodeB2处于异常工作状态,不能顺利地实现过滤去重,那么从key1映射到的位置开始顺时针查找,将key1保存到找到的第一个分布式服务器上,也就是图1B中的NodeA2中,也就是说数据汉字“中国”被分配至NodeA2这一分布式服务器中,要进入NodeA2分布式服务器进行过滤去重。如果超过232仍然找不到分布式服务器,就会保存到第一台分布式服务器NodeA1上,也就是说数据汉字“中国”被分配至NodeA1这一分布式服务器中,要进入NodeA1分布式服务器进行过滤去重。

S120、分布式服务器采用第二哈希算法将当前待处理数据对应的第一哈希值进行哈希计算,获取当前待处理数据对应的第二哈希值。

在本发明的具体实施例中,分布式服务器中过滤去重功能的实现是基于布隆过滤器(BloomFilter)实现的。BloomFilter的基本思想是通过一个Hash函数将一个数据元素映射成一个位数组(Bit array)中的一个位置,只要查看这个位置上的值是否为1就可以知道数据集合中有没有此数据元素存在。第二哈希算法就是各个分布式服务器中的BloomFilter中预先设置好的多种Hash函数,来对第一哈希值进行随机Hash计算,目的是避免和降低数据冲突。第二哈希值就是指第一哈希值经过多种Hash函数计算之后得到的多个Hash值,多个Hash值就是BloomFilter计算出来的位数组中应该置为1的那些位置上。

以图1C为例进行说明,图1C为本发明实施例一提供的数据去重方法中分布式服务器内部实现过滤去重时的数据流图。首先创建一个M位位数组,先将所有位初始化为0,选择K个不同的哈希函数。第i个哈希函数对数据唯一标识哈希的结果记为h(i,str),且h(i,str)的范围是0到M-1。一个空的BloomFilter是一个值均为0的M位点阵列,拥有K种不同的哈希函数定义,散列集合的每一个元素所在阵列的位置都在M范围内,产生均匀随机分布。通常k是一个远小于M的常数且M与K成正比。对于字符串“str”,分别计算h(1,str),h(2,str)……h(i,str)。然后将位数组的第h(1,str)、h(2,str)……h(i,str)位设为1。

需要说明的是,对于BloomFilter来说,因其位数组长度有限,随着处理数据的增加,越来越多的比特位会被置为1。不同的数据经过多种Hash计算之后得到的比特位的位置可能会发生重复,当比特位被占据超过一定比例,就会出现误报率的问题。当BloomFilter中的比特位中存储的数据量过多时,只会有极少数的位置不会被设置为1。假设数据为阿拉伯数字“1000”时,经过4种Hash函数之后得到的结果是B4,B1,B9,B15,这四个位置上的值均应被设置为1。假设待处理数据为英文字母“abc”,经过4种Hash函数之后得到的结果是B6,B19,B2,B13,这四个位置上的值均应被设置为1。那么当阿拉伯数字“1000”和英文字母“abc”均已被BloomFilter存储过时,待处理数据汉字“中国”在BloomFilter中经过4种Hash函数之后得到的结果是B6,B1,B9,B13,这四个位置上的值均应被设置为1。经BloomFilter过滤时,发现B6,B1,B9,B13这四个位置上的值均已经被设置为1,就会被判定为当前处理的数据汉字“中国”已经存在,这条数据就会被过滤掉,然而实际上,汉字“中国”并没有被记录过,这时就出现了误报的情况。当BloomFilter的存储空间被占据比特位越多,误报率就会越大。因此对于一般的BloomFilter需要定期清理存储空间,防止误报率过高影响数据去重的准确性。

假设BloomFilter的存储空间是一个M位点阵列,拥有K种不同的哈希函数定义。

误报率的计算公式推论为:

假设一个Hash函数获取每个位数组的概率都相同,且这些位数组在M范围内,那么某一个位不被Hash函数设置为1的概率为:

如果有K个Hash函数,那么某一个位不被Hash函数设置为1的概率为:

如果有K个Hash函数,且有n个元素需要插入BloomFilter,此时某一个位不被Hash函数设置为1的概率为:

那么可以大致推算误报率是:

示例性的,图1C仅示出了M为18,K为4时的BloomFilter内部实现数据流图。中心服务器对待处理数据汉字“中国”进行一致性Hash计算之后的第一哈希值“110”,第一哈希值“110”被分配到分布式服务器NodeB2的BloomFilter中对分布式服务器进行过滤去重。BloomFilter对“110”进行4种Hash函数计算,获得一串Bit位置,得到的结果是B6,B1,B9,B13,这四个位置上的值均应被设置为1,这个结果就是待处理数据汉字“中国”的第一哈希值“110”得到的第二哈希值。

S130、分布式服务器根据当前待处理数据对应的第二哈希值对当前待处理数据进行去重处理。

在本发明的具体实施例中,分布式服务器中的BloomFilter在进行过滤去重时的原理如下。在上述示例中,对于字符串“str”,已经分别计算了h(1,str),h(2,str)……h(i,str),检查位数组的第h(1,str)、h(2,str)……h(i,str)位是否都为1。若其中任何一位不为1则可以判定“str”一定没有被记录过;若全部位都是1,则认为字符串“str”存在。

示例性的,在上述示例中,分布式服务器中的BloomFilter在经过第二哈希计算之后得到第二哈希值,也就是得到了位数组中要被置为1的Bit位的位置。将内存中对应的Bit位置置为1。如果经过查看发现对应的位置已经均被置为1,说明当前数据已经存在,需要进行丢弃。如果经过查看发现对应的位置有任何一位没有被置为1,说明当前数据没有被记录过,需要对当前数据进行存储,并将其对应的Bit位置置为1。

可选的,分布式服务器判断Redis内存的BitMap中是否存在当前待处理数据对应的第二哈希值;

当Redis内存的BitMap中不存在当前待处理数据对应的第二哈希值时,分布式服务器将当前待处理数据对应的第二哈希值存储到Redis内存的BitMap中;

当Redis内存的BitMap中存在当前待处理数据对应的第二哈希值,分布式服务器将当前待处理数据丢弃。

其中,Redis内存是Redis数据库的内存,Redis内存可以支持比特位的数据存储格式。Bit Map是Redis内存使用位数组来存取元素的存储结构,在判断某些元素是否存在,使用Bit位为单元来存取元素,大大节省了存取空间,适用于海量数据的查找,删除及判重。Bit编位时Bit位从右往左位数升高,第一位编号为0,最高位编号为N-1,可参见图1C和前文所述的内容进行理解。

示例性的,将分布式服务器中的Bloomfilter与Redis内存相接。Redis内存可以为Bloomfilter提供存储空间,在Bloomfilter中利用哈希(Hash)函数计算各个待处理数据对应的比特位的位置,将计算得到的各个待处理数据对应的比特位的位置设置为1,并比较Redis内存的BitMap中对应位置的比特位的取值,从而实现分布式集群环境下的数据过滤去重。

例如,仍然以待处理数据汉字“中国”为例进行说明,分布式服务器中的BloomFilter对第一哈希值“110”进行第二哈希计算,得到第二哈希值B6,B1,B9,B13四个Bit位,将这四个Bit位设为1。BloomFilter查看Redis内存的BitMap中这四个Bit位的值,判断BitMap中这个四个Bit位是否均为1。如果B6,B1,B9,B13四个位置均为1,说明数据汉字“中国”已经在Redis内存中存在,当前正在处理的这条数据汉字“中国”需要被过滤掉;如果B6,B1,B9,B13四个Bit位中有一位为0,说明数据汉字“中国”没有在Redis内存中存在,需要将汉字“中国”进行存储,将B6,B1,B9,B13四个Bit位全部置为1。

示例性的,在分布式服务器中进行数据过滤去重时,如果针对的是实时处理的系统传输的海量数据而言,数据在传输到分布式服务器中时是批量来的,各个分布式服务器中的BloomFilter过滤数据时需要一条一条进行。如果机器进行虚拟机的设置,那么就会产生数量很多的分布式服务器,各个分布式服务器中的BloomFilter同时工作,就会产生批量的数据,如果一条一条的数据存储到Redis内存中,会占用大量的内存资源,也会拖慢Redis内存的读写速度。利用redis的管道技术,将不同的命令分类批量提交,将其相同命令的数据放置到同一个管道里,批量提交至Redis内存中,无论是对Redis内存的性能还是内存资源消耗上均有改善。

需要说明的是,对于Redis内存的批量提交技术,可以根据实际情况进行选择使用,并进行适应性调整,在此不做限定。

本实施例的技术方案中,中心服务器采用第一哈希算法将当前待处理数据进行哈希计算,获取当前待处理数据对应的第一哈希值,然后将第一哈希值分配到与其对应的分布式服务器中,分布式服务器采用第二哈希算法将第一哈希值进行哈希计算获取对应的第二哈希值,分布式服务器根据第二哈希值对当前待处理数据进行去重处理。因此,和现有技术相比,对待处理数据采用第一哈希算法进行计算,将待处理数据分配至对应的分布式服务器中,可以防止分布式服务器出现宕机时丢失数据的影响,进而可以提高数据去重的准确性;设置虚拟机来增加分布式服务器的数量可以有效均衡分布式服务器的整体负载,提高服务器的性能;利用Redis内存的批量提交技术可以适用于实时系统的数据去重情况;并且,本发明实施例的技术方案实现简单方便、便与普及、适用范围广。

实施例二

图2为本发明实施例二提供的中心服务器的结构示意图。图2示出了适于用来实现本发明实施方式的示例性中心服务器的框图。图2显示的中心服务器仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图2所示,中心服务器的包括:第一计算模块21和分配模块22,其中,

第一计算模块21,用于采用第一哈希算法将当前待处理数据进行哈希计算,获取当前待处理数据对应的第一哈希值;

分配模块22,用于将当前待处理数据对应的第一哈希值分配到与其对应的分布式服务器中。

示例性的,中心服务器典型地包括多种计算机系统可读介质。这些介质可以是任何能够被中心服务器访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。

其中,中心服务器可通用计算设备的形式表现,中心服务器的组件可以包括但不限于:一个或者多个处理器或者处理单元,系统存储器,连接不同系统组件(包括系统存储器和处理单元)的总线。总线表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。系统存储器可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)和/或高速缓存存储器。中心服务器可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统可以用于读写不可移动的、非易失性磁介质(通常称为“硬盘驱动器”)。尽管图2中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线相连。存储器可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,例如第一计算模块21和分配模块22,这些程序模块被配置以执行本发明各实施例的功能。具有一组(至少一个)程序模块的程序/实用工具,可以存储在例如存储器中,这样的程序模块包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块通常执行本发明所描述的实施例中的功能和/或方法。应当明白,尽管图中未示出,可以结合中心服务器使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。处理单元通过运行存储在系统存储器中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的数据去重方法。

进一步的,分配模块22包括确定单元221、获取单元222和分配单元223;其中,

确定单元221,用于根据各个待处理数据对应的第一哈希值和预先确定的各个分布式服务器对应的哈希值区间,确定各个第一哈希值对应的目标哈希值区间;

获取单元222,用于获取目标哈希值区间对应的分布式服务器的工作状态;其中,工作状态包括:正常工作状态和异常工作状态;

分配单元223,用于当目标哈希值区间对应的分布式服务器的工作状态为正常工作状态时,将当前待处理数据对应的第一哈希值分配到目标哈希值区间对应的分布式服务器中。

进一步的,确定单元221,还用于当目标哈希值区间对应的分布式服务器的工作状态为异常工作状态时,根据目标哈希值区间确定下一个目标哈希值区间;

分配单元223,还用于将各个待处理数据对应的第一哈希值分配到下一个目标哈希值区间对应的分布式服务器中。

本实施例的技术方案,通过各个模块间的相互配合,实现了对海量数据进行过滤去重前的预处理过程,和现有技术相比,可以将待处理数据在进入分布式服务器进行过滤之前进行分布式存储,可以防止分布式服务器在宕机时对数据去重的影响,进而提高数据去重的准确性;并且本发明实施例中的技术方案实现简单方便、便于普及,适用范围广。

实施例三

图3为本发明实施例三提供的分布式服务器的结构示意图。图3示出了适于用来实现本发明实施方式的示例性分布式服务器的框图。图3显示的分布式服务器仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图3所示,分布式服务器的包括:第二计算模块31和去重模块32,其中,

第二计算模块31,用于采用第二哈希算法将当前待处理数据对应的第一哈希值进行哈希计算,获取当前待处理数据对应的第二哈希值;

去重模块32,用于根据当前待处理数据对应的第二哈希值对当前待处理数据进行去重处理。

示例性的,分布式服务器典型地包括多种计算机系统可读介质。这些介质可以是任何能够被分布式服务器访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。

其中,分布式服务器能够以通用或虚拟计算设备的形式表现,一台机器可以设置多台虚拟机,虚拟机的数量可以业务需要进行设置。当然也可以不进行虚拟机的设置,具体情况可根据实际情况进行适应性调整,在此不做限定。分布式服务器与中心服务器类似,其区别在于实现的功能不同。分布式服务器主要是用来进行数据的过滤去重处理。待处理数据经过中心服务器的预处理之后,被分配至各个分布式服务器中进行过滤,各个分布式服务器中均具有Bloomfilter插件,用于实现过滤功能。有关Bloomfilter的介绍可参见上述实施例,不再赘述。

分布式服务器中的第二计算模块31对待处理数据对应的第一哈希值进行哈希计算,获得当前待处理数据对应的第二哈希值,再经去重模块32的处理,进行过滤去重。实现过滤去重的过程也可参见前述实施例的描述。

可选的,去重模块32包括:判断单元321和去重单元322;其中,

判断单元321,用于判断Redis内存的BitMap中是否存在当前待处理数据对应的第二哈希值;

去重单元322,用于当Redis内存的BitMap中不存在当前待处理数据对应的第二哈希值时,将当前待处理数据对应的第二哈希值存储到Redis内存的BitMap中;当Redis内存的BitMap中存在当前待处理数据对应的第二哈希值,将当前待处理数据进行丢弃。

示例性的,在分布式服务器中进行数据过滤去重时,如果针对的是实时处理的系统传输的海量数据而言,数据在传输到分布式服务器中时是批量来的,各个分布式服务器中的BloomFilter过滤数据时需要一条一条进行。如果机器进行虚拟机的设置,那么就会产生数量很多的分布式服务器,各个分布式服务器中的BloomFilter同时工作,就会产生批量的数据,如果一条一条的数据存储到Redis内存中,会占用大量的内存资源,也会拖慢Redis内存的读写速度。利用redis的管道技术,将不同的命令分类批量提交,将其相同命令的数据放置到同一个管道里,批量提交至Redis内存中,无论是对Redis内存的性能还是内存资源消耗上均有改善。

需要说明的是,对于Redis内存的批量提交技术,可以根据实际情况进行选择使用,并进行适应性调整,在此不做限定。

本实施例的技术方案,通过各个模块间的相互配合,实现了对海量数据进行过滤去重的过程,设置虚拟机的同时利用Redis内存的批量提交技术,不仅可以使分布式服务器的整体负载均衡,还能实现数据的批量存储,节约内存资源,提高Redis内存的读写性能;并且,本发明实施例中的技术方案实现简单方便、便于普及,适用范围更广。

实施例四

图4为本发明实施例四提供的数据去重系统的结构示意图。本发明实施例四还提供一种数据去重系统,该系统包括:中心服务器41和分布式服务器42;其中,

中心服务器41,用于采用第一哈希算法将当前待处理数据进行哈希计算,获取当前待处理数据对应的第一哈希值,将当前待处理数据对应的第一哈希值分配到与其对应的分布式服务器中;

分布式服务器42,用于采用第二哈希算法将当前待处理数据对应的第一哈希值进行哈希计算,获取当前待处理数据对应的第二哈希值;根据当前待处理数据对应的第二哈希值对当前待处理数据进行去重处理。

示例性的,数据去重系统包括中心服务器41和分布式服务器42,其中中心服务器41和分布式服务器42的数量不做限定,可根据具体的业务需要进行适应性调整。数据去重系统可实现前述实施例中所有的方法和功能,中心服务器41和分布式服务器42的介绍参见前述实施例,不再赘述。

数据去重系统中的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,例如Java。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

本实施例的技术方案中,中心服务器采用第一哈希算法将当前待处理数据进行哈希计算,获取当前待处理数据对应的第一哈希值,然后将第一哈希值分配到与其对应的分布式服务器中,分布式服务器采用第二哈希算法将第一哈希值进行哈希计算获取对应的第二哈希值,分布式服务器根据第二哈希值对当前待处理数据进行去重处理。因此,和现有技术相比,对待处理数据采用第一哈希算法进行计算,将待处理数据分配至对应的分布式服务器中,可以防止在分布式服务器出现宕机时防止待处理数据丢失数据的影响,进而可以提高数据去重的准确性;设置虚拟机来增加分布式服务器的数量可以有效均衡分布式服务器的整体负载,提高服务器的性能;利用Redis内存的批量提交技术可以适用于实时系统的数据去重情况;并且,本发明实施例的技术方案实现简单方便、便与普及、适用范围广。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1