一种数据计数去重方法、系统、服务器及存储介质
技术领域
本发明涉及大数据领域,尤其涉及一种数据计数去重方法、系统、服务器及存储介质。
背景技术
随着互联网的普及,网络数据呈现指数级增长,庞大的数据量对于去重技术是一个重大考验。对于类似用户访问量、用户评论、用户发言等数据计数,传统简单的分组计数,相对于千万或上亿级别数据显然难以适用。
目前,针对这种庞大数据的计数去重,常采用Bloom Filter算法,使用多hash函数与bitmap存储达到数据去重的目的,但这种方式存在数据误杀,致使去重准确率较低,难以保障结果的可靠。
发明内容
有鉴于此,本发明实施例提供了一种数据计数去重方法、系统、服务器及存储介质,以现有去重方式准确率较低的问题。
本发明实施例的第一方面,提供了一种数据计数去重方法,包括:
接收到客户端去重调用请求后,利用dubbo组件进行负载均衡,以分配服务器进行去重处理;
解析所述请求,根据所述请求中预设的去重级别参数,在所述服务器上创建对应数量的redis数据存储bitmap;
获取所述请求中的去重内容参数和所述去重级别参数,通过Bloom Filter算法计算得到去重结果,当所述去重级别大于1级且去重结果返回值为0时,重新计算一组hash函数,再次通过Bloom Filter算法去重,其中,通过Bloom Filter算法去重次数与所述去重级别相等。
发送去重后的计数到所述客户端。
本发明实施例的第二方面,提供了一种数据计数去重系统,包括:
服务调用模块:用于通过spring boot框架生成接口调用服务;
负载均衡模块:用于在接收到用户调用请求后,利用dubbo组件进行负载均衡,以分配服务器进行去重处理;
去重计算模块:用于获取所述请求中的去重内容参数和所述去重级别参数,通过Bloom Filter算法计算得到去重结果,当所述去重级别大于1级且去重结果返回值为0时,重新计算一组hash函数,再次通过Bloom Filter算法去重,其中,通过Bloom Filter算法去重次数与所述去重级别相等;
数据存储模块:用于根据所述请求中预设的去重级别参数,在所述服务器上创建对应数量的redis数据存储bitmap。
本发明实施例的第三方面,提供了一种服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。
本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。
本发明实施例的第五方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被一个或多个处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。
本发明实施例中,通过dubbo组件进行负载均衡,同时根据预设的去重等级,通过Bloom Filter算法进行对应级别的计数去重,不仅可以保障数据得到高效快速的处理,而且基于多级去重会使用redis缓存能提高提高查重效率,同时,多级去重能大大减少数据误杀概率,提升去重的准确性。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的数据计数去重的流程示意图;
图2为本发明实施例二提供的步骤S102的流程示意图;
图3为本发明实施例三提供的步骤S103流程示意图;
图4为本发明实施例四提供的数据计数去重的结构示意图;
图5为本发明实施例五提供的服务器的结构示意图。
具体实施方式
本发明实施例提供了一种数据同步方法、服务器及存储介质,用于数据同步,保障数据同步的实时性。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
实施例一:
请参阅图1,本发明实施例提供的数据计数去重方法的流程示意图,包括以下步骤:
S101、接收到客户端去重调用请求后,利用dubbo组件进行负载均衡,以分配服务器进行去重处理。
所述客户端能为用户提供本地服务,可以向服务器请求去重服务。所述客户端可以指客户机上的一段去重请求程序,能够调用服务器端的去重组件。服务器端接收到请求后,会验证请求的合法性,然后通过dubbo组件负载均衡,进行分配服务器。所述dubbo组件为一种分布式服务框架,可提供透明化的RPC(远程过程调用)远程服务调用,具有软负载均衡及容错机制。由于去重服务的计算量大,需要多台服务器配合,因此需要根据服务器端已有的硬件设备,动态分配处理任务。
可选的,接收请求前还包括:通过spring boot框架生成接口调用服务,并创建HTTP方式调用和RPC方式调用,同时还提供基础接口,方便扩展多种形式调用。具体的,HTTP方式调用是采用post请求方式接收请求的参数,在本发明实施例中所述参数可包括数据库名、日期分区、去重内容及去重级数等。RPC方式调用需要实例化RPC接口请求服务器,读取配置文件,获取监听的服务端口并启动服务,接收的参数与HTTP方式类似。HTTP方式可实现不同编程语言的交互,而RPC接口可实现远程调用,两种调用方式结合能够方便多种形式的调用。
S202、解析所述请求,根据所述请求中预设的去重级别参数,在所述服务器上创建对应数量的redis数据存储bitmap;
所述请求中包含有去重需要用到的基本参数,例如去重内容、去重级别、数据库名等,所述预设的去重级别一般指去重等级,等级越高,去重精度越高,优选的,在本发明实施例中所述去重级别一般有1级、2级和3级,所述级别可以根据需要进行扩充。
所述redis是一种key-value存储系统,支持多种类型数据存储。所述bitmap是由连续位图组成的内存,有0和1表示元素是否存在,在本发明实施例中bitmap用于存储去重数据经过hash函数计算后,设置对应的bit位表示所述数据。通过redis数据存储bitmap,不仅能够节省大量内存空间,而且,基于key-value形式的数据查询比对具有效率高,速度快的优势。
可选的,所述创建过程还包括:根据所述请求中包含数据库名、分区数据及去重级别,在数据存储组件redis中查询并判断对应的数据库名和分区数据是否存在,当不存在时,在所述数据存储组件中创建所述去重数据对应的bitmap数据,并设置为0。
所述创建bitmap数据还包括:设置所述bitmap数据生存时间,当所述数据生存时间消耗完,自动销毁所述bitmap数据。
S103、获取所述请求中的去重内容参数和所述去重级别参数,通过Bloom Filter算法计算得到去重结果,当所述去重级别大于1级且去重结果返回值为0时,重新计算一组hash函数,再次通过Bloom Filter算法去重,其中,通过Bloom Filter算法去重次数与所述去重级别相等;
所述去重内容参数和去重级别参数均为应用请求时携带的参数,所述去重内容,可以是例如用户评论、用户发言等,通过用户唯一标识例如id,可以根据id查询用户的评论记录。所述Bloom Filter算法利用位数组标识集合,能够判断一个元素是否存在于该集合。具体的,通过计算查询元素的hash值,再去redis的bitmap中查询,并将bitmap中数值为0的数据设置为1。
每经过一次Bloom Filter算法查重,即表示一个去重等级,根据去重等级,需要对所述去重数据查询时,通过Bloom Filter算法进行对应次数的查重,每次查重需要重新计算hash值,同时基于上一次的查询就可以用到多级redis缓存,进一步加快查重效率。
S204、发送去重后的计数到所述客户端。
在本发明实施例中,通过结合dubbo组件进行负载均衡,并建立redis存储,结合bitmap基础上通过Bloom Filter算法查重计数,能够极大提高数据处理速度,同时多级查询判断,能大大降低误杀率,保障去重计数的准确性。
实施例二:
在图1的基础上,结合图2详述步骤S102,即创建去重服务数据存储单元,如下:
图2为本发明实施例提供的步骤S102流程示意图,包括步骤S1021、S1022、S1023、S1024,上述步骤并不意味着执行顺序的先后。
在步骤S1021中,解析请求参数可得到数据库名、分区数据及去重级别等。
当进行redis存储前,需要先去查询存储组件redis中确定有否已经存储过,这样能避免数据重复存储,占用内存。具体的,通过获取请求参数中的数据名及分区数据内容,然后和redis存储组件中的数据遍历比对,经过步骤S1022可以排除干扰。
当不存在对应的数据库名和分区数据时,创建分区数据对应的bitmap数据,建立键值关联关系,并将其中数值统一设为0。同时还要对所述数据设置生存时间,当生存时间耗尽,则销毁redis中数据。由于bitmap中的数据有可能已经没有作用或过期数据,这时若由人工销毁需要耗费大量时间,设置其自动销毁就可以节省内存空间,而且数据使用过就会失效这时让其自动销毁释放内存,就能方便提高空间利用率。
在S1024中所述去重级别即对应redis存储单元,一般所述级别可以预设,根据预设的级别创建对应数量的redis存储单元,例如当去重级别为2时,创建两个redis数据存储bitmap。
优选的,所述去重等级一般最高设定为3级。
在本发明提供的实施例中设置redis的过期时间,定时释放内存,能够节省内存空间,同时创建对应数量的redis存储单元能够保障后续查重计数的高效进行。
实施例三:
在图1的基础上,结合图3详述步骤S103创建去重计算单元的流程,如下:
解析完应用请求参数后,步骤S103中需要获知设定的去重级别参数。具体实现过程在S301和S302中通过Bloom Filter算法进行去重计数,例如,当去重级别为1级时,计算一组去重数据的hash值,根据hash值结果,找到对应的redis存储单元中的bitmap,并在所述bitmap中查询,若不存在,则将对应bitmap位中数值为0的设置1,将所述数据加入到去重结果的存储单元中,并返回去重结果。每次根据查询过程结束后将查询结果返回,若有任意bit位返回值为0,则表明该查询数据不存在,去重结果则为1,若返回的bit位全部为0,则表明所述查询数据已经存在,去重结果为0。
为了较少查询误杀,一次去重往往难以保障去重准确率。在S304当认定查询数据已经存在,需要验证去重级别,当大于1级时,进行二次去重计算。具体的,利用二级redis缓存,计算一组新的hash值。
可选的,每进行一次Bloom Filter去重计算,累次次数,使通过Bloom Filter算法去重次数与所述去重级别相等。
多级别的去重计算可以提高去重准确率,减少误杀。
实施例四:
上面主要描述了一种数据去重计数方法,下面将对一种数据计数去重系统进行详细描述。
图4示出了本发明实施例提供的数据计数去重系统的结构示意图,包括:
服务调用模块410:用于通过spring boot框架生成接口调用服务;
可选的,所述服务调用模块410包括:
接口生成单元:用于通过spring boot框架生成接口调用服务,并创建HTTP方式调用和RPC方式调用。
负载均衡模块420:用于在接收到用户调用请求后,利用dubbo组件进行负载均衡,以分配服务器进行去重处理;
可选的,所述服务调用模块410为所述负载均衡模块420前置模块。
去重计算模块430:用于获取所述请求中的去重内容参数和所述去重级别参数,通过Bloom Filter算法计算得到去重结果,当所述去重级别大于1级且去重结果返回值为0时,重新计算一组hash函数,再次通过Bloom Filter算法去重,其中,通过Bloom Filter算法去重次数与所述去重级别相等;
可选的,所述去重计算模块具体包括:
去重计算单元:通过Bloom Filter算法计算得到去重结果后,当所述去重级别大于1级且去重结果返回值为0时,重新计算一组hash函数得到hash值,在所述redis存储单元的bitmap中查询所述hash值,根据查询结果的返回值和已经去重的次数,判定是否进行再次去重,其中,所述已经去重次数即是通过Bloom Filter算法去重次数。
数据存储模块440:用于根据所述请求中预设的去重级别参数,在所述服务器上创建对应数量的redis数据存储bitmap。
可选的,所述数据存储模块440包括:
数据查询单元:用于根据所述请求中包含数据库名、分区数据及去重级别,在数据存储组件中查询并判断对应的数据库名和分区数据是否存在,当不存在时,在所述数据存储组件中创建bitmap数据,并设置为0。
设置单元:用于设置所述bitmap数据生存时间,当所述数据生存时间消耗完,自动销毁所述bitmap数据。
优选的,以上所述模块在具体服务架构中是以组件形式存在,所述服务调用模块410是以接口形式调用服务,所述负载均衡模块420是以dubbo组件形式进行分配服务器,所述去重计算模块430是以去重逻辑组件形式提供去重计算服务,所述数据存储模块440能以redis存储形式提供数据存储服务。进一步的,所述去重计算模块430与所述负载均衡模块420都是利用服务器处理器处理,且所述去重计算模块430在dubbo组件中定义生成。
实施例五:
图5是本发明一实施例提供的数据计数去重的服务器结构的示意图。所述服务器,为提供计算服务的设备,通常指具有较高计算能力,通过网络提供给多个用户使用的计算机。如图5所示,该实施例的服务器5包括:存储器510、处理器520以及系统总线530,所述存储器510包括存储其上的可运行的程序5101,本领域技术人员可以理解,图5中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图5对终端设备的各个构成部件进行具体的介绍:
存储器510可用于存储软件程序以及模块,处理器520通过运行存储在存储器510的软件程序以及模块,从而执行终端的各种功能应用以及数据处理。存储器510可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器510可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
在存储器510上包含数据同步方法的可运行程序5101,所述可运行程序5101可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器510中,并由处理器520执行,以完成通知的传递并获取通知实现过程,所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序5101在所述服务器5中的执行过程。例如,所述计算机程序5101可以被分割为获取模块、比对模块、拼接模块和发送模块。
处理器520是服务器的控制中心,利用各种接口和线路连接整个终端设备的各个部分,通过运行或执行存储在存储器510内的软件程序和/或模块,以及调用存储在存储器510内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器520可包括一个或多个处理单元;优选的,处理器520可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器520中。
系统总线530是用来连接计算机内部各功能部件,可以传送数据信息、地址信息、控制信息,其种类可以是例如PCI总线、ISA总线、VESA总线等。处理器520的指令通过总线传递至存储器510,存储器510反馈数据给处理器520,系统总线530负责处理器520与存储器510之间的数据、指令交互。当然系统总线530还可以接入其他设备,例如网络接口、显示设备等。
所述服务器应至少包括CPU、芯片组、内存、磁盘系统等,其他构成部件在此不再赘述。
在本发明实施例中,该服务器所包括的处理器520执行的可运行程序具体为:
一种数据计数去重方法,其特征在于,包括:
接收到客户端去重调用请求后,利用dubbo组件进行负载均衡,以分配服务器进行去重处理;
解析所述请求,根据所述请求中预设的去重级别参数,在所述服务器上创建对应数量的redis数据存储bitmap;
获取所述请求中的去重内容参数和所述去重级别参数,通过Bloom Filter算法计算得到去重结果,当所述去重级别大于1级且去重结果返回值为0时,重新计算一组hash函数,再次通过Bloom Filter算法去重,其中,通过Bloom Filter算法去重次数与所述去重级别相等。
发送去重后的计数到所述客户端。
进一步的,所述接收到客户端去重调用请求后还包括:
通过spring boot框架生成接口调用服务,并创建HTTP方式调用和RPC方式调用。
进一步的所述解析所述请求,根据所述请求中预设的去重级别参数,在所述服务器上创建对应数量的redis数据存储bitmap包括:
根据所述请求中包含数据库名、分区数据及去重级别,在数据存储组件redis中查询并判断对应的数据库名和分区数据是否存在,当不存在时,在所述数据存储组件中创建bitmap数据,并设置为0。
进一步的,所述在所述数据存储组中创建bitmap数据,并设置为0还包括:
设置所述bitmap数据生存时间,当所述数据生存时间消耗完,自动销毁所述bitmap数据。
进一步的,所述获取所述请求中的去重内容参数和所述去重级别参数,通过BloomFilter算法计算得到去重结果,当所述去重级别大于1级且去重结果返回值为0时,重新计算一组hash函数,再次通过Bloom Filter算法去重具体为:
通过Bloom Filter算法计算得到去重结果后,当所述去重级别大于1级且去重结果返回值为0时,重新计算一组hash函数得到hash值,在所述redis存储单元的bitmap中查询所述hash值,根据查询结果的返回值和已经去重的次数,判定是否进行再次去重,其中,所述已经去重次数即是通过Bloom Filter算法去重次数。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。