一种基于Hbase数据库的数据统计方法与系统与流程

文档序号:11918880阅读:302来源:国知局
本发明涉及
技术领域
:,特别涉及一种基于Hbase数据库的数据统计方法,同时还特别涉及一种基于Hbase的数据统计系统。
背景技术
::当前是数据的时代,各种各样的数据堆积成山,如何在这些杂乱无章的数据中找出有规律的、基于某些维度的统计数据显得越来越重要。统计数据能够为决策、研究、分析等提供重要依据。所以一种快速、高效、实时、智能的统计方案能够带来重要的价值。HBase是一个分布式的、面向列的开源数据库,为一个结构化数据的分布式存储系统,。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,另外,HBase基于列的而不是基于行的模式。现有的基于Hbase数据库的数据存储方法流程为:先从历史数据中按各个时间段查询出所有数据,然后每条数据根据表1中格式存入临时表Table1中,以过车数据存储为例,构建表Table1。表1其中,tollgate_code为卡口编码,lane_index为通道代码,vehicle_type为车辆类型,timestamp为时间戳,vehicle_speed为车辆车速。基于上述的临时表,当用户需要按照小时统计报表时,则在上述时间的划分过程中按照小时为时间段进行划分,然后将临时表Table1中的数据进行一小时一小时的汇总,然后存入到表Table2中,Table2如下:表2Table1和Table2的区别在于Table1的timestamp是直接用每条数据的过车时间,value是用每条数据的车辆速度;而Table2的timestamp是整小时的时间点,value是这一小时内的所有过车数据速度的平均值和过车数据的总数量的组合值。在实际的应用中,如果当用户需要统计日报、周报、月报、年报等,就需要再重新建表,然后把上一张表的数据进行汇总再存入到对应的表中,流程需要重新开发,运行时对系统的开销大。上述整个统计流程除了卡口编码以及通道代码,此外只能对车辆类型的数据进行统计。如果还需要对车辆颜色、违章类型等进行统计,就需要将上述流程重新走一遍,表也要新建,开发量大。发明人在实现本发明的过程中发现了现有技术中的以下几个问题:(1)可扩展性差,仍以上述的车辆信息为例,不管是时间维度上的时报、日报、周报、月报、年报等,还是统计类型维度上的车辆类型、车辆颜色、违章类型等,都是需要重新建表,重启进程或线程去做,这对这对系统的计算和内存的开销都比较大。而且不管是时间维度还是统计类型维度,都做不到可配,增加一个新的时间周期或者统计类型,都需要重新开发,工作量极大;(2)实时性差,由于现有技术中类似于上述方案的存储方法是从大量历史数据中查询出需要的时间段的数据,然后先存入临时表,再从临时表将数据汇总到需要的报表,数据来源为历史数据决定了这种方案的实时性不高。(3)开销大,上述的数据存储过程中是基于时间维度的统计粒度进行的,实际应用中如果在时间维度的统计粒度和统计类型维度上的统计类型都比较多时,由于这个流程会做大量的重复工作,所以对系统的开销会比较大。因此,如何减少对具体的统计粒度与统计类型的依赖已经成为本领域技术人员亟待解决的问题。技术实现要素:本申请提供了一种基于Hbase数据库的数据统计方法与系统,旨在减少对具体的统计粒度与统计类型的依赖,并提高数据统计结果的实时性。本申请实施例提出了一种基于Hbase数据库的数据统计方法,所述方法包括:创建接收到的数据的存储格式,所述存储格式中行键RowKey由第一统计粒度与所述数据的固定统计类型拼接构成,所述存储格式中列Column由所述数据的可配置统计类型的名称和统计值拼接构成,其中,所述第一统计粒度为所述数据对应的最小统计粒度;根据所述第一统计粒度与所述存储格式将所述数据存入所述Hbase;当用户指定的第二统计粒度与所述第一统计粒度不一致时,则根据所述第二统计粒度与所述存储格式确定合并格式,并根据所述合并格式对存入到所述Hbase中的数据进行合并统计。优选的,还包括:所述存储格式中的value值包括所述数据统计结果的数量;确定所述数据中各数据单元所在的时间段,所述时间段与所述第一统计粒度对应;根据所述时间段为所述数据单元添加时间戳。优选的,根据所述存储格式将所述数据存入所述Hbase,具体包括:根据所述数据单元的时间戳将所述数据单元按照所述时间戳存入所述Hbase中对应的时间段;对所述时间段存入的各数据单元依次添加序列号进行区分。优选的,则根据所述第二统计粒度与所述存储格式确定合并格式,所述合并格式具体为:将所述RowKey中的第一统计粒度修改为所述第二统计粒度,对所述value值进行累加和求平均值后获取第二value值。优选的,根据所述合并格式对存入到所述Hbase中的数据进行合并统计,具体为:根据所述第二统计粒度对所述数据进行分组,将所述第二统计粒度对应的时间段的起始时间作为所述数据组的第二时间戳;根据所述第二统计粒度对应的时间段与所述合并格式获取与所述第二统计粒度对应的第二数据;根据所述第二时间戳将所述第二数据插入Hbase中。相应的,基于与上述相同的技术思路,本发明实施例还提出了一种基于于Hbase数据库的数据统计系统,所述系统包括:生成模块,创建接收到的数据的存储格式,所述存储格式中行键RowKey由第一统计粒度与所述数据的固定统计类型拼接构成,所述存储格式中列Column由所述数据的可配置统计类型的名称和统计值拼接构成,其中,所述第一统计粒度为所述数据对应的最小统计粒度;存储模块,根据所述第一统计粒度与所述存储格式将所述数据存入所述Hbase;合并模块,当用户指定的第二统计粒度与所述第一统计粒度不一致时,则根据所述第二统计粒度与所述存储格式确定合并格式,并根据所述合并格式对存入到所述Hbase中的数据进行合并统计。优选的,还包括:所述存储格式中的所述value值包括所述数据统计结果的数量;确定所述数据中各数据单元所在的时间段,所述时间段与所述第一统计粒度对应;根据所述时间段为所述数据单元添加时间戳。优选的,所述存储模块具体用于:根据所述数据单元的时间戳将所述数据单元按照所述时间戳存入所述Hbase中对应的时间段;对所述时间段存入的各数据单元依次添加序列号进行区分。优选的,所述合并格式具体为:将所述RowKey中的第一统计粒度修改为所述第二统计粒度,对所述value值进行累加和求平均值后获取第二value值。优选的,所述合并模块具体用于:根据所述第二统计粒度对所述数据进行分组,将所述第二统计粒度对应的时间段的起始时间作为所述数据组的第二时间戳;根据所述第二统计粒度对应的时间段与所述合并格式获取与所述第二统计粒度对应的第二数据;根据所述第二时间戳将所述第二数据插入Hbase中。本申请公开了一种基于Hbase数据库的数据统计方法与系统,根据接收到的数据的创建数据的存储格式,该存储格式中行键RowKey由统计粒度与数据的固定统计类型构成,列Column由可配的统计类型名称与统计值拼接构成,根据第一统计粒度与存储格式将数据存入Hbase,当用户指定的第二统计粒度与第一统计粒度不一致时,则根据第二统计粒度与存储格式确定合并格式,并根据合并格式对存入到Hbase中的数据进行合并统计,减少了数据统计过程中对具体的统计粒度与统计类型的依赖,并提高了数据统计结果的实时性。附图说明图1为本申请实施例提出的一种基于Hbase数据库的数据统计方法流程示意图;图2为本申请具体实施例提出的一种基于Hbase的原始数据统计方法的流程示意图;图3为本申请具体实施例中提出一种基于Hbase的合并统计方法的流程示意图;图4为本申请具体实施例中提出一种基于Hbase的数据统计系统的结构示意图。具体实施方式如
背景技术
:中所述,现有技术中基于Hbase数据库的数据统计过程中,首先需要将数据按照时间段存入临时表,再根据用户的需求存入Hbase,当需要进行更大统计粒度的数据统计时,需要重新进行建表,将上一张表的数据进行汇总再存入到对应的表中,流程需要重新开发,工作量大,将查询到的数据先存入临时表,再从临时表汇总到需要的报表,其实时性也不高,运行时对系统的开销过大。针对上述问题,本申请提出了一种数据统计方法及系统,用以简化数据统计过程中的步骤,减少数据统计过程中对具体的统计粒度与统计类型的依赖。本申请实施例提出了一种数据统计方法,在介绍本申请的技术方案之前,需要对本申请技术方案的原理进行说明,在本申请的实施例中,首先根据数据的内容及特征确定出待统计数据基于Hbase的存储格式,基于Hbase的存储结构由行键RowKey和列Column构成,在统计类型维度中,将统计粒度以及数据统计类型中的固定统计类型拼接在RowKey中,根据统计类型维度中可配的统计类型,将该统计类型拼接在Column中,首先基于数据自身最小统计粒度即第一统计粒度来存入Hbase,然后根据用户指定的统计粒度选择是否进行合并该基于第一粒度存入的数据,由此,在RowKey中可以实现统计粒度的变化选择,实现了简化数据统计过程中的步骤,减少数据统计过程中对具体的统计粒度与统计类型的依赖。如附图1所示,为本申请实施例提出的一种基于Hbase的数据统计方法流程示意图,该方法具体步骤如下:步骤101,创建接收到的数据的存储格式。当接收到一批数据时,对接收到的数据进行分组处理,一批数据的来源可以是任意方式,例如数据流spark-streaming中的随机rdd数据,也可以是设备(例如网络摄像机IPC、监控器等前端设备)缓存的一批数据,需要说明的是数据的来源以及内容并不会对本申请的保护范围产生影响。为了达到数据处理的实时性与统计粒度动态可变性,在接收到原始数据时,首先需要进行从原始数据的最小统计粒度的统计,将该统计结果存入Hbase中,再根据用户的需求进行相应的统计粒度的合并统计。其中,本申请的技术方案中首先需要确定数据统计过程中的最小统计粒度,为了便于描述,区分最小统计粒度与用户指定的统计粒度,在以下描述中统一以第一统计粒度(最小统计粒度)和第二统计粒度(用户指定的统计粒度)进行描述。以统计粒度为时间维度进行描述,在对上述类型的原始数据进行处理的过程中,首先根据需求确定默认的第一统计粒度,然后确定在向Hbase存入该数据时的存储格式,Hbase数据库的存储格式中包括行键RowKey与列Column,本申请实施例中的Hbase数据库的存储格式由以下几个元素构成:(1)固定统计类型在统计类型维度中,如果是固定的统计类型,则将该统计类型拼接在RowKey中,该固定统计类型个数不限,固定统计类型之间的相互关系为从属关系。在具体的应用场景中,以一批车辆的数据的关卡代码tollgate_code和车道号lane_index是固定的统计类型为例进行说明,那么将它们拼接在RowKey中,并且数据关系如表3所示:表3(2)可配置统计类型而对于统计类型维度中的可配置统计类型,则将该可配置统计类型拼接在Column中,拼接方式为该统计类型的名称与其值拼接在一起构成一个Column,多个值则构成多个Column,多个可配置的统计类型以此类推添加Column,Column之间是并列关系与RowKey中的统计类型时从属关系。在具体的应用场景中,同样以一批车辆的数据进行说明,如表4所示车辆类型vehicle_type是可配的统计类型,并且vehicle_type的值有1为小型车、2为中型车、3为大型车等,那么构成的Column有:vehicle_type\t1、vehicle_type\t2、vehicle_type\t3等动态增加。表4如表5所示,可配置类型再增加一个plate_color,那么它们的关系以及与RowKey中的统计类型的关系则可见表5:表5(3)时间维度在RowKey的最前面拼接上每个统计粒度的标记,代表着这条数据属于该统计粒度,当需要进行更大统计粒度的数据统计时,对较小的统计粒度的数据进行合并就可以获取到指定粒度的数据统计,实现统计粒度的动态可变性。在具体的应用场景中,以统计粒度为一小时为例进行说明,RowKey可设计为3600000+”\t”+tollgate_code+”\t”+lane_index,其中3600000为一小时对应的标记。(4)时间戳timestamp一批数据中会具有若干条数据,在具体的应用场景中,根据每个数据单元自身位于的时间段,该时间段为统计粒度对应的时间区间,例如以统计粒度为分,则时间段为分钟计算。将这批数据根据所在时间段进行分组,为了方便区分,在此可以将每组数据看做一个数据单元,为该时间段内的每个数据单元都添加时间戳。在本申请实施例中将时间戳分为两类,具体为:A)一类是从原始数据到最小统计粒度的合并;即从原始数据的最小统计粒度开始进行合并,以时间为例,一般分为秒、分、时、天、月等划分,其中最小统计粒度则为秒,从原始数据到最小统计粒度的统计,由于每批原始数据中数据单元不一定全部分布在单独统计粒度区间(即某一时间段)内,在后续的一批数据中也会出现该统计粒度区间内的数据单元,此时该数据单元的时间戳与之前存储的数据单元的时间戳相同,则会覆盖之前已经存储的数据单元,造成数据的流失,为防止该情况的发生,在本申请的优选实施例中,对Hbase中各时间段存入的数据单元依次加上序列号,该序列号会存在一个最大阈值的限制,同时也对同一时间段内不同数据单元进行了区分。以统计粒度为一分钟的数据统计为例进行说明,由于每批原始数据不一定都是分布在某一分钟内,也不可能是这一分钟内的所有数据,所以这一批数据根据时间分组后存入HBase时,只是用这分钟的时间作为时间戳timestamp的话,那么下一批数据如果也有这分钟的数据,就会覆盖掉上一批同一分钟的数据,造成统计结果不准确的问题。所以这种时间戳需要在已有的整分钟时间点后面加上序列数,从1到60000,不能超过60000,防止覆盖下一分钟的数据,用来区分不同批次的同一分钟数据。B)一类是时间维度上从小统计粒度到大统计粒度的合并统计。其中,合并统计的数据是针对上一级的统计粒度的数据,一次能够查询出所有需要的数据,例如,从小时到天的合并统计,需要查询一小时的数据,可以一次查询这一天的每小时的数据,然后将结果汇总成一条记录,即为天统计的这一天对应的记录,存入HBase,由于只有一条记录,所以只需用这天的起始时间作为时间戳timestamp即可。(5)value值数据的value值可以为分组后的数据单元或数据组的数量number,如果还需要统计数据中的某些字段的平均值,那么可以将这些字段的平均值计算出来拼接在number后面。比如:需要统计过车记录的平均速度,那么可以将分组后的每组所有记录的平均速度求出,拼接在记录总数后面,number+”\t”+average_speed。基于以上元素,在本申请的技术方案中,Hbase的存储格式包括RowKey、Column和value值,其中RowKey由数据的固定统计类型与第一统计粒度拼接而成,Column由可配置统计类型的名称和统计值拼接构成,value值包括数据统计结果的数量和某个统计字段(即统计类型对应的统计值)的平均值拼接构成,在具体的应用场景中,可以根据用户实际的需求来进行灵活的设置。步骤102,根据与第一统计粒度与存储格式将数据存入Hbase。基于上述步骤101中描述的存储格式的特征,本步骤中,基于确定的存储格式,然后进行数据的存入,将每个数据按照最小统计粒度划分为若干个数据单元,根据存储格式将数据单元依次存入Hbase中。在进行存储的过程中,由于数据单元为不同时间点发生点,可能会分布不均,需要对所有数据单元进行预换算,将转换成为与第一统计粒度对应的时间戳,存储进入同一时间段的Hbase的数据单元都具有相同的时间戳,该时间戳即为对应的时间段的最初始时间。另外,为了避免在分布不均的数据单元在存储过程中覆盖掉相同时间段内的其他数据单元,在数据的存储过程中为其添加序列号,同时可以设置统一时间段内最大存入数量阈值,当同一时间段内的序列号等于最大存入数量阈值时,禁止对该时间段再次存入相应的数据单元,当然基于实际的应用场景,也可以对同一时间段内数据单元的数量超过最大存入数量阈值外的数据单元,也可以进行其他的处理,该点非本申请实施例关注的方向,在此不做过多赘述。在具体的应用场景中,以原始数据的最小统计粒度为一分钟为例进行说明,在对该类型的数据进行处理的过程中,在确定第一存储数据格式之前,需要将每条数据的时间字段的时间的秒和毫秒置零,然后根据时间、固定统计类型和可配置统计类型进行分组,将每一组的数据整数型时间加上序列号构成是时间戳timestamp,将统计粒度和固定统计类型拼接构成RowKey,列Column由可配的统计类型名称与统计值拼接构成,以第一统计粒度为一分钟为例进行说明,用60000作为一分钟标记拼接,将可配置统计类型的名称和该类型对应的值拼接成Column,每个值对应一个Column,如果需要统计总数,还可以加一个“total”的Column,Column动态增加,将每一组数据的数量和需要计算的平均值拼接成value值,按照存储格式将数据存入Hbase中,完成第一统计粒度(一分钟)的数据统计。步骤103,当用户指定的第二统计粒度与第一统计粒度不一致时,则根据第二统计粒度与存储格式确定合并格式,并根据合并格式对存入到Hbase中的数据进行合并统计。此时根据用户下发的数据统计指令判断是否进一步进行数据的合并,判断依据为判断统计粒度是否大于第一统计粒度(即最小统计粒度),具体有以下两种情况:(1)第二统计粒度不大于第一统计粒度,则标志着第二统计粒度与第一统计粒度一致,此时则Hbase中存入的数据即为用户指定的第二统计粒度统计的数据;(2)第二统计粒度大于第一统计粒度,则需要对Hbase当前存入的数据进行统计粒度的进一步合并。仍以第一统计粒度为一分钟的数据为例,用户指定第二统计粒度为一小时,则在接收到一批数据时,首先以第一统计粒度进行数据的统计存入Hbase,然后根据第一统计粒度(一分钟)依次合并成第二统计粒度,并进行相应的第二统计粒度(小时)的数据存入。当然,在实际的应用场景中,上述的判断过程不必须存在的,在数据统计的过程中,可以优先进行基于最小粒度的数据统计,然后再进行基于用户需求的统计粒度的数据统计,但是某种情况下,用户的可能会有多个统计粒度的数据统计需求,基于此,就可能会用到上述的判断过程,然后进行逐级的数据合并即可。当用户指定的第二统计粒度大于第一统计粒度时,需要对基于第一统计粒度存入Hbase的数据进行合并统计,从配置的统计粒度从小到大依次做合并统计,每次统计操作都是查询上一次合并统计的结果,以统计类型为时间维度进行说明,从小时到天的合并统计,就是查询一天每个小时的统计数据,然后将各小时的数据合并。合并的过程之前,需要先确定基于第二统计粒度与第一存储文件的合并格式,该合并格式为将Hbase中原统计数据的第一统计粒度标志修改为第一统计粒度的下一级统计粒度(如统计粒度为分的下一级统计粒度为时)标志,Column不变,value值为查询出的数据的value值求和、或求平均值获取到第二value值,用第一统计粒度的下一级统计粒度的起始时间作为timestamp,然后再插入Hbase中,当本次统计粒度合并统计结束后,循环进行下一个统计粒度的合并统计,直至合并至用户指定的第二统计粒度。当完成上述的统计后,Hbase中保存了各个统计粒度的统计数据,同样以上述的统计粒度为时间维度为例,有以小时为单位的数据,有以天为单位的数据等,每份数据都是独立完整的统计结果。这个时候,如果用户需要查询一段时间的统计总数,做一个时间最大适配分割后,去查询对应统计粒度的数据,如果用户需要查询报表数据,比如查询一年内的月报,或者查询一月内的日报,就可以去查询对应统计粒度的数据,大大提高了用户查询数据的速度。通过应用本申请提出的一种基于Hbase数据库的数据统计方法与系统,根据接收到的数据的创建数据的存储格式,该存储格式中行键RowKey由统计粒度与数据的固定统计类型构成,列Column由可配的统计类型名称与统计值拼接构成,根据第一统计粒度与存储格式将数据存入Hbase,当用户指定的第二统计粒度与第一统计粒度不一致时,则根据第二统计粒度与存储格式确定合并格式,并根据合并格式对存入到Hbase中的数据进行合并统计,减少了数据统计过程中对具体的统计粒度与统计类型的依赖,并提高了数据统计结果的实时性。为了进一步阐述本发明的技术思想,现结合具体的应用场景,对本发明的技术方案进行说明,本申请具体实施例提出了一种数据统计方法,本申请具体实施例的应用场景以一批车辆收费站的数据为例,其中收费站代码tollgate_code和车道编码lane_index为上述实施例中的数据固定统计类型的几种,其中车辆类型vehicle_type以及颜色plate_color等为上述实施例中数据统计类型中的可配置统计类型,其中在本具体实施例中,统计粒度为时间维度,且设定第一统计粒度(即最小统计粒度)为分,由此可见,本具体实施例只是本申请方案的具体实施方式的一种,而不是全部的实施例。本具体实施例的数据统计方法的原理是先将车辆数据进行基于第一统计粒度(最小统计粒度)的数据统计,将车辆原始数据存入Hbase数据库中,然后再根据用户提出的第二统计粒度进行第一粒度对应的Hbase数据进行合并统计。具体的包括以下步骤:A,原始数据统计,基于最小统计粒度来进行数据统计;B,合并统计,基于最小统计粒度对应的Hbase中数据进行合并统计。现针对上述步骤A进行详细的说明,为了达到实时性的目的,首先需要做一次从原始数据到最小粒度的统计,在接收到一批车辆原始数据时,则进行基于第一统计粒度为分的原始数据统计,在此之前,需要先确定基于Hbase的数据存储格式。如图2所示,为本申请具体实施例提出的一种基于Hbase原始数据统计方法流程示意图,该方法具体步骤如下:S201,将每条数据的时间的秒和毫秒置零;具体的,针对一批数据中,存在着多条数据,(需要说明的是,该一批数据则相当于上述实施例中的数据,一批数据中的每条数据则相当于上述实施例中的数据单元)在接收到原始的过车数据时,该原始过车数据需要将每条数据的时间字段的时间的秒和毫秒置零。S202,创建原始数据的存储格式;根据时间、固定类型和可配置类型确定车辆原始数据的存储格式;具体的,a)统计粒度为一分钟,那么RowKey可设计为60000+”\t”+tollgate_code+”\t”+lane_index,其中60000为一分钟对应的标记;b)tollgate_code和lane_index是固定的统计类型,那么将它们拼接在RowKey中;c)vehicle_type是可配置的统计类型,并且vehicle_type的值有1为小型车、2为中型车、3为大型车等,那么构成的Column有:vehicle_type\t1、vehicle_type\t2、vehicle_type\t3等动态增加,plate_color与vehicle_type均为可配的统计类型,也拼接在Column中,在此不做赘述。D)时间戳为分钟整数,则由于每批原始数据不一定都是分布在某一分钟内,也不可能是这一分钟内的所有数据,所以这一批数据根据时间分组后存入HBase时,只是用这分钟的时间作为时间戳timestamp的话,那么下一批数据如果也有这分钟的数据,就会覆盖掉上一批同一分钟的数据,造成统计结果不准确的问题。所以这种时间戳需要在已有的整分钟时间点后面加上序列数,从1到60000,不能超过60000,防止覆盖下一分钟的数据。用来区分不同批次的同一分钟数据。具体的,本步骤的数据存储格式如下表6所示:表6上述表6中,period为第一统计粒度一分钟,table3下为Hbase中的RowKey,f下则为Column。S203,按照存储格式将车辆原始数据存入Hbase;具体的,在完成上述步骤后,将统计后的数据按照上述存储格式插入Hbase中,从而完成以一分钟为最小统计粒度的数据统计。以上主要对步骤A的原始数据统计进行了描述,在完成上述以一分钟为第一统计粒度的数据统计后,Hbase表中会存在统计粒度为一分钟的数据,如果用户需要一年的数据,去全部查询一分钟的数据,那速度会是相当的慢,所以,还需要对最小的统计粒度的进行合并统计,以下针对步骤B进行详细的描述。如图3所示,为本申请具体实施例提出的一种基于Hbase的合并统计方法的流程示意图,合并统计是在时间维度上根据配置的统计粒度从小到大将数据一层一层的汇总,那么,无论查询多长时间的统计数据,都能达到秒级响应速度,,本申请具体实施例中若第二统计粒度为天,原始数据中的第一统计粒度为分钟,则需要进行以分钟合并为小时,同样以小时合并为天然后插入到Hbase中。该方法具体步骤如下:S301,配置的统计粒度从小到大排序;S302,循环从小到大取统计粒度;具体的,从配置的统计粒度从小到大依次做合并统计,每次合并统计都需要查询上一次合并统计的结果,首先从分钟到小时的合并统计,就是查询出这一小时内每分钟的统计数据,然后从小时到天的合并统计。S303,确定基于当前统计粒度的合并格式;S304,根据合并格式对Hbase中存储的车辆数据进行合并统计;S305,判断是否是最后一个统计粒度;具体的,判断完成合并统计后的Hbase中数据的统计粒度是否为用户指定的第二统计粒度(天),若不是,则执行步骤S302,若是,则结束合并统计。以下针对上述步骤S304与步骤S304进行详细说明,以表5中的原始数据存储格式为基础进行说明,在数据的存储格式的基础上确定合并格式,其中查询一小时内每分钟的统计数据。然后将这些数据的RowKey中的粒度标志修改为本次的粒度标志(小时),Column不变,value值为查询出的数据的value值求和(一小时内车辆总数)、求平均值等,用本次粒度的起始时间作为时间戳timestamp,将相应的粒度标志等再次插入Hbase表中。本次粒度的合并统计结束,循环进行下一个粒度的合并统计。在完成上述步骤A和步骤B后,Hbase表中保存了各个统计粒度的统计数据,比如各小时与各天等统计粒度的数据,每份数据都是独立完整的统计结果,这个时候,如果用户需要查询一段时间的统计总数,不管这段时间是多么的长,一年还是几年,做一个时间最大适配分割后,去查询对应粒度的数据,记录数不会太多,汇总后能以秒级的速度返回结果;如果用户需要查询报表数据,比如查询一年内的月报,或者查询一月内的日报,就可以去查询对应统计粒度的数据,由于做了数据汇总,记录数有限,查询速度极快。通过应用本申请具体实施例提出的一种基于Hbase的数据统计方法,根据接收到的数据的创建数据的存储格式,该存储格式中行键RowKey由统计粒度与数据的固定统计类型构成,列Column由可配的统计类型名称与统计值拼接构成,根据第一统计粒度与存储格式将数据存入Hbase,当用户指定的第二统计粒度与第一统计粒度不一致时,则根据第二统计粒度与存储格式确定合并格式,并根据合并格式对存入到Hbase中的数据进行合并统计,减少了数据统计过程中对具体的统计粒度与统计类型的依赖,并提高了数据统计结果的实时性。基于与上述相同的技术思路,本申请实施例还提出了一种基于Hbase数据库的数据统计系统,如附图4所示为本申请实施例提出的一种基于Hbase的数据统计系统的结构示意图,所述系统包括:生成模块41,创建接收到的数据的存储格式,所述存储格式中行键RowKey由第一统计粒度与所述数据的固定统计类型拼接构成,所述存储格式中列Column由所述数据的可配置统计类型的名称和统计值拼接构成,其中,所述第一统计粒度为所述数据对应的最小统计粒度;存储模块42,根据所述第一统计粒度与所述存储格式将所述数据存入所述Hbase;合并模块43,当用户指定的第二统计粒度与所述第一统计粒度不一致时,则根据所述第二统计粒度与所述存储格式确定合并格式,并根据所述合并格式对存入到所述Hbase中的数据进行合并统计。优选的,还包括:所述存储格式还包括value值,所述value值包括所述数据统计结果的数量;确定所述数据中各数据单元所在的时间段,所述时间段与所述第一统计粒度对应;根据所述时间段为所述数据单元添加时间戳。优选的,所述存储模块41具体用于:根据所述数据单元的时间戳将所述数据单元按照所述时间戳存入所述Hbase中对应的时间段;对所述时间段存入的各数据单元依次添加序列号进行区分。优选的,所述合并格式具体为:将所述RowKey中的第一统计粒度修改为所述第二统计粒度,对所述value值进行累加和求平均值后获取第二value值。优选的,所述合并模块43具体用于:根据所述第二统计粒度对所述数据进行分组,将所述第二统计粒度对应的时间段的起始时间作为所述数据组的第二时间戳;根据所述第二统计粒度对应的时间段与所述合并格式获取与所述第二统计粒度对应的第二数据;根据所述第二时间戳将所述第二数据插入Hbase中。通过应用本申请提出的技术方案,根据接收到的数据的创建数据的存储格式,该存储格式中行键RowKey由统计粒度与数据的固定统计类型构成,列Column由可配的统计类型名称与统计值拼接构成,根据第一统计粒度与存储格式将数据存入Hbase,当用户指定的第二统计粒度与第一统计粒度不一致时,则根据第二统计粒度与存储格式确定合并格式,并根据合并格式对存入到Hbase中的数据进行合并统计,减少了数据统计过程中对具体的统计粒度与统计类型的依赖,并提高了数据统计结果的实时性。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本发明序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1