一种面向流式大数据的基数估计方法与流程

文档序号:12063849阅读:240来源:国知局
一种面向流式大数据的基数估计方法与流程
本发明属于大数据计算
技术领域
,尤其涉及一种面向流式大数据的基数估计方法。
背景技术
:当前大数据时代可把大数据分成两种:批式大数据和流式大数据。如果把数据当成水库的话,水库里的水就是批式大数据,进来的水就是流式大数据。流式大数据是指以数据流的方式到达并实时写入到存储管理系统中的数据源,也称FastData。其具有高吞吐率、体量巨大的特点,而且数据规模与数据值范围往往不可预知。基数(cardinality)是指一个集合(允许存在重复元素,与集合论对集合严格的定义略有不同)中不同元素的个数。精确的基数计数在面对大数据场景时往往力不从心,因此如何在误差可控的情况下对基数进行估计就显得十分重要。目前常见的基数估计算法有LinearCounting、LogLogCounting、AdaptiveCounting及HyperLogLogCounting等,都是基于概率统计理论所设计的概率算法。基数估计在数据库优化、网络监控、数据分析等领域都有广泛的应用需求。例如数据库优化中需要计算的一个重要统计特性NDV(numberofdistinctvalues),实际上就是对表中的相应数据进行基数估计。再例如入侵检测系统(IDS)中需要统计每一个源地址建立了多少个不同的连接,来检测一些拒绝服务攻击(DOS),实际上就是提取数据包头的相应信息进行计数估计。因此,对流式大数据进行高精度实时的基数估计具有重要的价值。目前的大数据分析统计系统本质是一种精确计算的方法,例如基于Hadoop的相关大数据存储管理系统与方法,是基于先存储后处理的批处理模式实现的,然后扫描原始数据获得准确的计算值,无法应对流式大数据高速到达的应用特征。尽管Tez,SparkStreaming,Storm等系统基于内存计算可以提高响应速度,但由于精确计算需维护与原始数据等量的内存空间来支持数据的统计查询,因此很难适用流式大数据海量规模的特点。为了解决上述问题,人们提出了一些解决方案,其中:Oracle公司的数据库团队提出了SynopsisAggregation算法(申请号60/859,817),是一种基于概率的基数估计算法。该方法包括一下步骤:1.将数据按照一定规则进行分区,每个分区调用ApproximateNDV算法进行计算获得一个概要元素集合Synopsis;2.对每个分区的集合Synopsis进行归一化处理,并进行合并形成最终的集合Synopses;3.对集合Synopses中的元素再次调用ApproximateNDV算法进行计算;4.对第3步的结果调用公式即可获得最终的基数估计值。该方法还引入了增量框架模型,对历史分区数据进行增量计算,提高计算效率。但其存在的不足之处是:调用的ApproximateNDV算法具有较大的计算复度,同时也需要较大的内存,因此并不适用于流式大数据的实时基数估计。国家计算机网络与信息安全管理中心和中国科学院信息工程研究所的专利“一种大数据多区间查询条件下的基数估计方法及装置”(申请号201310484503.6申请公布号CN103544258A)公开了一种大数据多区间查询条件下的基数估计方法及装置,该方法包括以下步骤:1.按照数值属性对大数据预先划分成多个分区,每个分区内保存所述大数据中的一段数据源,各个分区之间有序排列;2.建立树形索引结构,每个分区作为树形索引结构的一个节点,每个节点用于记录对应的分区的最大值和最小值,每个节点中设置数据文件和基数估算器;3.获取待写入树形索引结构的数据源,对支持区间查询条件的数据源进行倒排索引处理;4.将经过倒排索引处理的数据源的相应部分分别写入数据文件及基数估算器内;5.根据区间查询条件在树形索引结构中查询满足区间查询条件的节点,得到节点中的基数估算器,对基数估算器中的数据源的相应部分进行逻辑处理,得到基数估算值。该方法虽然能实现多区间查询条件下的基数估计,但其存在的不足之处是:分区是严格依据数据值的大小排列的,而流式大数据的数据规模与数据值范围往往不可预知,从而极大的降低了算法效率;更为重要的是,每个分区都是调用HyperLogLog基数估计算法,该算法在某些数据分布下估计精度会下降,同时当流式大数据急剧增加时,计算时间增加,不能保证数据处理的实时性。综上所述,现有的流式大数据的基数估计方法存在调用的基数估计算法具有较大的计算复杂度,极大降低了算法效率;估计精度会下降,同时当流式大数据急剧增加时,计算时间增加,不能保证数据处理的实时性。技术实现要素:本发明的目的在于提供一种面向流式大数据的基数估计方法,旨在解决现有的流式大数据的基数估计方法存在调用的基数估计算法具有较大的计算复杂度,极大降低了算法效率;估计精度会下降,同时当流式大数据急剧增加时,计算时间增加,不能保证数据处理实时性的问题。本发明是这样实现的,一种面向流式大数据的基数估计方法,所述面向流式大数据的基数估计方法针对流式大数据,通过降低计算精度提高基数估计效率;对HyperLogLogCounting算法所需的中间统计信息进行分区计算,选择高效的哈希算法和最优的分桶个数,通过改进的分桶方法将哈希过的数据较为均匀的映射到m个不同的桶号中,并进行增量维护,再进行合并得到最终的中间统计信息,从而计算基数估计值。进一步,所述面向流式大数据的基数估计方法包括以下步骤:步骤一,按照流式数据到达时刻以相同的时间间隔将大数据划分成多个分区,每个分区内保存所述大数据中的一段数据源,各个分区之间按照时序关系有序排列;步骤二,在每个分区构建统计信息计算器,通过改进的分桶方法将哈希过的数据较为均匀的映射到m个不同的桶号中,维护和建立一个m字节大小的记录分区数据统计信息的bitmap;步骤三,建立和增量维护全局哈希表,每个分区的统计信息以键值对的形式存入全局哈希表,键为对应分区起始时刻时间经过哈希后的值,值即为该分区的经过统计信息计算器获得的bitmap中存放的值;步骤四,构建分区统计信息合并器,从全局哈希表中获取给定数据时间窗口中所有分区的统计信息bitmap,合并成可以代表数据时间窗口中所有数据的统计信息bitmap;步骤五,构建基数估计计算器,从分区统计信息合并器中获取最终的统计信息bitmap,进行偏差调整,选择最优的结果。进一步,所述分区的建立包括:按照流式数据到达时刻以相同的时间间隔将大数据划分成多个分区,每个分区内保存所述大数据中的一段数据源,各个分区之间按照时序关系有序排列如下:[t1,t1+Δt),[t1+Δt,t1+2Δt),[t1+2Δt,t1+3Δt),...,[t1+kΔt,t2),其中k=floor((t2-t1)/Δt)。进一步,所述在每个分区构建统计信息计算器将数据映射到64比特空间;最终确定分桶数m=216;截取64比特数据值的前3组log2m比特的二进制值相互异或,将异或值作为桶号;64比特数据值去掉前log2m比特剩余比特组成的二进制值就是需处理的真实值,计算其ρ值,更新bitmap中对应桶号的最大ρ值。进一步,所述建立和增量维护全局哈希表包括:第一步,实时监控数据时间窗口中的分区,确定离开数据时间窗口,新进入数据时间窗口,仍在数据时间窗口数据未发生改变,仍在数据时间窗口数据发生改变这四类分区;第二步,根据键值从全局哈希表中删除不在数据时间窗口的分区统计信息;第三步,计算新进入时间窗口中的分区统计信息,添加到全局哈希表中;第四步,重新计算仍在时间窗口中但数据发生改变的分区统计信息;第五步,保持仍在时间窗口中数据未发生改变的分区统计信息。进一步,所述构建分区统计信息合并器包括:1)遍历全局哈希表,根据键获取存放分区统计新的所有值;2)存放每个分区统计信息的bitmap一共有m字节,有n个分区统计信息b1,b2,b3,...,bn,则M[i]=max{b1[i],b2[i],...,bn[i]},i=0,1,...,m-1,则M中存放的就是最终所有分区合并后的统计信息。进一步,所述构建基数估计计算器包括:(1)从分区统计信息合并器中获取最终的统计信息M,通过调和平均计算初步的基数估计值E;(2)根据计算出的基数估计值,E太大就进行大范围修正,若范围太小则进行小范围修正,若范围刚好则不修正。本发明的另一目的在于提供一种应用所述面向流式大数据的基数估计方法的数据库优化系统。本发明的另一目的在于提供一种应用所述面向流式大数据的基数估计方法的网络监控系统。本发明的另一目的在于提供一种应用所述面向流式大数据的基数估计方法的数据分析系统。本发明提供的面向流式大数据的基数估计方法,在基数估计算法HyperLogLogCounting中对中间统计信息进行分区增量维护,同时改进分桶平均时的分桶方法,使得基数估计更加精准、高效。本发明实现了实时基数估计,针对流式大数据,先通过降低计算精度提高基数估计效率,同时对HyperLogLogCounting算法所需的中间统计信息进行分区计算,选择高效的哈希算法和最优的分桶个数,并进行增量维护,最终再进行合并得到最终的中间统计信息,从而计算基数估计值。有效的利用了历史数据,避免了重复计算,极大的提高了基数估计的效率。实现了高精度基数估计,对数据的分桶是否平均以及分桶的数量对估计精度有很大的影响,相比传统算法给出了高效的分桶方法,权衡内存消耗和估计精度选择合适的分桶数,提高了基数估计的精度。算法空间复杂度很低,降低了计算资源消耗,这是由于其他的一些基数估计算法空间复杂度都是O(n)或者O(logn),而基于HyperLogLogCounting改进的所述基数估计算法空间复杂度为O(log(logn)),只需维护很小的内存数据,高精度实时的对流式大数据进行基数估计,极大的降低了计算资源。整个数据时间窗口有5000万条数据,按照不同的时间间隔分区,使用所述的基数估计方法进行计算,所需的时间如下表,不管分区个数是多少,都明显比未分区的时间效率高。整个数据时间窗口有5000万条数据,按照不同的分桶数进行基数估计,所述基数估计算法误差率都比传统的基数估计算法(即原始的HyperLogLogCounting算法)误差率低。附图说明图1是本发明实施例提供的面向流式大数据的基数估计方法流程图。图2是本发明实施例提供的实施例1的流程图。图3是本发明实施例提供的增量维护统计信息的流程图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。下面结合附图对本发明的应用原理作详细的描述。如图1所示,本发明实施例提供的面向流式大数据的基数估计方法包括以下步骤:S101:按照流式数据到达时刻以相同的时间间隔将大数据划分成多个分区,每个分区内保存所述大数据中的一段数据源,各个分区之间按照时序关系有序排列;S102:在每个分区构建统计信息计算器,通过改进的分桶方法将哈希过的数据较为均匀的映射到m个不同的桶号中,维护和建立一个m字节大小的记录分区数据统计信息的bitmap;S103:建立和增量维护全局哈希表,每个分区的统计信息以键值对的形式存入全局哈希表,键为对应分区起始时刻时间经过哈希后的值,值即为该分区的经过统计信息计算器获得的bitmap中存放的值;S104:构建分区统计信息合并器,从全局哈希表中获取给定数据时间窗口中所有分区的统计信息bitmap,合并成可以代表数据时间窗口中所有数据的统计信息bitmap;S105:构建基数估计计算器,从分区统计信息合并器中获取最终的统计信息bitmap,进行偏差调整,从三种方法中选择最优的结果。下面结合具体实施例对本发明的应用原理作进一步的描述。本发明实施例涉及如下参数,符号表示与具体含义说明如表1所示:表1.符号表示与具体含义说明Δt流式大数据分区时间间隔t1数据时间窗口初始时刻t2数据时间窗口终点时刻m分桶平均时的分桶数ρ二进制数据从左往右第一个比特位为1的下标位置bj一个m字节的bitmap,每一字节存储第j个分区对应桶号的最大ρ值bj[i]第j个分区第i个分桶的最大ρ值M一个m字节的bitmap,存储合并后所有分区bitmap后的对应桶号的最大ρ值M[i]存储合并后所有分区bitmap后的第i个桶号中最大的ρ值E基数估计值如图2所示,本发明实施例提供的面向流式大数据的基数估计方法,包括如下步骤:步骤1,建立数据分区。1.1)按照流式数据到达时刻以相同的时间间隔将大数据划分成多个分区,每个分区内保存所述大数据中的一段数据源,各个分区之间按照时序关系有序排列如下:[t1,t1+Δt),[t1+Δt,t1+2Δt),[t1+2Δt,t1+3Δt),...,[t1+kΔt,t2),其中k=floor((t2-t1)/Δt)。步骤2,在每个分区构建统计信息计算器。2.1)本发明中哈希方法的结果必须具有很好的均匀性,碰撞几乎可以忽略不计,哈希结果的长度固定不变,综上选择Murmurhash的改进版本2,将数据映射到64比特空间;2.2)本发明中通过分桶平均(类似于物理实验的多次计算求平均值)来降低偶然因素带来的误差,显然分桶数越大精度越高,但是随着分桶数增大数据所占的内存也会增大,并且当分桶数达到一定数值时在增加分桶数估计精度并无明显增加,经过大量实验最终确定分桶数m=216;2.3)本发明中如何将数据均匀的映射到m个不同的桶号,对基数估计精度有很大的影响,传统的算法截取64比特数据值的前log2m比特的二进制值作为桶号,对于某些数据分布分桶并不均匀,改进的算法是截取64比特数据值的前3组log2m比特的二进制值相互异或,增强随机性,将异或值作为桶号;2.4)本发明中64比特数据值去掉前log2m比特剩余比特组成的二进制值就是需处理的真实值,计算其ρ值,更新bitmap中对应桶号的最大ρ值;步骤3,建立和增量维护全局哈希表。3.1)建立全局哈希表,每个分区的统计信息以键值对的形式存入全局哈希表,键为对应分区起始时刻时间经过哈希后的值,值即为该分区的经过统计信息计算器获得的bitmap中存放的值;3.2)结合图3,本发明增量维护统计信息全局哈希表的步骤如下:i)构建分区监控器。实时监控数据时间窗口中的分区,随着数据时间窗口的移动以及数据时间窗口大小的调整,要确定离开数据时间窗口,新进入数据时间窗口,仍在数据时间窗口,仍在数据时间窗口但数据发生改动的四类分区情况,作为后面操作的依据;ii)丢弃不在时间窗口中的分区统计信息。随着时间的推移,一些较老的分区数据已经不在数据时间窗口中,为了节省时间将其从内存中丢弃,即根据其键值从全局哈希表中删除。特别注意,这一统计信息需存入历史统计信息存入数据库建立的数据表中作为备份,因为当时间窗口调整扩大时可以从数据库中直接获取丢弃的分区统计信息,而无需重新计算;iii)计算新进入时间窗口中的分区统计信息。随着时间的推移,总有新的分区数据不在数据时间窗口中,就需要计算其分区统计信息,将其添加到全局哈希表中;iv)重新计算仍在时间窗口中但数据发生改变的分区统计信息。随着时间的推移,通过分区监控器可能会发现某个分区的数据发生更改,比如通过分区监控器分析发现原来的数据经过了篡改,重新进行了恢复,就需要重新计算分区统计信息。当然,如果分区数据更改的比例不到10%,就不进行重新计算,因为不超过10%的修改对基数估计精度的影响不是太大,重新计算反而降低效率。将重新计算的分区统计信息,根据键值,更新到全局哈希表中;v)保持仍在时间窗口中数据未发生改变的分区统计信息。随着时间的推移,有一些分区数据仍在时间窗口中,并且数据未发生改变,原来计算的分区统计信息仍然有用,就是在全局哈希表保持不变;步骤4,构建分区统计信息合并器。4.1)全局哈希表中存放的是在时间窗口中的新加的、更新过的、保持不变的三类分区统计信息,遍历全局哈希表,根据键获取存放分区统计新的所有值;4.2)存放每个分区统计信息的bitmap一共有m字节,假如有n个分区统计信息b1,b2,b3,...,bn,则M[i]=max{b1[i],b2[i],...,bn[i]},i=0,1,...,m-1,则M中存放的就是最终所有分区合并后的统计信息;步骤5,构建基数估计计算器。5.1)从分区统计信息合并器中获取最终的统计信息M,通过调和平均计算初步的基数估计值E;5.2)根据上一步计算出的基数估计值,若E太大就进行大范围修正,若范围太小则进行小范围修正,若范围刚好则不修正,具体修正方法详见HyperLogLogCounting的原始算法。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1