一种数据统计方法以及装置的制造方法

文档序号:10624847阅读:262来源:国知局
一种数据统计方法以及装置的制造方法
【专利摘要】本发明实施例公开了一种数据统计方法以及装置,其中方法包括:获取统计查询请求,在预设的维度索引表的列族中获取与所述统计查询请求所携带的查询维度值对应的目标维度值,并在所述维度索引表的行健中获取与所述目标维度值对应的第一目标行健值;在预设的指标数据存储表的行健中获取与所述第一目标行健值对应的第二目标行健值;将所述指标数据存储表的列族中与所述第二目标行健值对应的目标指标数据进行合并,以得到与所述统计查询请求对应的统计数据。采用本发明,可减少需要扫描的数据量,以提高对数据进行统计汇总的效率。
【专利说明】
-种数据统计方法从及装置
技术领域
[0001] 本发明设及计算机技术领域,尤其设及一种数据统计方法W及装置。
【背景技术】
[0002] 目前所设计的存储结构主要是扁平化的数据存储形式,即一条日志记录对应一 行,各个字段值分别存储在对应列中。对目前的存储结构所存储的数据进行统计汇总的过 程可W为:扫描每一行日志记录,并对满足条件的字段进行筛选,再将筛选出的字段所对应 的数据进行统计汇总。由于需要扫描所有的日志记录,所W当存储的日志记录过多时,会大 大增加需要扫描的数据量,降低了对数据进行统计汇总的效率。

【发明内容】

