一种多维度拆分的计算方法及***
技术领域
本发明涉及多维度拆分技术领域,尤其涉及一种多维度拆分的计算方法及***。
背景技术
目前,对于大数据量的数据一般采用N+1的数据进行离线地多维度拆分,即通常进行多维度拆分计算时,首先统计一天接收到的所有数据,然后第二天将前一天统计的所有数据进行多维度拆分。现有技术在进行多维度拆分计算时,通常采用关系型数据库的OLAP(on-line analytical processing),联机分析处理)***。关系型数据库为由二维表及各个二维表之间的联系组成的一个数据组织。采用现有技术进行多维度拆分计算时,根据用户的数据请求,通过关系型数据库的多个二维表以及多个二维表之间的联系联合计算,从而获得符合用户数据请求的多维组合结果。
然而,对大数据量的数据进行多维度拆分时,无法做到实时多维度拆分处理,采用OLAP***仅能支持小数据量下的多维度拆分,并且由于基于关系型数据库的多个二维表进行多维度拆分计算,计算复杂度较高,并且处理数据量较小。
发明内容
本发明的实施例提供一种多维度拆分的计算方法及***,可以对海量数据进行实时多维度拆分计算,降低计算复杂度。
第一方面,本发明实施例提供一种多维度拆分的计算方法,包括:
根据预设的指标以及维度信息生成递推拓扑,所述递推拓扑包括维度组合以及各维度组合之间的递推路径,所述维度组合包括各维度的属性名称;
根据预设固化策略,确定固化维度组合并确定构成最优固化维度组合的运算路径;
接收数据上报点上报的海量数据,并对所述海量数据进行预处理,获得处理数据;
根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,实时地对所述处理数据执行不同的累加计算,获得累加计算结果。
第二方面,本发明实施例提供一种多维度拆分的计算***,包括:
运算决策模块,用于根据预设的指标以及维度信息生成递推拓扑,所述递推拓扑包括维度组合以及各维度组合之间的递推路径,所述维度组合包括各维度的属性名称;
所述运算决策模块,还用于根据预设固化策略,确定固化维度组合并确定构成最优固化维度组合的运算路径;
预处理模块,用于接收数据上报点上报的海量数据,并对所述海量数据进行预处理,获得处理数据;
维度组合实时计算服务模块,用于根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,实时地对所述处理数据执行不同的累加计算,获得累加计算结果。
本发明实施例提供一种多维度拆分的计算方法及***,通过根据预设的指标以及维度信息生成递推拓扑,所述递推拓扑包括维度组合以及各维度组合之间的递推路径,所述维度组合包括各维度的属性名称;根据预设固化策略,确定固化维度组合并确定构成最优固化维度组合的运算路径;接收数据上报点上报的海量数据,并对所述海量数据进行预处理,获得处理数据;根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,实时地对所述处理数据执行不同的累加计算,获得累加计算结果。
与现有技术中对大数据量的数据进行多维度拆分时,无法做到实时多维度拆分处理,采用OLAP***仅能支持小数据量下的多维度拆分,并且由于基于关系型数据库的多个二维表进行多维度拆分计算,计算复杂度较高,并且处理数据量较小相比,本发明通过实时对所述处理数据执行不同的累加计算,获得累加计算结果,使得可以对海量数据进行实时多维度拆分计算,并降低计算复杂度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一个实施例提供的一种多维度拆分的计算方法的流程图;
图2为本发明一个实施例提供的递推拓扑示意图;
图3为本发明另一个实施例提供的一种多维度拆分的计算方法的流程图;
图4为本发明另一个实施例提供的对处理数据执行不同的累加计算,获得累加计算结果的流程图;
图5为本发明另一个实施例提供的由待计算的TopView列表换算的流水列号列表示意图;
图6为本发明另一个实施例提供的View存储服务中内存缓存存储结构示意图;
图7为本发明另一个实施例提供的根据用户的数据查询请求获取对应的数据的流程图;
图8为本发明另一个实施例提供的一种多维度拆分的计算***的框图;
图9为本发明另一个实施例提供的另一种多维度拆分的计算方法的框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种多维度拆分的计算方法,该方法的执行主体可以为服务器,具体可以为多维度拆分***,该方法包括:
步骤101,根据预设的指标以及维度信息生成递推拓扑,所述递推拓扑包括维度组合以及各维度组合之间的递推路径,所述维度组合包括各维度的属性名称。
可选的,预设的指标以及维度信息可以根据当前需要处理的业务进行设置,不同的业务可以设置不同的指标以及维度信息。在本步骤执行之前,可以由配置管理员向多维度拆分***配置根据当前需要处理的业务设置的指标和维度信息。
根据预设的指标以及维度信息生成递推拓扑时,可以根据属性之间的层级关系进行上卷或者删除某一个属性等方式进行拓扑。例如,对于维度组合用户城市、用户年龄、用户性别生成递推拓扑,可选的,根据用户城市进行上卷,例如用户城市为石家庄,用户城市所属的省为河北省,则从用户城市这个属性通过上卷可以获得用户城市所属的省这个属性。可选的,可以根据用户年龄进行上卷,例如用户年龄为13岁,用户年龄所属的年龄段为10岁-20岁,则从用户年龄这个属性通过上卷可以获得用户年龄所属的年龄段这个属性。可选的,可以删除某一个属性从而获得新的维度组合,例如可以删除用户性别这个属性,从而可以获得新的维度组合:用户城市以及用户年龄。
可选的,如图2所示的递推拓扑示意图,图中ABC为接收到的海量预处理数据,其中,ABC可以为由三个维度构成的维度组合(View),第二层中包括从View_ABC中获取的View_AB以及View_AC两个维度组合,第三层包括从View_AB中获得View_A以及View_B,从View_AC中获得的View_C。其中,维度组合之间的箭头表示属性之间的递推路径。
步骤102,根据预设固化策略,确定固化维度组合并确定构成最优固化维度组合的运算路径。
预设固化策略用于指示固化维度组合的查询数据来源。
固化维度组合即为预设的某些维度的组合,例如,用户年龄、用户性别、用户城市这三个维度的组合,或者,用户年龄、用户性别这两个维度的组合等。
最优固化维度组合的运算路径可以为获得需求的维度组合时计算代价最小的运算路径。
可选的,根据预设固化策略确定构成最优固化维度组合的运算路径时,路径端点的维度组合即可以为固化维度组合。
步骤103,接收数据上报点上报的海量数据,并对所述海量数据进行预处理,获得处理数据。
可选的,配置管理员预先向多维度拆分***注册数据上报点,多维度拆分***接收预配置的数据上报点。
根据预配置的所述数据上报点,接收所述数据上报点通过不同的数据通道上报的海量数据,所述数据通道用于对接收到的所述海量数据进行合并数据包处理或者传输失败重传处理或者压缩处理。可选的,不同的数据上报点可以接收不同格式的数据,并通过不同的数据通道传输数据。
可选的,合并数据包为将小的数据包合并为大的数据包,使得可以减少数据在数据通道传输过程中的握手验证等,从而在跨城市传输时可以降低平均传输时延。失败重传即在传输失败时重新传输,以保证可以传输成功,提高传输可靠性。
可选的,本步骤可以对接收到的海量数据进行及时预处理。海量数据可以为不同用户一段时间内的数据,例如,不同用户在9::0-10:00进行操作的数据。
可选的,对接收到的海量数据进行预处理包括:
A,根据所述海量数据以及预设选择预处理规则,确定与所述海量数据对应的预处理规则。
可选的,预设选择预处理规则为指定海量数据采用哪种预处理规则进行处理的规则。可选的,海量数据可以为接收到的一个用户预设时间段的数据,此时可以采用预处理规则1进行处理,预处理规则1可以为对海量数据进行非法字段过滤;海量数据可以为接收到的多个用户预设时间段的数据,此时可以采用预设处理规则2进行处理,预设处理规则2可以为先对海量数据按照用户进行分组,获得每个用户预设时间段内的数据,然后对分组后每一组数据进行非法字段过滤。
B,根据所述预处理规则,对所述海量数据进行清洗处理,获得第一处理数据。
可选的,根据上述描述的预处理规则对不同的海量数据进行清洗处理,即对海量数据中的非法字段过滤。
C,根据预设抽取字段规则,在所述第一处理数据中抽取多维度拆分所需的至少一个字段或者至少一个字段组合。
可选的,预设抽取字段规则可以为根据经验设置的需要抽取的字段,即需要在第一处理数据中分别抽取需要的维度组合,例如,需要获得用户的性别、用户的年龄的维度组合,或者需要获得用户的性别、用户的地址的维度组合,则可以根据预设抽取字段规则,在第一处理数据中抽取用户的性别、用户的年龄这两个字段,以及再第一处理数据中抽取用户的性别、用户的地址这两个字段。进一步可选的,可以对抽取的至少一个字段或者至少一个字段组合进行短暂缓存。
D,根据抽取的所述至少一个字段或者至少一个字段组合生成宽表,并将所述至少一个字段或者至少一个字段组合保存在所述宽表中。
宽表指以列存储的形式存储数据的表,即每一个字段占用宽表中的一列进行存储。
可选的,一个字段组合采用一个宽表存储,可以理解的,一个字段组合中不论有几个字段,都采用一个宽表存储,例如抽取的字段组合为用户的性别、用户的年龄,则对应的宽表中保存用户的性别、用户的年龄的数据,抽取的字段组合为用户的性别、用户的地址,则对应的宽表中保存用户的性别、用户的地址的数据。
可选的,可以将重复的宽表进行合并。
E,将所述宽表中保存的所述至少一个字段或者至少一个字段组合进行压缩,获得所述处理数据。
可选的,为了减少保存宽表的空间,减少落地数据量,则可以对宽表中保存的字段组合进行压缩,例如,可以采用重量压缩、轻量压缩等方式进行压缩。其中,重量压缩指采用较大的压缩比例压缩数据,轻量压缩指采用较小的压缩比例压缩数据。同样的数据采用重量压缩后的数据量比采用轻量压缩后数据量小,但采用重量压缩后的数据的计算性能较差,即由于压缩比例较大,后续处理压缩后数据时,需要解压缩的时间较多,采用轻量压缩后的数据的计算性能较好,因此优选的,将所述宽表中保存的所述至少一个字段或者至少一个字段组合进行轻量压缩,获得所述处理数据。
进一步可选的,可以对由宽表对应的处理数据采用全内存或者内存列表的方式保存至实时宽表服务中。可选的,实时宽表服务为大列表存储***,由分布式的内存列表和基于分布式文件***的大表(Big Table)组成,对于需要检验是否去重等随机读写多、时延低的数据,会全内存存储,其他数据则是使用内存列表存储,并定期合并到分布式文件***的Big Table上。
步骤104,根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,实时地对所述处理数据执行不同的累加计算,获得累加计算结果。
可选的,预设计算规则可以为根据指标判断对处理数据进行简单累加或者去重累加。例如,北京某个男性用户A在早上8:00用手机登录QQ,同时在7:00用计算机登陆过QQ,待运算指标是QQ登陆人数,则对于View[用户城市-用户性别]来说,用户A之前已经计算过,因此不能将用户A此次的登录进行重复计数,因此需要采用去重累加的方式计算;但对于View[用户城市-用户性别-登陆方式]来说,由于用户A的登录方式不同,因此View值不同,则该View下的[北京-男性-手机登陆]这个值需要加一,即采用简单累加的方式计算。
进一步可选的,将累加计算结果采用全内存或者内存列表的方式保存在View存储服务中,可选的,View存储服务为大列表存储***,由分布式的内存列表和基于分布式文件***的大表(Big Table)组成,对于需要检验是否去重等随机读写多、时延低的数据,会全内存存储,其他数据则是使用内存列表存储,并定期合并到分布式文件***的Big Table上。
本发明实施例提供一种多维度拆分的计算方法,通过根据预设的指标以及维度信息生成递推拓扑,所述递推拓扑包括维度组合以及各维度组合之间的递推路径,所述维度组合包括各维度的属性名称;根据预设固化策略,确定固化维度组合并确定构成最优固化维度组合的运算路径;接收数据上报点上报的海量数据,并对所述海量数据进行预处理,获得处理数据;根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,实时地对所述处理数据执行不同的累加计算,获得累加计算结果,使得可以对海量数据进行实时多维度拆分计算,并降低计算复杂度。
本发明实施例提供一种多维度拆分的计算方法,如图3所示,该方法包括:
步骤301,接收配置管理员配置的数据上报点、指标、维度信息以及预设的多维度拆分计算频率。
可选的,在多维度拆分的计算方法执行之前,配置管理员会将与当前需要处理的业务相关的信息配置到多维度拆分***中。例如,指标可以为当前需要处理的业务的待计算的指标,指标可以为登录人数、登录次数、点击人数、点击次数等。维度信息可以为当前需要处理的业务中待计算的维度,可以根据此维度以及维度之间的层级关系生成递推拓扑。
可选的,例如,多维度拆分计算频率可以为5分钟、15分钟、1小时等,根据此多维度拆分计算频率多维度拆分***可以尽可能地缓存流水数据,并执行合并计算以及读写操作,使得可以更有效地调度资源。
需要说明的是,根据不同的业务可以获得不同的指标、维度信息以及多维度拆分计算频率。
步骤302,根据预设的指标以及维度信息生成递推拓扑,所述递推拓扑包括维度组合以及各维度组合之间的递推路径,所述维度组合包括各维度的属性名称。
可选的,本步骤与附图1中步骤101相同,在此不再一一赘述。
步骤303,根据预设固化策略,确定固化维度组合并确定构成最优固化维度组合的运算路径;
可选的,本步骤与附图1中步骤102相同,在此不再一一赘述。
步骤304,接收数据上报点上报的海量数据,并对所述海量数据进行预处理,获得处理数据。
可选的,根据预配置的所述数据上报点,接收所述数据上报点通过不同的数据通道上报的海量数据,所述数据通道用于对接收到的所述海量数据进行合并数据包处理或者传输失败重传处理或者压缩处理。
可选的,本步骤与附图1中步骤103相同,在此不再一一赘述。
步骤305,将由宽表对应的所述处理数据采用全内存或者内存列表的方式保存。
可选的,可以将预处理之后的处理数据落地至实时宽表服务中。可选的,实时宽表服务为大列表存储***,由分布式的内存列表和基于分布式文件***的大表(Big Table)组成,对于需要检验是否去重等随机读写多、时延低的数据,会全内存存储,其他数据则是使用内存列表存储,并定期合并到分布式文件***的Big Table上。
可选的,实时宽表服务中保存的宽表适于各个计算节点实时计算时执行去重时采用。
步骤306,根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,各个计算节点实时地对所述处理数据执行不同的累加计算,获得累加计算结果。
如图4所示,本步骤包括以下子步骤401-410:
步骤401,根据一致性哈希(Hash)将所述处理数据分发至不同的计算节点。
可选的,将处理数据分发到不同的计算节点的过程中,处理数据采用内存交换的方式存储,即处理数据不落地,从而可以对处理数据进行及时处理,并且不同的计算节点同时计算,从而提高处理速度。
步骤402,获取半序结构(Lattice),所述Lattice包括所述固化维度组合以及所述最优固化维度组合的运算路径。
可选的,Lattice为由View和上卷(Rollup)组成的半序结构,也可以理解为拓扑图,其中,View之间有层级关系,细粒度View可以Rollup到粗粒度View,例如,用户城市与用户城市所属的省的层级关系,用户年龄与用户年龄所属的年龄段的层级关系等等。
步骤403,根据所述预设计算规则以及所述半序结构,确定待计算的顶层维度组合(TopView)列表。
可选的,TopView为只能从原始动作信息(Action)得到的View,例如,附图2中View_AB以及View_AC为TopView。待计算的顶层维度组合(TopView)列表中包括所有的TopView维度组合构成的列表,其中,所有的TopView维度组合可以为最优固化维度组合的运算路径中涉及到的固化维度组合。
可选的,将待计算的TopView列表发送给各个计算节点,各个计算节点根据接收到的待计算的TopView列表执行具体的计算。如下步骤404-步骤410:
步骤404,判断指标类型,指标类型包括简单累加和去重累加。
可选的,指标为Measure,为Action提供量化的描述,为可以累加的数据。累加计算包括求和函数(sum)、计数函数(count)、count[不同的(distinct)]、平均值函数(avg)等;例如付费金额、付费次数、付费人数、平均在线时长。
步骤405,当所述指标类型为所述简单累加时,根据所述指标以及接收到的处理数据,从所述待计算的TopView列表中抽取相关列。
例如,北京某个男性用户A在早上8:00用手机登录QQ,同时在7:00用计算机登录QQ,当指标为登录次数时,当TopView为用户城市、用户性别以及登录方式时,该TopView下的值需要加一,则在待计算的TopView列表中抽取用户城市、用户性别以及登录方式对应的列。
步骤406,将所述相关列以及所述指标的值写入维度组合(View)结果表,将所述View结果表中的数据与当天View数据累加,获得累加计算结果,所述累加计算结果采用全内存或者内存列表的方式保存。
可选的,计算节点将获取的相关列写入View结果表中,其中,View结果表保存在View存储服务中,View存储服务将新写入的View结果表中的数据与当天View数据累加。
进一步可选的,将累加计算结果采用全内存或者内存列表的方式保存在View存储服务中,可选的,View存储服务为大列表存储***,由分布式的内存列表和基于分布式文件***的大表(Big Table)组成,对于需要检验是否去重等随机读写多、时延低的数据,会全内存存储,其他数据则是使用内存列表存储,并定期合并到分布式文件***的Big Table上。
可选的,View存储服务中内存缓存存储结构如图6所示,Key表示维度组合标识与维度组合值,第二列以后后续的列表示各种指标以及对应的指标值,将所述View结果表中的数据与当天View数据累加时,可以首先确定维度组合以及指标对应的列,然后再对应的列中指标值上执行加一操作。
每次累加请求只需操作内存的缓存表,缓存表每过一定时间间隔,会合并成顺序的数据文件,并合并到分布式文件数据库的大表上,从而减少了大量随机写和读对分布式数据库的压力。
需要说明的是,新的处理数据到来之前,首先更新本计算节点的内存View值,等缓存时间到时才写入View存储服务,从而极大的降低了View的更新压力。
步骤407,当所述指标类型为所述去重累加时,根据所述待计算的TopView列表以及接收到的处理数据,确定不重复的主键(Key)列表;
可选的,将待计算的TopView列表换算为流水列号列表,如图5所示的流水列号列表,其中,流水列号列表中的Key表示流水标识和流水主键,其余为表示流水数据的列,即表示某一个属性对应的数据。根据接收到的处理数据,转换为TopView的值列表1,根据TopView的值列表的Key,获取该用户之前的流水信息,将获取的该用户之前的流水信息组合TopView的值列表2,比较值列表1和值列表2,筛选出值列表1中不存在与值列表2中的TopView。筛选出的TopView构成的列表即为本步骤中不重复的Key列表。
步骤408,比较所述Key列表以及保存的由所述处理数据对应的宽表,当所述宽表中不存在所述Key列表中的第一列时,将所述第一列***所述宽表中,所述第一列表示所述Key列表中的任一列。
可选的,第一列为所述Key列表中的任一列,这里“第一”并不是为了排序,而是为了描述方便。
步骤409,根据***所述宽表中的列构成的新Key列表,确定TopView的新相关列。
步骤410,将所述新相关列以及所述指标的值写入View结果表,将所述View结果表中的数据与当天View数据累加,获得累加计算结果,所述累加计算结果采用全内存或者内存列表的方式保存。
进一步可选的,将累加计算结果采用全内存或者内存列表的方式保存在View存储服务中。
获得累加计算结果后继续执行后续的步骤。
步骤307,定期将保存的由所述处理数据对应的所述宽表以及所述累加计算结果合并到分布式数据库中。
可选的,定期将实时宽表服务中的宽表和View存储服务中的累加计算结果合并到分布式数据库中,采用分布式文件***的大表(Big Table)存储,即采用支持列存储的方式存储计算结果,分布式数据库为数据分别存储在计算机网络中的不同台计算机上的数据库,存储的数据量较大,并且可以提供高效访问能力。需要说明的是,当采用支持列存储的方式存储计算结果时,对于没有数据的列则不占用存储资源,即仅有数据的列占用存储资源,与现有技术中存储数据相比,可以节省大量存储资源,用来存储有效数据。
步骤308,接收用户发送的数据查询请求,并根据用户的数据查询请求获取对应的数据。
所述数据查询请求用于请求查询维度组合的相关数据,可以包括各维度值以及指标值,所述数据查询请求包括所述维度组合的各个维度的属性名称。
如图7所示,本步骤包括步骤701-步骤710:
步骤701,解析用户发送的数据查询请求,获得待查询指标、待查询View以及待查询时间点。
可选的,解析用户发送的数据查询请求,可以获得待查询指标,例如登录人数,可以获得待查询View,例如用户城市、用户性别等,可以获得待查询时间点,例如,9:00、9:30、10:00、10:30、11:00、11:30、12:00这几个时间点,即用户的数据查询请求为希望获得一段时间内登陆人数的趋势变化。
步骤702,根据所述待查询指标以及所述待查询View,查询内存中是否保存有所述待查询指标以及所述待查询View对应的待查询数据。
可选的,当根据用户的数据查询请求进行查询时,首先在内存缓存中查询是否存在待查询数据,如果内存中保存有待查询的数据则可以直接获取,从而可以提高查询速度,提高用户体验。
步骤703,当所述内存中保存有所述待查询指标以及所述待查询View对应的所述待查询数据时,则直接读取所述待查询数据。
步骤704,当所述内存中未保存有所述待查询指标以及所述待查询View对应的所述待查询数据时,则根据Lattice判断所述待查询View类型,所述待查询View类型包括TopView和上卷(RollupView)。
可选的,Lattice中包括所有维度组合,从Lattice中可以查询出待查询View的类型。
步骤705,当所述待查询View类型为所述TopView时,直接获取所述待查询View对应的数据,并将获取的所述数据采用全内存或者内存列表的方式保存。
可选的,将获取的数据采用全内存或者内存列表的方式汇聚到View存储服务中,以方便后续用户查询。
步骤706,当所述待查询View类型为所述RollupView时,判断所述待查询View是否为已经计算的View。
判断所述待查询View是否为已经计算过的View,即查看Lattice中是否包括待查询View,Lattice中包括固化维度组合,即查看固化维度组合中是否包括待查询View。
步骤707,当所述待查询View为已经计算的View时,直接获取所述待查询View对应的数据。
步骤708,当所述待查询View为未被计算的View时,查询获得计算所述待查询View代价最小并且已经计算过的所述待查询View的父View。
可选的,根据最优固化维度组合的运算路径,查看与待查询View计算代价最小并且已经计算过的父View,如果与待查询View计算代价最小并且已经计算过的存在父View,则可以提高获取待查询View对应的待查询数据的速度。
步骤709,根据所述待查询View以及所述父View之间的递推路径,确定计算任务。
可选的,例如,待查询View为A1B1,父View为A2B2,待查询View以及父View之间的递推路径为A1B1->A2B1->A2B2,则计算任务可以为A2B1->A2B2与A1B1->A2B1。
可选的,将不同的任务分配给不同的计算节点进行计算。
步骤710,根据所述计算任务,获取所述各任务对应的数据。
根据所述计算任务,不同的计算节点获取对应的数据。
步骤711,将所述各任务对应的数据执行上卷操作,获得待查询View对应的数据,并将所述待查询View对应的数据采用全内存或者内存列表的方式保存。
根据各计算节点获得的各任务对应的数据,分段获取父View对应的数据,然后进行上卷,获得待查询View。
步骤712,当所述待查询View为未被计算的View时,并且未查询到计算过的所述待查询View的父View时,则合并预设时间段内的至少一个用户发送的数据查询请求,并根据所述固化维度组合以及所述最优固化维度组合的运算路径,批量启动维度组合计算的计算任务,批量执行所述维度组合计算的计算任务,获得计算结果,所述计算结果中包含所述待查询View对应的数据。
可选的,当查询没有定位到固化View时,则触发实时地按需计算,即根据所述固化维度组合以及所述最优固化维度组合的运算路径,计算待查询View。优选的,可以合并预设时间段内的至少一个用户发送的数据查询请求,将各个用户的待查询View进行合并,并批量计算,从而可以提高***吞吐量。
本发明实施例提供一种多维度拆分的计算方法,通过根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,实时地对所述处理数据执行不同的累加计算,获得累加计算结果,使得可以对海量数据进行实时多维度拆分计算,并降低计算复杂度。使得在不同业务场景例如新版本发布或者新活动推广等场景下,可以快速执行多维度拆分计算,从而查找重要影响因素,做出决策。同时还可以根据计算结果实时对用户分群,为实时广告推荐***提供决策数据。
本发明实施例提供一种多维度拆分的计算***,如图8所示,该***包括:运算决策模块801,预处理模块802,维度组合实时计算服务模块803。
运算决策模块801,用于根据预设的指标以及维度信息生成递推拓扑,所述递推拓扑包括维度组合以及各维度组合之间的递推路径,所述维度组合包括各维度的属性名称;
所述运算决策模块801,还用于根据预设固化策略,确定固化维度组合并确定构成最优固化维度组合的运算路径;
预处理模块802,用于接收数据上报点上报的海量数据,并对所述海量数据进行预处理,获得处理数据;
维度组合实时计算服务模块803,用于根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,实时地对所述处理数据执行不同的累加计算,获得累加计算结果。
进一步可选的,所述运算决策模块801根据预设的指标以及维度信息生成递推拓扑时,用于:
根据当前待处理业务,确定并预配置待计算的指标以及维度信息,所述维度信息包括各维度属性以及维度之间层级关系;
根据所述指标以及所述维度信息,生成递推拓扑。
进一步可选的,所述预处理模块802,用于:
根据预配置的所述数据上报点,接收所述数据上报点通过不同的数据通道上报的海量数据,所述数据通道用于对接收到的所述海量数据进行合并数据包处理或者传输失败重传处理或者压缩处理。
进一步可选的,如图9所示,所述***,还包括:实时宽表服务模块804;
实时宽表服务模块804,用于将由宽表对应的所述处理数据采用全内存或者内存列表的方式保存。
进一步可选的,如图9所示,所述维度组合实时计算服务模块803,包括:分发单元8031,获取单元8032,确定单元8033,计算节点8034;
分发单元8031,用于根据一致性哈希(Hash)将所述处理数据分发至不同的计算节点;
获取单元8032,用于获取半序结构(Lattice),所述Lattice包括所述固化维度组合以及所述最优固化维度组合的运算路径;
确定单元8033,用于根据所述预设计算规则以及所述半序结构,确定待计算的顶层维度组合(TopView)列表;
计算节点8034,用于根据待计算的指标类型,实时地对所述处理数据执行不同的累加计算,获得累加计算结果,所述指标类型包括简单累加和去重累加。
进一步可选的,如图9所示,所述计算节点8034,包括:
抽取子单元80341,用于当所述指标类型为所述简单累加时,根据所述指标以及接收到的处理数据,从所述待计算的TopView列表中抽取相关列;
计算子单元80342,用于将所述相关列以及所述指标的值写入维度组合(View)结果表;
所述***还包括:View存储服务模块805,用于将所述View结果表中的数据与当天View数据累加,获得累加计算结果,所述累加计算结果采用全内存或者内存列表的方式保存。
进一步可选的,如图9所示,所述计算节点8034,包括:
确定子单元80343,用于当所述指标类型为所述去重累加时,根据所述待计算的TopView列表以及接收到的处理数据,确定不重复的主键(Key)列表;
***子单元80344,用于比较所述Key列表以及保存的由所述处理数据对应的宽表,当所述宽表中不存在所述Key列表中的第一列时,将所述第一列***所述宽表中,所述第一列表示所述Key列表中的任一列;
所述确定子单元80343,还用于根据***所述宽表中的列构成的新Key列表,确定TopView的新相关列;
计算子单元80345,用于将所述新相关列以及所述指标的值写入View结果表;
所述***还包括:View存储服务模块805,用于将所述View结果表中的数据与当天View数据累加,获得累加计算结果,所述累加计算结果采用全内存或者内存列表的方式保存。
进一步可选的,如图9所示,所述***,还包括:分布式数据库806;
分布式数据库806,用于定期接收以及合并由所述处理数据对应的所述宽表以及所述累加计算结果。
进一步可选的,如图9所示,所述***,还包括:查询服务集群模块807,所述查询服务集群模块807包括:
解析单元8071,用于解析用户发送的数据查询请求,获得待查询指标、待查询View以及待查询时间点;
查询单元8072,用于根据所述待查询指标以及所述待查询View,查询内存中是否保存有所述待查询指标以及所述待查询View对应的待查询数据;
读取单元8073,用于当所述内存中保存有所述待查询指标以及所述待查询View对应的所述待查询数据时,则直接读取所述待查询数据;
判断单元8074,用于当所述内存中未保存有所述待查询指标以及所述待查询View对应的所述待查询数据时,则根据Lattice确定所述待查询View类型,所述待查询View类型包括TopView和上卷(RollupView);
处理单元8075,用于根据所述待查询View的不同类型,采用不同的方式获取所述待查询View对应的数据;
所述***还包括:View存储服务模块805,用于保存所述数据。
进一步可选的,所述处理模块8075,用于:
当所述待查询View类型为所述TopView时,直接获取所述待查询View对应的数据;
所述View存储服务模块805,用于将获取的所述数据采用全内存或者内存列表的方式保存。
进一步可选的,所述处理模块8075,包括:
判断单元,用于当所述待查询View类型为所述RollupView时,判断所述待查询View是否为已经计算的View;
获取单元,用于当所述待查询View为已经计算的View时,直接获取所述待查询View对应的数据;
获取单元,用于当所述待查询View为未被计算的View时,查询获得计算所述待查询View代价最小并且已经计算过的所述待查询View的父View;确定单元,用于根据所述待查询View以及所述父View之间的递推路径,确定计算任务;所述获取单元,还用于根据所述计算任务,获取所述各任务对应的数据;计算单元,用于将所述各任务对应的数据执行上卷操作,获得待查询View对应的数据;
所述View存储服务模块,用于将所述待查询View对应的数据采用全内存或者内存列表的方式保存。
进一步可选的,所述处理模块8075,还用于当所述待查询View为未被计算的View时,并且未查询到计算过的所述待查询View的父View时,则合并预设时间段内的至少一个用户发送的数据查询请求,并根据所述固化维度组合以及所述最优固化维度组合的运算路径,批量启动维度组合计算的计算任务,批量执行所述维度组合计算的计算任务,获得计算结果,所述计算结果中包含所述待查询View对应的数据。
需要说明的是,附图8或附图9所示装置中,其各个模块的具体实施过程以及各个模块之间的信息交互等内容,由于与本发明方法实施例基于同一发明构思,可以参见方法实施例,在此不一一赘述。
本发明实施例提供一种多维度拆分的计算***,通过运算决策模块,用于根据预设的指标以及维度信息生成递推拓扑,以及根据预设固化策略,确定固化维度组合并确定构成最优固化维度组合的运算路径;预处理模块,用于接收数据上报点上报的海量数据,并对所述海量数据进行预处理,获得处理数据;维度组合实时计算服务模块,用于根据预设计算规则以及所述固化维度组合以及所述最优固化维度组合的运算路径,实时地对所述处理数据执行不同的累加计算,获得累加计算结果,使得可以对海量数据进行实时多维度拆分计算,降低计算复杂度。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置和***实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。