[0003] 本发明实施例提供一种数据统计方法W及装置,可减少需要扫描的数据量,W提 高对数据进行统计汇总的效率。
[0004] 为了解决上述技术问题,本发明第一方面提供了一种数据统计方法,包括:
[0005] 获取统计查询请求,在预设的维度索引表的列族中获取与所述统计查询请求所携 带的查询维度值对应的目标维度值,并在所述维度索引表的行健中获取与所述目标维度值 对应的第一目标行健值;
[0006] 在预设的指标数据存储表的行健中获取与所述第一目标行健值对应的第二目标 行健值;
[0007] 将所述指标数据存储表的列族中与所述第二目标行健值对应的目标指标数据进 行合并,W得到与所述统计查询请求对应的统计数据。
[0008] 本发明第二方面提供了一种数据统计装置,包括:
[0009] 第一获取模块,用于获取统计查询请求,在预设的维度索引表的列族中获取与所 述统计查询请求所携带的查询维度值对应的目标维度值,并在所述维度索引表的行健中获 取与所述目标维度值对应的第一目标行健值;
[0010] 第二获取模块,用于在预设的指标数据存储表的行健中获取与所述第一目标行健 值对应的第二目标行健值;
[0011] 合并模块,用于将所述指标数据存储表的列族中与所述第二目标行健值对应的目 标指标数据进行合并,W得到与所述统计查询请求对应的统计数据。
[0012] 本发明实施例通过在维度索引表中获取与统计查询请求所携带的查询维度值对 应的第一目标行健值,再在指标数据存储表中获取与第一目标行健值对应的第二目标行健 值,可W将指标数据存储表中与第二目标行健值对应的目标指标数据进行合并,W得到统 计数据。由于只需通过扫描维度索引表即可对指标数据存储表中的目标指标数据进行统计 汇总,即无需对所有日志记录都进行扫描,所W可W减少需要扫描的数据量,W提高对数据 进行统计汇总的效率。
【附图说明】
[0013] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可W 根据运些附图获得其他的附图。
[0014] 图1是本发明实施例提供的一种数据统计方法的流程示意图;
[0015] 图2是本发明实施例提供的另一种数据统计方法的流程示意图;
[0016] 图3是本发明实施例提供的一种数据更新方法的流程示意图;
[0017] 图4是本发明实施例提供的一种数据统计装置的结构示意图;
[0018] 图5是本发明实施例提供的另一种数据统计装置的结构示意图;
[0019] 图6是本发明实施例提供的一种第一获取模块的结构示意图;
[0020] 图7是本发明实施例提供的一种第二获取模块的结构示意图;
[0021] 图8是本发明实施例提供的一种合并模块的结构示意图;
[0022] 图9是本发明实施例提供的又一种数据统计装置的结构示意图。
【具体实施方式】
[0023] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0024] 请参见图1,是本发明实施例提供的一种数据统计方法的流程示意图,所述方法可 W包括:
[00巧]S101,获取统计查询请求,在预设的维度索引表的列族中获取与所述统计查询请 求所携带的查询维度值对应的目标维度值,并在所述维度索引表的行健中获取与所述目标 维度值对应的第一目标行健值;
[00%] 具体的,当数据统计装置接收到统计查询请求时,所述数据统计装置可W在预设 的维度索引表的列族中获取与所述统计查询请求所携带的查询维度值对应的目标维度值, 并在所述维度索引表的行健中获取与所述目标维度值对应的第一目标行健值。其中,所述 维度索引表是基于皿ase化adoop Dat油ase,化doop数据库)数据库所创建的,所述维度索 引表的列族包括至少一个维度列名,所述至少一个维度列名中各维度列名分别对应至少一 个维度值,所述维度索引表的行健包括至少一个第一行健值,所述至少一个第一行健值是 根据所述至少一个维度值计算得到的。所述维度索引表的具体结构可W参见如下表1 : [0027]
[0028] 表 1
[0029] 其中,表1中的dimensionl、…、dimensionM均为所述维度索引表的列族所包括 的维度列名,每个维度列名均对应至少一个维度值,如为dimensionl的维度列名对应的维 度值包括Bytes_l、Bytes_2、…、B}ftes_n ;表1中的各个维度值均为日志记录中需要选 择条件的字段,即在存储日志记录时将日志记录中需要选择条件的字段作为维度值W存储 到所述维度索引表中;表1中的第一行健值包括xxx_hashcode_l、xxx_hashcode_2、…、 xxx_hashcode_n,第一行健值中的hashcode_n为对维度值组合进行拼接后所计算出的哈 希值;第一行健值中的XXX为hashcode_n的尾Ξ位,由于皿ase中表是W字典序存储,所W 第一行健值中的XXX设计可使存储的数据分布更均匀,W提高写入和查询的并发度。其中 hashcode_n的具体计算方法可W为:
[0030] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . . +dim[M). hashCode0
[0031] 其中,dim山代表dimensionl运一列中的第n行的维度值,dim凹代表 dimensions运一列中的第η行的维度值,dim[M]代表dimensionM运一列中的第η行的维 度值。W xxx_hashcode_l为例,hashcode_l的值是由与xxx_hashcode_l同一行的各个维 度值进行拼接计算得到的。
[0032] W上述表1为例,若在表1中查找到Bytes_2与所述统计查询请求所携带的查询 维度值相同,则可W确定Bytes_2为目标维度值,再在表1的行健中获取Bytes_2对应的第 一目标行健值,所述第一目标行健值为xxx_hashcode_2。
[0033] S102,在预设的指标数据存储表的行健中获取与所述第一目标行健值对应的第二 目标行健值;
[0034] 具体的,在获取到所述第一目标行健值之后,所述数据统计装置可W在预设的指 标数据存储表的行健中获取与所述第一目标行健值对应的第二目标行健值。其中,所述指 标数据存储表是基于皿ase数据库所创建的,所述指标数据存储表的列族包括至少一个指 标列名,所述至少一个指标列名中各指标列名分别对应至少一个指标数据,所述指标数据 存储表的行健包括至少一个第二行健值,所述至少一个第二行健值是根据所述至少一个维 度值和时间值计算得到的,所述时间值是按照预设的时间粒度所划分的。所述指标数据存 储表的具体结构可W参见如下表2 :
[0035]
[0036] 表 2
[0037] 其中,表2中的列族所包括的指标列名包括:0000、0001、…、1023,每个指标列名 对应至少一个指标数据,如为"0000"的指标列名所对应的指标数据包括:SliceIndex_l、 Slicelndex_2、…、Slicelndex_n ;表2中的各个指标数据为日志记录中的用于进行统计 的数值,即在存储日志记录时将日志记录中的用于进行统计的数值作为指标数据W存储到 所述指标数据存储表,所述指标数据是W化rift结构序列化存储的,Thrift是一个软件框 架且用来进行可扩展且跨语言的服务的开发,所述指标数据可W包括全局计数指标、估计 用户数指标数组、计数指标、去重指标、合计指标、最大值指标、最小值指标W及平均值指标 等等。表 2 中的第二行健值包括 xxx_hashcode_l_time、xxx_hashcode_2_time、…、 hashcode_n_time,其中,xxx_hashcode_n的结构与计算方式与第一行健值相同,运里不再 进行寶述。第二行健值中的time为时间值,所述时间值是按照预设的时间粒度所划分的, 若时间粒度为1个小时,则time可W划分为:0000、0100、0200、…、2300 ;若时间粒度为15 分钟,则time可W划分为:0000、0015、0030、…、2345。例如,若W 1个小时为时间粒度,贝U 第二行健值可 W包括 xxx_hashcode_l_0100、xxx_hashcode_2_0200 等等。
[0038] 其中,所述统计查询请求还包括统计时间范围,在获取到第二目标行健值之前,需 要先根据所述统计时间范围W及预设的时间粒度枚举时间值,若所述统计时间范围为全 天且时间粒度为1个小时,则枚举得到的时间值包括0000、0100、0200、…、2300,再将获 取到的所述第一目标行健值与所枚举的各个时间值拼接;若所述第一目标行健值为 hashcode_2,则所述第一目标行健值与所枚举的各个时间值拼接后,可W得到待查询行健 值:xxx_hashcode_2_0000、xxx_hashcode_2_0100、???、xxx_hashcode_2_2300 ;再在所述指 标数据存储表中查找与多个待查询行健值中的任一个相同的第二行健值,并将查找出的第 二行健值确定为第二目标行健值。
[0039] S103,将所述指标数据存储表的列族中与所述第二目标行健值对应的目标指标数 据进行合并,W得到与所述统计查询请求对应的统计数据;
[0040] 具体的,在获取到所述第二目标行健值之后,所述数据统计装置可W先将所述指 标数据存储表的列族中与所述第二目标行健值对应的目标指标数据进行行合并,在行合并 时可w从上至下依次进行两两合并,直至行合并到剩下一行目标指标数据,再将行合并后 的目标指标数据进行列合并,在列合并时也可W依次进行两两合并,在列合并到剩下一列 时即可得到与所述统计查询请求对应的统计数据。
[0041] 本发明实施例通过在维度索引表中获取与统计查询请求所携带的查询维度值对 应的第一目标行健值,再在指标数据存储表中获取与第一目标行健值对应的第二目标行健 值,可W将指标数据存储表中与第二目标行健值对应的目标指标数据进行合并,W得到统 计数据。由于日志记录中的维度值和指标数据分别存储于维度索引表和指标数据存储表 中,且只需通过扫描维度索引表即可对指标数据存储表中的目标指标数据进行统计汇总, 即无需对所有日志记录都进行扫描,所W可W减少需要扫描的数据量,W提高对数据进行 统计汇总的效率。
[0042] 请参见图2,是本发明实施例提供的另一种数据统计方法的流程示意图,所述方法 可W包括:
[0043] S201,根据皿ase数据库预设维度索引表和指标数据存储表;
[0044] 具体的,数据统计装置可W根据皿ase数据库预设维度索引表和指标数据存储 表。将日志记录中需要选择条件的字段定义为维度值,并将日志记录中用于进行统计的数 值定义为指标数据。所述数据统计装置将维度值存储于所述维度索引表的列族中,将指标 数据存储于所述指标数据存储表的列族中。
[0045] 其中,所述维度索引表的列族包括至少一个维度列名,所述至少一个维度列名中 各维度列名分别对应至少一个维度值,所述维度索引表的行健包括至少一个第一行健值, 所述至少一个第一行健值是根据所述至少一个维度值计算得到的。所述指标数据存储表的 列族包括至少一个指标列名,所述至少一个指标列名中各指标列名分别对应至少一个指标 数据,所述指标数据存储表的行健包括至少一个第二行健值,所述至少一个第二行健值是 根据所述至少一个维度值和时间值计算得到的,所述时间值是按照预设的时间粒度所划分 的。
[0046] 所述维度索引表的具体结构可W参见图1对应实施例中的表1,表1中的 dimensionl、…、dimensionM均为所述维度索引表的列族所包括的维度列名,每个维度 列名均对应至少一个维度值,如为dimensionl的维度列名对应的维度值包括Bytes_l、 Bytes_2、…、Bytes_n;表1中的各个维度值均为日志记录中需要选择条件的字段,即在存 储日志记录时将日志记录中需要选择条件的字段作为维度值W存储到所述维度索引表中; 表 1 中的第一行健值包括 xxx_hashcode_l、xxx_hashcode_2、???、xxx_hashcode_n,第一行 健值中的hashcode_n为对维度值组合进行拼接后所计算出的哈希值;第一行健值中的XXX 为hashcode_n的尾Ξ化由于皿ase中表是W字典序存储,所W第一行健值中的XXX设计 可使存储的数据分布更均匀,W提高写入和查询的并发度。其中hashcode_n的具体计算方 法可W为:
[0047] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . .+dim[M]). hashCode0 |;0048] 其中,dim山代表dimensionl运一列中的第n行的维度值,dim凹代表 dimensions运一列中的第η行的维度值,dim[M]代表dimensionM运一列中的第η行的维 度值。W xxx_hashcode_l为例,hashcode_l的值是由与xxx_hashcode_l同一行的各个维 度值进行拼接计算得到的。
[0049] 所述指标数据存储表的具体结构可W参见图1对应实施例中的表2,表2中的列族 所包括的指标列名包括:0000、0001、…、1023,每个指标列名对应至少一个指标数据,如为 "0000"的指标列名所对应的指标数据包括:S1 iceIndex_l、SliceIndex_2、…、SliceIndex_ n ;表2中的各个指标数据为日志记录中的用于进行统计的数值,即在存储日志记录时将日 志记录中的用于进行统计的数值作为指标数据W存储到所述指标数据存储表,所述指标数 据是W化rift结构序列化存储的,所述指标数据可W包括用户数、次数、去重值、计数值、 合计值、最大值、最小值、平均值等等。表2中的第二行健值包括xxx_hashcode_l_time、 xxx_hashcode_2_time、…、xxx_hashcode_n_time,其中,xxx_hashcode_n 的结构与计算 方式与第一行健值相同,运里不再进行寶述。第二行健值中的time为时间值,所述时间 值是按照预设的时间粒度所划分的,若时间粒度为1个小时,则time可W划分为:0000、 0100、0200、…、2300 ;若时间粒度为15分钟,则time可W划分为:0000、0015、0030、…、 2345。例如,若W 1个小时为时间粒度,则第二行健值可W包括xxx_hashcode_l_0100、xxx_ hashcode_2_0200 等等。
[0050] S202,获取统计查询请求,所述统计查询请求携带有查询维度值;
[0051] 具体的,当所述数据统计装置接收到统计查询请求时,可W获取所述统计查询请 求所携带的查询维度值。
[0052] S203,在所述维度索引表中的所述至少一个维度值中获取与所述查询维度值对应 的维度值,并将与所述查询维度值对应的维度值确定为目标维度值;
[0053] 具体的,所述数据统计装置获取到查询维度值之后,可W在所述维度索引表中的 所述至少一个维度值中获取与所述查询维度值对应的维度值,并将与所述查询维度值对应 的维度值确定为目标维度值。W上述图1对应实施例中的表1为例,查询维度值包括维度 值A和维度值B,若在表1的列族中查找到与维度值A相同的维度值为Bytes_l,与维度值 B相同的维度值为Bytes_2,则将Bytes_l和Bytes_2确定为目标维度值。
[0054] S204,在所述维度索引表中的所述至少一个第一行健值中获取与所述目标维度值 对应的第一行健值,并将与所述目标维度值对应的第一行健值确定为第一目标行健值;
[0055] 具体的,所述数据统计装置确定出目标维度值之后,可W在所述维度索引表中的 所述至少一个第一行健值中获取与所述目标维度值对应的第一行健值,并将与所述目标 维度值对应的第一行健值确定为第一目标行健值。再W上述表1为例,若确定出的目标 维度值为Bytes_l和Bytes_2,则可W在表1的行健中获取到与的tes_l对应的第一行 健值为 xxx_hashcode_l,W及 Bytes_2 对应的第一行健值为 xxx_hashcode_2,并将 hashcode_l和xxx_hashcode_2确定为第一目标行健值。
[0056] S205,根据所述时间粒度和所述统计查询请求所携带的统计时间范围,生成在所 述统计时间范围内的至少一个目标时间值;
[0057] 具体的,所述统计查询请求还包括统计时间范围。所述数据统计装置确定出第一 目标行健值之后,可W根据所述时间粒度和所述统计查询请求所携带的统计时间范围,生 成在所述统计时间范围内的至少一个目标时间值。例如,若统计时间范围为全天,且预设的 时间粒度为1个小时,则所生成的目标时间值包括0000、0100、0200、…、2300,即0 :00到 23 :00的时间值。
[005引 S206,将所述至少一个目标时间值中各目标时间值分别与所述第一目标行健值进 行拼接,w得到待查询行健值;
[0059] 具体的,所述数据统计装置生成至少一个目标时间值之后,可W将所述至少一 个目标时间值中各目标时间值分别与所述第一目标行健值进行拼接,W得到待查询行健 值。例如,若所述统计时间范围为全天且时间粒度为1个小时,且所述第一目标行健值为 xxx_hashcode_2,则所述至少一个目标时间值包括0000、0100、0200、…、2300,再将 hashcode_2分别与所述至少一个目标时间值中各目标时间值进行拼接,可W得到待查询 行健值,所述待查询行健值包括:xxx_hashcode_2_0000、xxx_hashcode_2_0100、…、 hashcode_2_2300〇
[0060] S207,在所述指标数据存储表中的所述至少一个第二行健值中获取与所述待查询 行健值对应的第二行健值,并将与所述待查询行健值对应的第二行健值确定为第二目标行 健值;
[0061] 具体的,所述数据统计装置得到待查询行健值之后,可W在所述指标数据存储 表中的所述至少一个第二行健值中获取与所述待查询行健值对应的第二行健值,并将与 所述待查询行健值对应的第二行健值确定为第二目标行健值。例如,所述待查询行健值 包括:xxx_hashcode_2_0000、xxx_hashcode_2_0100、…、xxx_hashcode_2_2300,在所述 指标数据存储表中查找是否存在与所述待查询行健值相同的第二行健值,若在所述指标 数据存储表中查找到与所述待查询行健值相同的第二行健值包括xxx_hashcode_2_0000 和xxx_hashcode_2_0100,则将所述指标数据存储表中的xxx_hashcode_2_0000和 hashcode_2_0100确定为第二目标行健值。
[0062] S208,在所述指标数据存储表中的所述至少一个指标数据中获取与所述第二目标 行健值对应的指标数据,并将与所述第二目标行健值对应的指标数据确定为目标指标数 据;
[0063] 具体的,所述数据统计装置确定出第二目标行健值之后,可W在所述指标数据存 储表中的所述至少一个指标数据中获取与所述第二目标行健值对应的指标数据,并将与所 述第二目标行健值对应的指标数据确定为目标指标数据。W上述图1对应实施例中的表2 为例,若所述第二目标行健值包括:xxx_hashcode_l_time和xxx_hashcode_2_time,则与 xxx_hashcode_l_time同一行的各列指标数据均为目标指标数据,且与xxx_hashcode_2_ time同一行的各列指标数据也均为目标指标数据。
[0064] S209,将所述目标指标数据进行行合并,并将行合并后的目标指标数据进行列合 并,W得到与所述统计查询请求对应的统计数据; 阳0化]具体的,所述数据统计装置确定出目标指标数据之后,可W先将所述目标指标 数据进行行合并,在行合并时可W从上至下分别对每列的目标指标数据依次进行两两合 并,直至行合并到剩下一行目标指标数据。再请参见上述图1对应实施例中的表2, W Slicelndex_l 和 Slicelndex_2 进行行合并为例,若 Slicelndex_l 和 Slicelndex_2 均包括 全局计数指标、估计用户数指标数组、计数指标、去重指标、合计指标、最大值指标、最小值 指标W及平均值指标,则对Slicelndex_l和Slicelndex_2进行行合并的具体过程包括:
[0066] 全局计数指标的合并:slicelndexl. countTotal+sliceIndex2. countTotal ;
[0067] 估计用户数指标数组的合并:
[0068]
[0069] 计数指标的合并:sliceindexl. countIndex+sliceIndex2. countindex ;
[0070] 去重指标的合并:sliceindexl. distincts. addAll (slicelndex2. distincts) (集合合并);
[0071] 合计指标的合并:sliceindexl. sum+slicelndex2. sum ;
[0072] 最小值指标的合并:Min (sliceindexl. min, slicelndex2. min);
[0073] 最小值指标的合并:Max (sliceindexl. max, slicelndex2. max);
[0074] 平均值指标的合并:
[0075] (sliceindexl. avg*slicelndexl. countIndexl+sliceIndex2. avg*slicelndex2. countIndex2)/(sliceindexl. countIndexl+sliceIndex2. countIndex2)〇
[0076] 其中,对行合并后的目标指标数据进行列合并的过程与行合并的过程类似,即在 列合并时可W对各列中行合并后的目标指标数据依次进行两两合并,直至列合并到剩下一 个总的目标指标数据,所述总的目标指标数据即为与所述统计查询请求对应的统计数据。 其中,列合并和行合并不一样的地方仅在于对估计用户数指标数组的合并,在列合并之前 需要先根据各列中行合并后的估计用户数指标数组运个变量计算出一个用户数数值,再在 列合并时直接累加各列计算出的用户数数值即可统计出某种维度条件下查询的估计用户 数运个指标值的总量,对于其他指标的列合并的过程与行合并的过程相同。其中,根据估计 用户数指标数组运个变量计算出一个用户数数值的具体过程可W为:
[0077] reg=0, zero=0, τη-63536 fbr i:::: 0 to 食3
[0078]
阳ο巧]其中,userCount为计算出的用户数数值。
[0080] 本发明实施例通过在维度索引表中获取与统计查询请求所携带的查询维度值对 应的第一目标行健值,再在指标数据存储表中获取与第一目标行健值对应的第二目标行健 值,可W将指标数据存储表中与第二目标行健值对应的目标指标数据进行合并,W得到统 计数据。由于日志记录中的维度值和指标数据分别存储于维度索引表和指标数据存储表 中,且只需通过扫描维度索引表即可对指标数据存储表中的目标指标数据进行统计汇总, 即无需对所有日志记录都进行扫描,所W可W减少需要扫描的数据量,W提高对数据进行 统计汇总的效率。
[0081] 请参见图3,是本发明实施例提供的一种数据更新方法的流程示意图,所述方法可 W包括:
[0082] S301,当获取到日志记录信息时,提取所述日志记录信息中的日志指标数据、日志 维度值、时间信息W及关键字段;
[0083] 具体的,在S301步骤之前,先预设维度索引表和指标数据存储表,预设维度索引 表和指标数据存储表的具体实现方式可W参见上述图2对应实施例中的S201,运里不再进 行寶述。S301步骤可W在上述图1对应实施例中的S101-S103步骤中的任一时刻执行,或 可W在上述图2对应实施例中的S202-S209步骤中的任一时刻执行。
[0084] 当所述数据统计装置获取到日志记录信息时,可W提取所述日志记录信息中的日 志指标数据、日志维度值、时间信息W及关键字段。其中,所述日志指标数据可W包括全局 计数指标、估计用户数指标数组、计数指标、去重指标、合计指标、最大值指标、最小值指标 W及平均值指标中的至少一种。所述时间信息为生成所述日志记录信息的时间点。
[00化]S302,根据所述日志维度值生成第一待更新行健值,并根据所述日志维度值对所 述维度索引表中与所述第一待更新行健值对应的各个维度值进行更新;
[0086] 具体的,所述数据统计装置提取出日志指标数据、日志维度值、时间信息W及关 键字段之后,可W将所述日志维度值放入dim数组,计算出该dim数组拼接的hashcode_ n,W得到对应的第一待更新行健值xxx_hashcode_n,XXX为hashcode_n的尾Ξ位,所述 hashcode_n的具体计算方法可W为:
[0087] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . .+dim[M]). hashCode0 ;
[00蝴 W上述图1对应实施例中的表1为例,hashcode_n的计算公式中的dim[l]代表 dimensionl运一列中的第η行的维度值,dim[2]代表dimensions运一列中的第η行的维 度值,dim[M]代表dimensionM运一列中的第η行的维度值。再W xxx_hashcode_l为例, hashcode_l的值是由与xxx_hashcode_l同一行的各个维度值进行拼接计算得到的。若所 生成的第一待更新行健值为xxx_hashcode_l,则将各个日志维度值分别写入表1中与 hashcode_l同一行的各个维度值中,W完成对与所述第一待更新行健值对应的各个维度 值进行更新的操作,其中,由于各个日志维度值与xxx_hashcode_l同一行的各个维度值相 同,所W写入各个日志维度值的过程即为对与xxx_hashcode_l同一行的各个维度值进行 再次覆盖,或者,也可W无需对与xxx_hashcode_l同一行的各个维度值进行更新操作。
[0089] 可选地,若无法在所述维度索引表中查找到所述第一待更新行健值,则可W在所 述维度索引表中新增一行,W将所述第一待更新行健值W及各个日志维度值写入新增的行 中。
[0090] S303,根据所述日志维度值和所述时间信息生成第二待更新行健值,并根据所述 关键字段生成待更新指标列名,并根据所述日志指标数据对所述指标数据存储表中与所述 第二待更新行健值和所述待更新指标列名对应的指标数据进行更新;
[0091] 具体的,S303步骤可W和S302步骤同步进行。所述数据统计装置可W根据所述 日志维度值生成xxx_hashcode_n,再根据时间信息W及预设的时间粒度生成time,将 hashcode_n与time进行拼接即可得到第二待更新行健值xxx_hashcode_n_time。再根 据所述关键字段生成待更新指标列名,生成待更新指标列名的具体过程为:计算所述关键 字段的murmur哈希值(64为整型值),向右移位48位后除W 64即可得到待更新指标列 名(0000~1023),即计算待更新指标列名的方法为:(mu;rmu;rhash(key)〉〉48)/64。在生 成第二待更新行健值和待更新指标列名之后,可W根据所述日志指标数据对所述指标数据 存储表中与所述第二待更新行健值和所述待更新指标列名对应的指标数据进行更新。W 上述图1对应实施例中的表2为例,若所述第二待更新行健值为xxx_hashcode_l_time, 所述待更新指标列名为0000,则可W根据所述日志指标数据对Slicelndex_l进行更新; 其中,对Slicelndex_l进行更新的过程可W包括:对全局计数指标countTotal的更新: countTotal+1 ; 阳092] 对估计用户数指标数组buckets的更新:
[0093] P = (murmurhash 化巧)〉〉48) % 64
[0094] zeroNum = (murmurhash(key)?l6)的前导零个数
[0095] if (buckets, get(p)<zeroNum)then bucket, set (p, zeroNum); 阳096] 若更新的指标为计数指标的第i个:countindex. get(i)+l ;
[0097] 若更新的指标为去重指标的第i个:distincts. get (i). set (V); 阳09引若更新的指标为合计指标的第i个:sum. get (i) +v ;
[0099] 若更新的指标为最小值指标的第i个:Min (min. get (i), V); 阳100] 若更新的指标为最大值指标的第i个:Max (max. get (i),V); 阳101] 若更新的指标为平均值指标的第i个:(avg. get(;〇*(countTotal. get(i) -1) +v) /countTotal. get(i)。
[0102] 可选地,若无法在所述指标数据存储表中查找到第二待更新行健值,则可W在所 述指标数据存储表中新增一行,W将所述第二待更新行健值写入新增的行中,并在该新增 的行中且与所述待更新指标列名对应的位置处写入所述日志指标数据。
[0103] 本发明实施例通过提取所述日志记录信息中的日志指标数据、日志维度值、时间 信息W及关键字段,可W对维度索引表中对应的维度值进行更新并对指标数据存储表中对 应的指标数据进行更新,由于写入日志记录信息时可W只更新相应位置的维度值和指标数 据,即可W避免每写入一条日志记录信息就要增加一条行数,所W有效减少了存储开销;同 时,通过更新维度值和指标数据的方式来写入日志记录信息,也可W在统计查询时降低所 需扫描的数据量,W进一步提高对数据进行统计汇总的效率。 阳104] 请参见图4,是本发明实施例提供的一种数据统计装置的结构示意图,所述数据统 计装置1可W包括:第一获取模块10、第二获取模块20、合并模块30 ;
[01化]所述第一获取模块10,用于获取统计查询请求,在预设的维度索引表的列族中获 取与所述统计查询请求所携带的查询维度值对应的目标维度值,并在所述维度索引表的行 健中获取与所述目标维度值对应的第一目标行健值;
[0106] 具体的,当数据统计装置1接收到统计查询请求时,所述第一获取模块10可W在 预设的维度索引表的列族中获取与所述统计查询请求所携带的查询维度值对应的目标维 度值,并在所述维度索引表的行健中获取与所述目标维度值对应的第一目标行健值。其中, 所述维度索引表是基于皿ase数据库所创建的,所述维度索引表的列族包括至少一个维度 列名,所述至少一个维度列名中各维度列名分别对应至少一个维度值,所述维度索引表的 行健包括至少一个第一行健值,所述至少一个第一行健值是根据所述至少一个维度值计算 得到的。再请参见上述图1对应实施例中的表1,表1为所述维度索引表的具体结构,表1 中的dimensionl、…、dimensionM均为所述维度索引表的列族所包括的维度列名,每个维 度列名均对应至少一个维度值,如为dimensionl的维度列名对应的维度值包括Bytes_l、 Bytes_2、…、Bytes_n;表1中的各个维度值均为日志记录中需要选择条件的字段,即在存 储日志记录时将日志记录中需要选择条件的字段作为维度值W存储到所述维度索引表中; 表 1 中的第一行健值包括 xxx_hashcode_l、xxx_hashcode_2、???、xxx_hashcode_n,第一行 健值中的hashcode_n为对维度值组合进行拼接后所计算出的哈希值;第一行健值中的XXX 为hashcode_n的尾Ξ化由于皿ase中表是W字典序存储,所W第一行健值中的XXX设计 可使存储的数据分布更均匀,W提高写入和查询的并发度。其中hashcode_n的具体计算方 法可W为: 阳 107] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . . +dim[M]). hashCode0
[0108] 其中,dim[l]代表dimensionl运一列中的第η行的维度值,dim凹代表 dimensions运一列中的第η行的维度值,dim[M]代表dimensionM运一列中的第η行的维 度值。W xxx_hashcode_l为例,hashcode_l的值是由与xxx_hashcode_l同一行的各个维 度值进行拼接计算得到的。
[0109] W上述表1为例,若在表1中查找到Bytes_2与所述统计查询请求所携带的查询 维度值相同,则所述第一获取模块10可W确定Bytes_2为目标维度值,所述第一获取模块 10再在表1的行健中获取Bytes_2对应的第一目标行健值,所述第一目标行健值为 hashcode_2〇
[0110] 所述第二获取模块20,用于在预设的指标数据存储表的行健中获取与所述第一目 标行健值对应的第二目标行健值; 阳111] 具体的,在所述第一获取模块10获取到所述第一目标行健值之后,所述第二获取 模块20可W在预设的指标数据存储表的行健中获取与所述第一目标行健值对应的第二目 标行健值。其中,所述指标数据存储表是基于皿ase数据库所创建的,所述指标数据存储表 的列族包括至少一个指标列名,所述至少一个指标列名中各指标列名分别对应至少一个指 标数据,所述指标数据存储表的行健包括至少一个第二行健值,所述至少一个第二行健值 是根据所述至少一个维度值和时间值计算得到的,所述时间值是按照预设的时间粒度所划 分的。所述指标数据存储表的具体结构可W参见上述图1对应实施例中的表2,其中,表2 中的列族所包括的指标列名包括:〇〇〇〇、〇〇〇1、…、1023,每个指标列名对应至少一个指标 数据,如为"0000"的指标列名所对应的指标数据包括:SliceIndex_l、Slicelndex_2、…、 Slicelndex_n ;表2中的各个指标数据为日志记录中的用于进行统计的数值,即在存储日 志记录时将日志记录中的用于进行统计的数值作为指标数据W存储到所述指标数据存储 表,所述指标数据是W化rift结构序列化存储的,Thrift是一个软件框架且用来进行可扩 展且跨语言的服务的开发,所述指标数据可W包括全局计数指标、估计用户数指标数组、计 数指标、去重指标、合计指标、最大值指标、最小值指标W及平均值指标等等。表2中的第二 行健值包括 xxx_hashcode_l_time、xxx_hashcode_2_time、…、xxx_hashcode_n_time,其 中,xxx_hashcode_n的结构与计算方式与第一行健值相同,运里不再进行寶述。第二行健 值中的time为时间值,所述时间值是按照预设的时间粒度所划分的,若时间粒度为1个小 时,则time可W划分为:0000、0100、0200、…、2300;若时间粒度为15分钟,则time可W划 分为:0000、0015、0030、…、2345。例如,若W 1个小时为时间粒度,则第二行健值可W包括 xxx_hashcode_l_0100、xxx_hashcode_2_0200 等等。
[0112] 其中,所述统计查询请求还包括统计时间范围,所述第二获取模块20在获取到第 二目标行健值之前,需要先根据所述统计时间范围W及预设的时间粒度枚举时间值,若所 述统计时间范围为全天且时间粒度为1个小时,则所述第二获取模块20枚举得到的时间值 包括0000、0100、0200、,-、2300,再将获取到的所述第一目标行健值与所枚举的各个时间值 拼接;若所述第一目标行健值为xxx_hashcode_2,则所述第二获取模块20所述第一目标行 健值与所枚举的各个时间值拼接后,可W得到待查询行健值:xxx_hashcode_2_0000、 hashcode_2_0100、…、xxx_hashcode_2_2300 ;所述第二获取模块20再在所述指标数据存 储表中查找与多个待查询行健值中的任一个相同的第二行健值,并将查找出的第二行健值 确定为第二目标行健值。
[0113] 所述合并模块30,用于将所述指标数据存储表的列族中与所述第二目标行健值对 应的目标指标数据进行合并,W得到与所述统计查询请求对应的统计数据;
[0114] 具体的,在所述第二获取模块20获取到所述第二目标行健值之后,所述合并模块 30可W先将所述指标数据存储表的列族中与所述第二目标行健值对应的目标指标数据进 行行合并,在行合并时可W从上至下依次进行两两合并,直至行合并到剩下一行目标指标 数据,再将行合并后的目标指标数据进行列合并,在列合并时也可W依次进行两两合并,在 列合并到剩下一列时即可得到与所述统计查询请求对应的统计数据。
[0115] 本发明实施例通过在维度索引表中获取与统计查询请求所携带的查询维度值对 应的第一目标行健值,再在指标数据存储表中获取与第一目标行健值对应的第二目标行健 值,可W将指标数据存储表中与第二目标行健值对应的目标指标数据进行合并,W得到统 计数据。由于日志记录中的维度值和指标数据分别存储于维度索引表和指标数据存储表 中,且只需通过扫描维度索引表即可对指标数据存储表中的目标指标数据进行统计汇总, 即无需对所有日志记录都进行扫描,所W可W减少需要扫描的数据量,W提高对数据进行 统计汇总的效率。
[0116] 再请参见图5,是本发明实施例提供的另一种数据统计装置的结构示意图,所述数 据统计装置1可W包括上述图4对应实施例中的第一获取模块10、第二获取模块20、合并 模块30,进一步的,所述数据统计装置1还可W包括:预设模块40、信息提取模块50、第一 更新模块60、第二更新模块70 ;
[0117] 所述预设模块40,用于根据皿ase数据库预设维度索引表和指标数据存储表;
[0118] 具体的,所述预设模块40可W根据皿ase数据库预设维度索引表和指标数据存储 表。将日志记录中需要选择条件的字段定义为维度值,并将日志记录中用于进行统计的数 值定义为指标数据。所述数据统计装置1将维度值存储于所述维度索引表的列族中,将指 标数据存储于所述指标数据存储表的列族中。
[0119] 其中,所述维度索引表的列族包括至少一个维度列名,所述至少一个维度列名中 各维度列名分别对应至少一个维度值,所述维度索引表的行健包括至少一个第一行健值, 所述至少一个第一行健值是根据所述至少一个维度值计算得到的。所述指标数据存储表的 列族包括至少一个指标列名,所述至少一个指标列名中各指标列名分别对应至少一个指标 数据,所述指标数据存储表的行健包括至少一个第二行健值,所述至少一个第二行健值是 根据所述至少一个维度值和时间值计算得到的,所述时间值是按照预设的时间粒度所划分 的。
[0120] 所述维度索引表的具体结构可W参见图1对应实施例中的表1,表1中的 dimensionl、…、dimensionM均为所述维度索引表的列族所包括的维度列名,每个维度 列名均对应至少一个维度值,如为dimensionl的维度列名对应的维度值包括Bytes_l、 Bytes_2、…、Bytes_n;表1中的各个维度值均为日志记录中需要选择条件的字段,即在存 储日志记录时将日志记录中需要选择条件的字段作为维度值W存储到所述维度索引表中; 表 1 中的第一行健值包括 xxx_hashcode_l、xxx_hashcode_2、???、xxx_hashcode_n,第一行 健值中的hashcode_n为对维度值组合进行拼接后所计算出的哈希值;第一行健值中的XXX 为hashcode_n的尾Ξ化由于皿ase中表是W字典序存储,所W第一行健值中的XXX设计 可使存储的数据分布更均匀,W提高写入和查询的并发度。其中hashcode_n的具体计算方 法可W为: 阳 121] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . .+dim[M]). hashCode0 阳12引其中,dim[l]代表dimensionl运一列中的第η行的维度值,dim凹代表 dimensions运一列中的第η行的维度值,dim[M]代表dimensionM运一列中的第η行的维 度值。W xxx_hashcode_l为例,hashcode_l的值是由与xxx_hashcode_l同一行的各个维 度值进行拼接计算得到的。 阳123] 所述指标数据存储表的具体结构可W参见图1对应实施例中的表2,表2中的列族 所包括的指标列名包括:0000、0001、…、1023,每个指标列名对应至少一个指标数据,如为 "0000"的指标列名所对应的指标数据包括:SliceIndex_l、SliceIndex_2、…、SliceIndex_ η ;表2中的各个指标数据为日志记录中的用于进行统计的数值,即在存储日志记录时将日 志记录中的用于进行统计的数值作为指标数据W存储到所述指标数据存储表,所述指标数 据是W化rift结构序列化存储的,所述指标数据可W包括用户数、次数、去重值、计数值、 合计值、最大值、最小值、平均值等等。表2中的第二行健值包括xxx_hashcode_l_time、 xxx_hashcode_2_time、…、xxx_hashcode_n_time,其中,xxx_hashcode_n 的结构与计算 方式与第一行健值相同,运里不再进行寶述。第二行健值中的time为时间值,所述时间 值是按照预设的时间粒度所划分的,若时间粒度为1个小时,则time可W划分为:0000、 0100、0200、…、2300 ;若时间粒度为15分钟,则time可W划分为:0000、0015、0030、…、 2345。例如,若W 1个小时为时间粒度,则第二行健值可W包括xxx_hashcode_l_0100、xxx_ hashcode_2_0200 等等。
[0124] 所述信息提取模块50,用于当获取到日志记录信息时,提取所述日志记录信息中 的日志指标数据、日志维度值、时间信息W及关键字段;
[01巧]具体的,当所述信息提取模块50获取到日志记录信息时,所述信息提取模块50可 W提取所述日志记录信息中的日志指标数据、日志维度值、时间信息W及关键字段。其中, 所述日志指标数据可W包括全局计数指标、估计用户数指标数组、计数指标、去重指标、合 计指标、最大值指标、最小值指标W及平均值指标中的至少一种。所述时间信息为生成所述 日志记录信息的时间点。
[01%] 所述第一更新模块60,用于根据所述日志维度值生成第一待更新行健值,并根据 所述日志维度值对所述维度索引表中与所述第一待更新行健值对应的各个维度值进行更 新;
[0127] 具体的,所述信息提取模块50提取出日志指标数据、日志维度值、时间信息W 及关键字段之后,所述第一更新模块60可W将所述日志维度值放入dim数组,计算出该 dim数组拼接的hashcode_n,W得到对应的第一待更新行健值xxx_hashcode_n,xxx为 hashcode_n的尾Ξ位,所述hashcode_n的具体计算方法可W为:
[0128] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . .+dim[M]). hashCode0 ;
[0129] W上述图1对应实施例中的表1为例,hashcode_n的计算公式中的dim[l]代表 dimensionl运一列中的第η行的维度值,dim[2]代表dimensions运一列中的第η行的维 度值,dim[M]代表dimensionM运一列中的第η行的维度值。若所述第一更新模块60所生 成的第一待更新行健值为xxx_hashcode_l,则所述第一更新模块60将各个日志维度值分 别写入表1中与xxx_hashcode_l同一行的各个维度值中,W完成对与所述第一待更新行健 值对应的各个维度值进行更新的操作,其中,由于各个日志维度值与xxx_hashcode_l同一 行的各个维度值相同,所W写入各个日志维度值的过程即为对与xxx_hashcode_l同一行 的各个维度值进行再次覆盖,或者,也可W无需对与xxx_hashcode_l同一行的各个维度值 进行更新操作。
[0130] 可选地,若无法在所述维度索引表中查找到所述第一待更新行健值,则所述第一 更新模块60可W在所述维度索引表中新增一行,W将所述第一待更新行健值W及各个日 志维度值写入新增的行中。 阳131] 所述第二更新模块70,用于根据所述日志维度值和所述时间信息生成第二待更 新行健值,并根据所述关键字段生成待更新指标列名,并根据所述日志指标数据对所述指 标数据存储表中与所述第二待更新行健值和所述待更新指标列名对应的指标数据进行更 新; 阳132] 具体的,所述第二更新模块70可W根据所述日志维度值生成xxx_hashcode_n,再 根据时间信息W及预设的时间粒度生成time,将xxx_hashcode_n与time进行拼接即可得 到第二待更新行健值xxx_hashcode_n_time。所述第二更新模块70再根据所述关键字段 生成待更新指标列名,生成待更新指标列名的具体过程为:计算所述关键字段的murmur哈 希值(64为整型值),向右移位48位后除W 64即可得到待更新指标列名(0000~1023), 即计算待更新指标列名的方法为:(mu;rmu;rhash(key)〉〉48)/64。在生成第二待更新行健 值和待更新指标列名之后,所述第二更新模块70可W根据所述日志指标数据对所述指标 数据存储表中与所述第二待更新行健值和所述待更新指标列名对应的指标数据进行更 新。W上述图1对应实施例中的表2为例,若所述第二待更新行健值为xxx_hashcode_l_ time,所述待更新指标列名为0000,则所述第二更新模块70可W根据所述日志指标数据对 Slicelndex_l进行更新;其中,对Slicelndex_l进行更新的过程可W包括:
[0133] 对全局计数指标countTotal的更新:countTotal+l ;
[0134] 对估计用户数指标数组buckets的更新:
[0135] P = (murmurhash 化ey)〉〉48) % 64
[0136] zeroNum = (murmurhash (key) <<16)的前导零个数
[0137] if (buckets, get (p) <zeroNum) then bucket, set (p, zeroNum);
[0138] 若更新的指标为计数指标的第i个:countindex. get(i)+l ; 阳139] 若更新的指标为去重指标的第i个:distincts. get(i). set(v);
[0140] 若更新的指标为合计指标的第i个:sum. get (U+v ; 阳141] 若更新的指标为最小值指标的第i个:Min (min. get (i), V);
[0142] 若更新的指标为最大值指标的第i个:Max (max. get (i), V); 阳143] 若更新的指标为平均值指标的第i个:(avg. get (i)* (countTotal. get(i) -1) +v) /countTotal. get(i)。
[0144] 可选地,若无法在所述指标数据存储表中查找到第二待更新行健值,则所述第二 更新模块70可W在所述指标数据存储表中新增一行,W将所述第二待更新行健值写入新 增的行中,并在该新增的行中且与所述待更新指标列名对应的位置处写入所述日志指标数 据。
[0145] 进一步的,再请参见图6,是上述图4或图5对应实施例中的一种第一获取模块10 的结构示意图,所述第一获取模块10可W包括:请求获取单元101、维度获取单元102、第一 行健获取单元103 ; 阳146] 所述请求获取单元101,用于获取统计查询请求,所述统计查询请求携带有查询维 度值; 阳147] 具体的,当所述请求获取单元101接收到统计查询请求时,可W获取所述统计查 询请求所携带的查询维度值。
[0148] 所述维度获取单元102,用于在所述维度索引表中的所述至少一个维度值中获取 与所述查询维度值对应的维度值,并将与所述查询维度值对应的维度值确定为目标维度 值;
[0149] 具体的,所述请求获取单元101获取到查询维度值之后,所述维度获取单元102可 W在所述维度索引表中的所述至少一个维度值中获取与所述查询维度值对应的维度值,并 将与所述查询维度值对应的维度值确定为目标维度值。W上述图1对应实施例中的表1为 例,查询维度值包括维度值A和维度值B,若所述维度获取单元102在表1的列族中查找到 与维度值A相同的维度值为Bytes_l,与维度值B相同的维度值为Bytes_2,则将Bytes_l 和Bytes_2确定为目标维度值。
[0150] 所述第一行健获取单元103,用于在所述维度索引表中的所述至少一个第一行健 值中获取与所述目标维度值对应的第一行健值,并将与所述目标维度值对应的第一行健值 确定为第一目标行健值; 阳151] 具体的,所述维度获取单元102确定出目标维度值之后,所述第一行健获取单元 103可W在所述维度索引表中的所述至少一个第一行健值中获取与所述目标维度值对应的 第一行健值,并将与所述目标维度值对应的第一行健值确定为第一目标行健值。再W上述 表1为例,若确定出的目标维度值为Bytes_l和Bytes_2,则所述第一行健获取单元103可 W在表1的行健中获取到与Bytes_l对应的第一行健值为xxx_hashcode_l,W及Bytes_2 对应的第一行健值为xxx_hashcode_2,并将xxx_hashcode_l和xxx_hashcode_2确定为第 一目标行健值。 阳152] 进一步的,再请参见图7,是上述图4或图5中的一种第二获取模块20的结构示意 图,所述第二获取模块20可W包括:时间值生成单元201、拼接单元202、第二行健获取单元 203 ; 阳153] 所述时间值生成单元201,用于根据所述时间粒度和所述统计查询请求所携带的 统计时间范围,生成在所述统计时间范围内的至少一个目标时间值; 阳154] 具体的,所述统计查询请求还包括统计时间范围。所述时间值生成单元201可W 根据所述时间粒度和所述统计查询请求所携带的统计时间范围,生成在所述统计时间范围 内的至少一个目标时间值。例如,若统计时间范围为全天,且预设的时间粒度为1个小时, 则所述时间值生成单元201所生成的目标时间值包括0000、0100、0200、…、2300,即0 :00 到23 :00的时间值。
[0K5] 所述拼接单元202,用于将所述至少一个目标时间值中各目标时间值分别与所述 第一目标行健值进行拼接,W得到待查询行健值;
[0156] 具体的,所述时间值生成单元201生成至少一个目标时间值之后,所述拼接单 元202可W将所述至少一个目标时间值中各目标时间值分别与所述第一目标行健值进 行拼接,W得到待查询行健值。例如,若所述统计时间范围为全天且时间粒度为1个小 时,且所述第一目标行健值为xxx_hashcode_2,则所述至少一个目标时间值包括0000、 0100、0200、…、2300,所述拼接单元202将xxx_hashcode_2分别与所述至少一个目标 时间值中各目标时间值进行拼接,可W得到待查询行健值,所述待查询行健值包括 hashcode_2_0000> xxx_hashcode_2_0100> ···> xxx_hashcode_2_2300〇
[0157] 所述第二行健获取单元203,用于在所述指标数据存储表中的所述至少一个第二 行健值中获取与所述待查询行健值对应的第二行健值,并将与所述待查询行健值对应的第 二行健值确定为第二目标行健值;
[0158] 具体的,所述拼接单元202得到待查询行健值之后,所述第二行健获取单元203 可W在所述指标数据存储表中的所述至少一个第二行健值中获取与所述待查询行健值 对应的第二行健值,并将与所述待查询行健值对应的第二行健值确定为第二目标行健 值。例如,所述待查询行健值包括:xxx_hashcode_2_0000、xxx_hashcode_2_0100、…、 xxx_hashcode_2_2300,所述第二行健获取单元203在所述指标数据存储表中查找是否存 在与所述待查询行健值相同的第二行健值,若在所述指标数据存储表中查找到与所述待 查询行健值相同的第二行健值包括xxx_hashcode_2_0000和xxx_hashcode_2_0100,则 所述第二行健获取单元203将所述指标数据存储表中的xxx_hashcode_2_0000和 hashcode_2_0100确定为第二目标行健值。
[0159] 进一步的,再请参见图8,是上述图4或图5中的一种合并模块30的结构示意图, 所述合并模块30可W包括:指标数据获取单元301、指标数据合并单元302 ;
[0160] 所述指标数据获取单元301,用于在所述指标数据存储表中的所述至少一个指标 数据中获取与所述第二目标行健值对应的指标数据,并将与所述第二目标行健值对应的指 标数据确定为目标指标数据; 阳161] 具体的,所述指标数据获取单元301可W在所述指标数据存储表中的所述至少一 个指标数据中获取与所述第二目标行健值对应的指标数据,并将与所述第二目标行健值对 应的指标数据确定为目标指标数据。W上述图1对应实施例中的表2为例,若所述第二目标 tx健值包括:xxx_hashcode_l_time 和 xxx_h曰shcode_2_time,贝!J与 xxx_h曰shcode_l_time 同一行的各列指标数据均为目标指标数据,且与xxx_hashcode_2_time同一行的各列指标 数据也均为目标指标数据。 阳162] 所述指标数据合并单元302,用于将所述目标指标数据进行行合并,并将行合并后 的目标指标数据进行列合并,W得到与所述统计查询请求对应的统计数据;
[0163] 具体的,所述指标数据获取单元301确定出目标指标数据之后,所述指标数据 合并单元302可W先将所述目标指标数据进行行合并,在行合并时可W从上至下分别对 每列的目标指标数据依次进行两两合并,直至行合并到剩下一行目标指标数据。再请参 见上述图1对应实施例中的表2, W Slicelndex_l和Slicelndex_2进行行合并为例,若 Slicelndex_l和Slicelndex_2均包括全局计数指标、估计用户数指标数组、计数指标、去 重指标、合计指标、最大值指标、最小值指标W及平均值指标,则所述指标数据合并单元302 对Slicelndex_l和Slicelndex_2进行行合并的具体过程包括:
[0164] 全局计数指标的合并:slicelndexl. countTotal+sliceIndex2. countTotal ; 阳1化]估计用户数指标数组的合并: 阳 166]
[0167] 计数指标的合并:sliceindexl. countIndex+sliceIndex2. countindex ;
[0168] 去重指标的合并:sliceindexl. distincts. addAll (slicelndex2. distincts) (集合合并);
[0169] 合计指标的合并:sliceindexl. sum+slicelndex2. sum ;
[0170] 最小值指标的合并:Min (sliceindexl. min, slicelndex2. min);
[0171] 最小值指标的合并:Max (sliceindexl. max, slicelndex2. max); 阳172] 平均值指标的合并:
[0173] (sliceindexl. avg*slicelndexl. countIndexl+sliceIndex2. avg*slicelndex2. countIndex2)/(sliceindexl. countIndexl+sliceIndex2. countIndex2)〇
[0174] 其中,所述指标数据合并单元302对行合并后的目标指标数据进行列合并的过程 与行合并的过程类似,即在列合并时可W对各列中行合并后的目标指标数据依次进行两两 合并,直至列合并到剩下一个总的目标指标数据,所述总的目标指标数据即为与所述统计 查询请求对应的统计数据。其中,列合并和行合并不一样的地方仅在于对估计用户数指标 数组的合并,在列合并之前需要先根据各列中行合并后的估计用户数指标数组运个变量计 算出一个用户数数值,再在列合并时直接累加各列计算出的用户数数值即可统计出某种维 度条件下查询的估计用户数运个指标值的总量,对于其他指标的列合并的过程与行合并的 过程相同。其中,根据估计用户数指标数组运个变量计算出一个用户数数值的具体过程可 W为: 阳1巧]
[0176] 其中,userCount为计算出的用户数数值。
[0177] 本发明实施例通过在维度索引表中获取与统计查询请求所携带的查询维度值对 应的第一目标行健值,再在指标数据存储表中获取与第一目标行健值对应的第二目标行健 值,可W将指标数据存储表中与第二目标行健值对应的目标指标数据进行合并,W得到统 计数据。由于日志记录中的维度值和指标数据分别存储于维度索引表和指标数据存储表 中,且只需通过扫描维度索引表即可对指标数据存储表中的目标指标数据进行统计汇总, 即无需对所有日志记录都进行扫描,所W可W减少需要扫描的数据量,W提高对数据进行 统计汇总的效率;而且通过提取所述日志记录信息中的日志指标数据、日志维度值、时间 信息W及关键字段,可W对维度索引表中对应的维度值进行更新并对指标数据存储表中对 应的指标数据进行更新,由于写入日志记录信息时可W只更新相应位置的维度值和指标数 据,即可W避免每写入一条日志记录信息就要增加一条行数,所W有效减少了存储开销;同 时,通过更新维度值和指标数据的方式来写入日志记录信息,也可W在统计查询时降低所 需扫描的数据量,W进一步提高对数据进行统计汇总的效率。
[0178] 请参见图9,是本发明实施例提供的又一种数据统计装置的结构示意图,所述数据 统计装置1000可W包括產少一个处理器1001,例如CPU,至少一个网络接口 1004,用户接 口 1003,存储器1005,至少一个通信总线1002。其中,通信总线1002用于实现运些组件之 间的连接通信。其中,用户接口 1003可W包括显示屏值isplay)、键盘化巧board),可选用 户接口 1003还可W包括标准的有线接口、无线接口。网络接口 1004可选的可W包括标准 的有线接口、无线接口(如WI-FI接口)。存储器1005可W是高速RAM存储器,也可W是非 不稳定的存储器(non-volatile memcxry),例如至少一个磁盘存储器。存储器1005可选的 还可W是至少一个位于远离前述处理器1001的存储装置。如图9所示,作为一种计算机存 储介质的存储器1005中可W包括操作系统、网络通信模块、用户接口模块W及设备控制应 用程序。 阳179] 在图9所示的数据统计装置1000中,网络接口 1004主要用于连接用户终端,与所 述用户终端进行数据通信;而用户接口 1003主要用于为用户提供输入的接口,获取用户输 出的数据;而处理器1001可W用于调用存储器1005中存储的设备控制应用程序,并具体执 行W下步骤:
[0180] 获取统计查询请求,在预设的维度索引表的列族中获取与所述统计查询请求所携 带的查询维度值对应的目标维度值,并在所述维度索引表的行健中获取与所述目标维度值 对应的第一目标行健值; 阳181] 在预设的指标数据存储表的行健中获取与所述第一目标行健值对应的第二目标 行健值;
[0182] 将所述指标数据存储表的列族中与所述第二目标行健值对应的目标指标数据进 行合并,W得到与所述统计查询请求对应的统计数据。
[0183] 在一个实施例中,所述处理器1001在执行获取统计查询请求,在预设的维度索引 表的列族中获取与所述统计查询请求所携带的查询维度值对应的目标维度值,并在所述维 度索引表的行健中获取与所述目标维度值对应的第一目标行健值之前,还执行W下步骤:
[0184] 根据皿ase数据库预设维度索引表和指标数据存储表; 阳化5] 其中,所述维度索引表的列族包括至少一个维度列名,所述至少一个维度列名中 各维度列名分别对应至少一个维度值,所述维度索引表的行健包括至少一个第一行健值, 所述至少一个第一行健值是根据所述至少一个维度值计算得到的; 阳186] 其中,所述指标数据存储表的列族包括至少一个指标列名,所述至少一个指标列 名中各指标列名分别对应至少一个指标数据,所述指标数据存储表的行健包括至少一个第 二行健值,所述至少一个第二行健值是根据所述至少一个维度值和时间值计算得到的,所 述时间值是按照预设的时间粒度所划分的。
[0187] 在一个实施例中,所述处理器1001在执行获取统计查询请求,在预设的维度索引 表的列族中获取与所述统计查询请求所携带的查询维度值对应的目标维度值,并在所述维 度索引表的行健中获取与所述目标维度值对应的第一目标行健值时,具体执行W下步骤:
[0188] 获取统计查询请求,所述统计查询请求携带有查询维度值;
[0189] 在所述维度索引表中的所述至少一个维度值中获取与所述查询维度值对应的维 度值,并将与所述查询维度值对应的维度值确定为目标维度值;
[0190] 在所述维度索引表中的所述至少一个第一行健值中获取与所述目标维度值对应 的第一行健值,并将与所述目标维度值对应的第一行健值确定为第一目标行健值。 阳191] 在一个实施例中,所述处理器1001在执行在预设的指标数据存储表的行健中获 取与所述第一目标行健值对应的第二目标行健值时,具体执行W下步骤: 阳192] 根据所述时间粒度和所述统计查询请求所携带的统计时间范围,生成在所述统计 时间范围内的至少一个目标时间值;
[0193] 将所述至少一个目标时间值中各目标时间值分别与所述第一目标行健值进行拼 接,W得到待查询行健值;
[0194] 在所述指标数据存储表中的所述至少一个第二行健值中获取与所述待查询行健 值对应的第二行健值,并将与所述待查询行健值对应的第二行健值确定为第二目标行健 值。
[0195] 在一个实施例中,所述处理器1001在执行将所述指标数据存储表的列族中与所 述第二目标行健值对应的目标指标数据进行合并,W得到与所述统计查询请求对应的统计 数据时,具体执行W下步骤:
[0196] 在所述指标数据存储表中的所述至少一个指标数据中获取与所述第二目标行健 值对应的指标数据,并将与所述第二目标行健值对应的指标数据确定为目标指标数据;
[0197] 将所述目标指标数据进行行合并,并将行合并后的目标指标数据进行列合并,W 得到与所述统计查询请求对应的统计数据。
[0198] 在一个实施例中,所述处理器1001还执行W下步骤:
[0199] 当获取到日志记录信息时,提取所述日志记录信息中的日志指标数据、日志维度 值、时间信息W及关键字段; 阳200] 根据所述日志维度值生成第一待更新行健值,并根据所述日志维度值对所述维度 索引表中与所述第一待更新行健值对应的各个维度值进行更新; 阳201] 根据所述日志维度值和所述时间信息生成第二待更新行健值,并根据所述关键字 段生成待更新指标列名,并根据所述日志指标数据对所述指标数据存储表中与所述第二待 更新行健值和所述待更新指标列名对应的指标数据进行更新。 阳202] 本发明实施例通过在维度索引表中获取与统计查询请求所携带的查询维度值对 应的第一目标行健值,再在指标数据存储表中获取与第一目标行健值对应的第二目标行健 值,可W将指标数据存储表中与第二目标行健值对应的目标指标数据进行合并,W得到统 计数据。由于日志记录中的维度值和指标数据分别存储于维度索引表和指标数据存储表 中,且只需通过扫描维度索引表即可对指标数据存储表中的目标指标数据进行统计汇总, 即无需对所有日志记录都进行扫描,所W可W减少需要扫描的数据量,W提高对数据进行 统计汇总的效率;而且通过提取所述日志记录信息中的日志指标数据、日志维度值、时间 信息W及关键字段,可W对维度索引表中对应的维度值进行更新并对指标数据存储表中对 应的指标数据进行更新,由于写入日志记录信息时可W只更新相应位置的维度值和指标数 据,即可W避免每写入一条日志记录信息就要增加一条行数,所W有效减少了存储开销;同 时,通过更新维度值和指标数据的方式来写入日志记录信息,也可W在统计查询时降低所 需扫描的数据量,W进一步提高对数据进行统计汇总的效率。 阳203] 本领域普通技术人员可W理解实现上述实施例方法中的全部或部分流程,是可W 通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质 中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁 碟、光盘、只读存储记忆体巧eacH3nly Memo巧,ROM)或随机存储记忆体(Random Access Memoir, RAM)等。 阳204] W上所掲露的仅为本发明较佳实施例而已,当然不能W此来限定本发明之权利范 围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
【主权项】
1. 一种数据统计方法,其特征在于,包括: 获取统计查询请求,在预设的维度索引表的列族中获取与所述统计查询请求所携带的 查询维度值对应的目标维度值,并在所述维度索引表的行健中获取与所述目标维度值对应 的第一目标行健值; 在预设的指标数据存储表的行健中获取与所述第一目标行健值对应的第二目标行健 值; 将所述指标数据存储表的列族中与所述第二目标行健值对应的目标指标数据进行合 并,以得到与所述统计查询请求对应的统计数据。2. 如权利要求1所述的方法,其特征在于,在所述获取统计查询请求,在预设的维度索 引表的列族中获取与所述统计查询请求所携带的查询维度值对应的目标维度值,并在所述 维度索引表的行健中获取与所述目标维度值对应的第一目标行健值的步骤之前,还包括: 根据HBase数据库预设维度索引表和指标数据存储表; 其中,所述维度索引表的列族包括至少一个维度列名,所述至少一个维度列名中各维 度列名分别对应至少一个维度值,所述维度索引表的行健包括至少一个第一行健值,所述 至少一个第一行健值是根据所述至少一个维度值计算得到的; 其中,所述指标数据存储表的列族包括至少一个指标列名,所述至少一个指标列名中 各指标列名分别对应至少一个指标数据,所述指标数据存储表的行健包括至少一个第二行 健值,所述至少一个第二行健值是根据所述至少一个维度值和时间值计算得到的,所述时 间值是按照预设的时间粒度所划分的。3. 如权利要求2所述的方法,其特征在于,所述获取统计查询请求,在预设的维度索引 表的列族中获取与所述统计查询请求所携带的查询维度值对应的目标维度值,并在所述维 度索引表的行健中获取与所述目标维度值对应的第一目标行健值,包括: 获取统计查询请求,所述统计查询请求携带有查询维度值; 在所述维度索引表中的所述至少一个维度值中获取与所述查询维度值对应的维度值, 并将与所述查询维度值对应的维度值确定为目标维度值; 在所述维度索引表中的所述至少一个第一行健值中获取与所述目标维度值对应的第 一行健值,并将与所述目标维度值对应的第一行健值确定为第一目标行健值。4. 如权利要求2所述的方法,其特征在于,所述在预设的指标数据存储表的行健中获 取与所述第一目标行健值对应的第二目标行健值,包括: 根据所述时间粒度和所述统计查询请求所携带的统计时间范围,生成在所述统计时间 范围内的至少一个目标时间值; 将所述至少一个目标时间值中各目标时间值分别与所述第一目标行健值进行拼接,以 得到待查询行健值; 在所述指标数据存储表中的所述至少一个第二行健值中获取与所述待查询行健值对 应的第二行健值,并将与所述待查询行健值对应的第二行健值确定为第二目标行健值。5. 如权利要求2所述的方法,其特征在于,所述将所述指标数据存储表的列族中与所 述第二目标行健值对应的目标指标数据进行合并,以得到与所述统计查询请求对应的统计 数据,包括: 在所述指标数据存储表中的所述至少一个指标数据中获取与所述第二目标行健值对 应的指标数据,并将与所述第二目标行健值对应的指标数据确定为目标指标数据; 将所述目标指标数据进行行合并,并将行合并后的目标指标数据进行列合并,以得到 与所述统计查询请求对应的统计数据。6. 如权利要求2所述的方法,其特征在于,还包括: 当获取到日志记录信息时,提取所述日志记录信息中的日志指标数据、日志维度值、时 间信息以及关键字段; 根据所述日志维度值生成第一待更新行健值,并根据所述日志维度值对所述维度索引 表中与所述第一待更新行健值对应的各个维度值进行更新; 根据所述日志维度值和所述时间信息生成第二待更新行健值,并根据所述关键字段生 成待更新指标列名,并根据所述日志指标数据对所述指标数据存储表中与所述第二待更新 行健值和所述待更新指标列名对应的指标数据进行更新。7. -种数据统计装置,其特征在于,包括: 第一获取模块,用于获取统计查询请求,在预设的维度索引表的列族中获取与所述统 计查询请求所携带的查询维度值对应的目标维度值,并在所述维度索引表的行健中获取与 所述目标维度值对应的第一目标行健值; 第二获取模块,用于在预设的指标数据存储表的行健中获取与所述第一目标行健值对 应的第二目标行健值; 合并模块,用于将所述指标数据存储表的列族中与所述第二目标行健值对应的目标指 标数据进行合并,以得到与所述统计查询请求对应的统计数据。8. 如权利要求7所述的装置,其特征在于,还包括: 预设模块,用于根据HBase数据库预设维度索引表和指标数据存储表; 其中,所述维度索引表的列族包括至少一个维度列名,所述至少一个维度列名中各维 度列名分别对应至少一个维度值,所述维度索引表的行健包括至少一个第一行健值,所述 至少一个第一行健值是根据所述至少一个维度值计算得到的; 其中,所述指标数据存储表的列族包括至少一个指标列名,所述至少一个指标列名中 各指标列名分别对应至少一个指标数据,所述指标数据存储表的行健包括至少一个第二行 健值,所述至少一个第二行健值是根据所述至少一个维度值和时间值计算得到的,所述时 间值是按照预设的时间粒度所划分的。9. 如权利要求8所述的装置,其特征在于,所述第一获取模块包括: 请求获取单元,用于获取统计查询请求,所述统计查询请求携带有查询维度值; 维度获取单元,用于在所述维度索引表中的所述至少一个维度值中获取与所述查询维 度值对应的维度值,并将与所述查询维度值对应的维度值确定为目标维度值; 第一行健获取单元,用于在所述维度索引表中的所述至少一个第一行健值中获取与所 述目标维度值对应的第一行健值,并将与所述目标维度值对应的第一行健值确定为第一目 标行健值。10. 如权利要求8所述的装置,其特征在于,所述第二获取模块包括: 时间值生成单元,用于根据所述时间粒度和所述统计查询请求所携带的统计时间范 围,生成在所述统计时间范围内的至少一个目标时间值; 拼接单元,用于将所述至少一个目标时间值中各目标时间值分别与所述第一目标行健 值进行拼接,以得到待查询行健值; 第二行健获取单元,用于在所述指标数据存储表中的所述至少一个第二行健值中获取 与所述待查询行健值对应的第二行健值,并将与所述待查询行健值对应的第二行健值确定 为第二目标行健值。11. 如权利要求8所述的装置,其特征在于,所述合并模块包括: 指标数据获取单元,用于在所述指标数据存储表中的所述至少一个指标数据中获取与 所述第二目标行健值对应的指标数据,并将与所述第二目标行健值对应的指标数据确定为 目标指标数据; 指标数据合并单元,用于将所述目标指标数据进行行合并,并将行合并后的目标指标 数据进行列合并,以得到与所述统计查询请求对应的统计数据。12. 如权利要求8所述的装置,其特征在于,还包括: 信息提取模块,用于当获取到日志记录信息时,提取所述日志记录信息中的日志指标 数据、日志维度值、时间信息以及关键字段; 第一更新模块,用于根据所述日志维度值生成第一待更新行健值,并根据所述日志维 度值对所述维度索引表中与所述第一待更新行健值对应的各个维度值进行更新; 第二更新模块,用于根据所述日志维度值和所述时间信息生成第二待更新行健值,并 根据所述关键字段生成待更新指标列名,并根据所述日志指标数据对所述指标数据存储表 中与所述第二待更新行健值和所述待更新指标列名对应的指标数据进行更新。
【文档编号】G06F17/30GK105989076SQ201510070951
【公开日】2016年10月5日
【申请日】2015年2月10日
【发明人】沈健
【申请人】腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1