一种数据查询方法及服务器与流程

文档序号:12124116阅读:171来源:国知局
一种数据查询方法及服务器与流程
本发明涉及电子
技术领域
,尤其涉及一种数据查询方法及服务器。
背景技术
:大数据是当前全球信息领域正在进行的一场技术革命,对各个行业,包括手机生产商,都会产生至关重要的影响和作用。大数据是构建垂直生态系统,让大众与世界自由联接的桥梁,通过全面聚合、深入挖掘、高效应用,可以让企业获得更全面的客户洞察,形成更深入的分析能力,通过综合平台向社会提供信息服务,创造社会价值。目前,随着智能终端的迅猛发展和普及应用,智能终端的使用场景也越来越多,用户可以使用终端登录自己的即时通讯帐号进行聊天,或者用户可以使用视频帐号观看视频等,当用户登录帐号进行操作即产生一条操作记录,即该用户在此时处于活跃状态,通常需要对各个用户的活跃状态进行大数据分析,比如,在web分析界面,查询任意时间段某个应用和机型维度的的活跃用户数,活跃用户数的计算难点是数据量大,而且需要去重(同一个用户,在一个时间段内,只能最多算活跃一次)。若1天有3000万的记录数,1个月有9亿条记录,如查询6个月的活跃用户数,就需要在54亿的数据级别上进行去重计算。由于查询时间范围不确定性,无法再进行数据的预处理,只能直接查询,需要一个庞大的,强大的查询引擎库,按分布式的数据规模算,需要50台服务器才能支撑这样的查询(在60秒左右能查询出数据),成本非常高,而且耗时较多。技术实现要素:本发明实施例提供一种数据查询方法及服务器,可通过预先建立中间表以及子表,实现数据的快速查询,节省成本。本发明实施例提供了一种数据查询方法,其可包括:接收查询请求,所述查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量;获取所述第二时间周期对应的目标中间表的目标子表,所述目标中间表包含截止所述第二时间周期以前每个用户的最近活跃时间周期,所述目标子表为根据所述目标中间表统计得到的截止所述第二时间周期以前每个时间周期内活跃用户的数量;从所述目标子表中统计所述第一时间周期开始至所述第二时间周期结束中每个时间周期内活跃用户的数量的总和,并将所述总和确定为所述第一时间周期开始至第二时间周期结束内活跃用户的总数量。本发明实施例提供了一种服务器,其可包括:接收单元,用于接收查询请求,所述查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量;第一获取单元,用于获取所述第二时间周期对应的目标中间表的目标子表,所述目标中间表包含截止所述第二时间周期以前每个用户的最近活跃时间周期,所述目标子表为根据所述目标中间表统计得到的截止所述第二时间周期以前每个时间周期内活跃用户的数量;统计单元,用于从所述目标子表中统计所述第一时间周期开始至所述第二时间周期结束中每个时间周期内活跃用户的数量的总和,并将所述总和确定为所述第一时间周期开始至第二时间周期结束内活跃用户的总数量。本发明实施例中,接收查询请求,该查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量,获取第二时间周期对应的目标中间表的目标子表,该目标中间表包含截止该第二时间周期以前每个用户的最近活跃时间周期,该目标子表为根据目标中间表统计得到的截止该第二时间周期以前每个时间周期内活跃用户的数量,从目标子表中统计第一时间周期开始至第二时间周期结束中每个时间周期内活跃用户的数据的总和,将该总和确定为第一时间周期开始至第二时间周期结束内活跃用户的总数量,本发明通过预先建立中间表以及中间表的子表,从而可以快速查询到活跃用户的总数量,节省存储成本。附图说明为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例提供的数据查询方法的第一实施例流程示意图;图2是本发明实施例提供的数据查询方法的第二实施例流程示意图;图3是本发明实施例提供的一种web端结果数据表;图4是本发明实施例提供的一种web端查询结果图;图5是本发明实施例提供的一种服务器的结构示意图;图6是本发明实施例提供的一种第一构建单元的结构示意图;图7是本发明实施例提供的一种调整单元的结构示意图;图8是本发明实施例提供的另一种服务器的结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。下面将结合图1至图4对本发明实施例提供的数据查询方法及装置进行具体描述。请参照图1,是本发明实施例提供的数据查询方法的第一实施例流程示意图。本实施例中所描述的数据查询方法,包括步骤:S101,接收查询请求,所述查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量;本发明实施例中,时间周期可以是天、周、月以及年等等,本发明实施例以天为时间周期作为举例说明,第一时间周期可以是某年某月某日,比如2016年7月1日,第二时间周期在第二时间周期之后,比如,第二时间周期可以是2016年9月1日。第一时间周期开始至第二时间周期结束内活跃用户即是在该第一时间周期至第二时间周期内存在操作记录的用户,比如,以一个智能终端对应一个用户为例,在第一时间周期至第二时间周期内智能终端上存在操作记录,即该用户为活跃用户,或者进一步还可以把应用作为统计维度,即该智能终端的某个应用存在操作记录,则该用户为活跃用户;或者,也可以是以帐号为维度进行统计,一个帐号对应一个用户,这里以即时通讯应用为例说明,用户使用自己的即时通讯帐号在智能终端上的即时通讯应用进行登录操作,则该帐号即产生一条操作记录,在当前时间周期内该帐号对应的用户是活跃用户。用户可以在web前端利用网页查询任意两个时间周期之间活跃用户的总数量,需要说明的是,在第一时间周期至第二时间周期内同一个用户存在多条操作记录,也算一个活跃用户。后台服务器接收web前端发送的查询请求,调用预先处理得到的中间表以及中间表的子表进行分析。S102,获取所述第二时间周期对应的目标中间表的目标子表,所述目标中间表包含截止所述第二时间周期以前每个用户的最近活跃时间周期,所述目标子表为根据所述目标中间表统计得到的截止所述第二时间周期以前每个时间周期内活跃用户的数量;本发明实施例中,后台服务器预先根据各个时间周期内各个用户的活跃情况(比如产生的操作记录),构建每个时间周期对应的中间表,该中间表中包含截止该时间周期以前(包含该时间周期)每个用户的最近活跃时间周期。具体可选的,这里以时间周期为天举例说明,设计模型,增加一层中间表,表名为fact_action_pro_tot,按日期进行分析,字段为:last_day_idapp_idprovince_idimeiDay_id上述表格中各个字段说明:a)Day_id:日期分区键(表示具体是哪一天的中间表)b)last_day_id:用户最后活跃时间周期c)App_id:应用idd)province_id:地区ide)Imei:手机串号,识别用户的唯一ID在一个中间表中,同一维度下的一个用户只有一条记录,即是只记录该用户最新活跃的日期,例如在7月20号的中间表里:fact_action_pro_tot的20160720分区里面的数据有:max_day_idapp_idprovince_idimei201607202486856302279965220160720258686120243668282016071924868612027430456……………………举个例子:假如用户imei=868563022799652,同样的维度在19号和20号都活跃了(即都存在操作记录),20号的中间表只记录最新20号活跃的这条记录。这样中间表格存储的数据就比较少,节省存储空间。某一个时间周期对应的中间表的子表,即是对该中间表中每个时间周期内活跃用户数量的统计得到,比如,上表中包含的时间周期为2016年7月20日和2016年7月19日,则可以统计得到2016年7月20日活跃用户的数量为2,2016年7月19日活跃用户的数量为1。当需要查询第一时间周期至第二时间周期内活跃用户的总数量时,则获取该第二时间周期对应的目标中间表的目标子表,一个时间周期对应一个中间表和一个子表,通过时间周期标识即可获得某个时间周期对应的中间表的子表,如图3所示,以时间周期为2016年7月27为例进行说明,该时间周期的中间表的子表中包含了在应用和地区统计维度下,在该天活跃用户的数量。S103,从所述目标子表中统计所述第一时间周期开始至所述第二时间周期结束中每个时间周期内活跃用户的数量的总和,并将所述总和确定为所述第一时间周期开始至第二时间周期结束内活跃用户的总数量。本发明实施例中,第二时间周期对应的目标中间表的目标子表中包含了截止该第二时间周期以前每个时间周期内的活跃用户的数量,比如第二时间周期是2016年7月27,本实施例统计开始日期为2016年6月1日,则第二时间周期对应的目标中间表的目标子表中包含了2016年6月1日至2016年7月27每天活跃用户的数量,当需要计算第一时间周期至第二时间周期内活跃用户的总数量时,即将在第一时间周期至第二时间周期内每个时间周期活跃用户的数量的总和作为总数量,继续以上述为例进行说明,若需要统计的第一时间周期是2016年7月10日,则在2016年7月27对应的目标中间表的目标子表中,将2016年7月10日至2016年7月27中每天活跃用户的数量相加。本发明实施例中,接收查询请求,该查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量,获取第二时间周期对应的目标中间表的目标子表,该目标中间表包含截止该第二时间周期以前每个用户的最近活跃时间周期,该目标子表为根据目标中间表统计得到的截止该第二时间周期以前每个时间周期内活跃用户的数量,从目标子表中统计第一时间周期开始至第二时间周期结束中每个时间周期内活跃用户的数据的总和,将该总和确定为第一时间周期开始至第二时间周期结束内活跃用户的总数量,本发明通过预先建立中间表以及中间表的子表,从而可以快速查询到活跃用户的总数量,节省存储成本。请参照图2,为本发明实施例提供的数据查询方法的第二实施例流程示意图。本实施例中所描述的数据查询方法,包括步骤:S201,构建每个时间周期对应的中间表,所述中间表包含截止所述时间周期以前每个用户的最近活跃时间周期;可选的,该中间表还可以包含截止所述时间周期以前在各个地理区域使用各个应用的每个用户的最近活跃时间周期,即是把地理区域和应用也作为统计维度,但是相同维度下,同一个用户只存在一条记录,即该用户的最近活跃周期。所述中间表的子表包含截止所述时间周期以前在各个地理区域使用各个应用的每个时间周期内活跃用户的数量。具体可选的,构建每个时间周期对应的中间表的具体步骤可以包括以下步骤:步骤一,针对每个时间周期,获取所述时间周期以前且与所述时间周期相邻的相邻时间周期对应的中间表;步骤二,获取所述时间周期内的至少一个活跃用户的标识;步骤三,根据所述至少一个活跃用户的标识以及所述相邻时间周期对应的中间表中的活跃用户的标识,调整所述相邻时间周期对应的中间表中每个用户的最近活跃时间周期,获得所述时间周期对应的中间表。可选的,调整相邻时间周期对应的中间表的调整方式是,若所述相邻时间周期对应的中间表中的活跃用户的标识与所述至少一个活跃用户的标识中第一标识匹配,则将所述相邻时间周期对应的中间表中所述第一标识所标识的活跃用户的最近活跃时间周期更新为所述时间周期;若所述相邻时间周期对应的中间表中不存在所述至少一个活跃用户的标识中第二标识,则在所述相邻时间周期对应的中间表中添加所述第一标识,并将所述第一标识所标识的活跃用户的最近活跃时间周期确定为所述时间周期。本发明实施例中,每个时间周期对应的中间表的数据产生过程如下,这里以时间周期为天举例说明,把昨天的中间表和今天的数据进行合并(表fact_action_pro_tot取20160719的数据,fact_action_mac_pro取20160720的数据),进行聚合汇总,活跃日期取最大值,把数据放到fact_action_pro_tot的20160720分区里面,HQL语法实现如下:数据特征:fact_action_pro_tot是20日数据,包含了所有imei(用户)的维度数据,每个维度对应的imei只有一条记录,可以理解成,在当天的表,只保留用户最新的记录,如果当天不活跃的用户,保留历史最新的记录;这里是采用空间换时间思路结合阶梯算法生成的结果。S202,根据所述每个时间周期对应的中间表,构建每个所述中间表的子表,所述子表包含截止所述时间周期以前每个时间周期内活跃用户的数量。本发明实施例中,构建每个时间周期对应的中间表的子表,一个时间周期对应一个中间表,一个中间表对应一个子表,子表为根据相应的中间表中数据统计得到。具体可选的,设计模型,增加中间表的子表fact_action_pro_tot_sub,如图3所示,按日期day_id分区,子表字段说明如下:a)Day_id:日期分区键b)last_day_id:最后活跃日期c)app_id:应用IDd)province_id:地区IDe)imei_num:当天活跃用户数数据实现,通过fact_action_pro_tot表进行汇总,统计的结果粒度已不是明细级别的数据,只有维度级别的数据量,因为在1天的数据里面,1个用户只落在某一天(最新活跃的那天),所以数据量很小,每天只有百万级别的数据。在web前端数据库设计日期类型的表(即是中间表的子表),例如fact_action_pro_tot_sub_20160727,生成的结果数据如图3所示。前端web查询设计:查询表是fact_action_pro_tot_sub_YYYYMMDD,查询规则如图4所示,可以查询任意两个时间周期之间,针对某个应用,每个地区活跃用户数的总数量排行。案例1:查询条件:20160526~20160726期间,应用=AmigoPlay(app_id=349),统计各省份在这期间的活跃用户数排行;SQL查询如下(mysql数据库):Selectprovince_id,sum(imei_num)fromfact_action_pro_tot_sub_20160726Whereday_id>=20160526andday_id<=20160726andapp_id=349执行时间是2秒;相当于2秒查了2个月的活跃用户数案例2:查询条件:20160320~20160720期间,应用=AmigoPlay(app_id=349),统计各省份在这期间的活跃用户数排行。SQL查询如下(mysql数据库):Selectprovince_id,sum(imei_num)fromfact_action_pro_tot_sub_20160720Whereday_id>=20160401andday_id<=20160720andapp_id=349执行时间是2秒;相当于2秒查询了4个月的活跃用户数。对应的查询表(中间表的子表),跟查询条件的日期截止时间保持一致,20160320~20160720期间就查20160720这个表,不管多长的日期,查询的数据范围都在单表内完成,所需时间很短。查询活跃用户数,原去重算法count(distinstimei)变成可叠加的算法,sum(imei_num);查询活跃用户数,无法进行预处理的问题得到解决,变成可提前进行预处理。S203,接收查询请求,所述查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量;S204,获取所述第二时间周期对应的目标中间表的目标子表,所述目标中间表包含截止所述第二时间周期以前每个用户的最近活跃时间周期,所述目标子表为根据所述目标中间表统计得到的截止所述第二时间周期以前每个时间周期内活跃用户的数量;S205,从所述目标子表中统计所述第一时间周期开始至所述第二时间周期结束中每个时间周期内活跃用户的数量的总和,并将所述总和确定为所述第一时间周期开始至第二时间周期结束内活跃用户的总数量。本发明实施例步骤S203-S205请参照图1的实施例步骤S101-S103,在此不再赘述。本发明实施例中,接收查询请求,该查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量,获取第二时间周期对应的目标中间表的目标子表,该目标中间表包含截止该第二时间周期以前每个用户的最近活跃时间周期,该目标子表为根据目标中间表统计得到的截止该第二时间周期以前每个时间周期内活跃用户的数量,从目标子表中统计第一时间周期开始至第二时间周期结束中每个时间周期内活跃用户的数据的总和,将该总和确定为第一时间周期开始至第二时间周期结束内活跃用户的总数量,本发明通过预先建立中间表以及中间表的子表,从而可以快速查询到活跃用户的总数量,节省存储成本。请参照图5,是本发明实施例提供的服务器的结构示意图,该服务器可以为后台服务器。本实施例中所描述的服务器包括接收单元10、第一获取单元11以及统计单元12;接收单元10,用于接收查询请求,所述查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量;本发明实施例中,时间周期可以是天、周、月以及年等等,本发明实施例以天为时间周期作为举例说明,第一时间周期可以是某年某月某日,比如2016年7月1日,第二时间周期在第二时间周期之后,比如,第二时间周期可以是2016年9月1日。第一时间周期开始至第二时间周期结束内活跃用户即是在该第一时间周期至第二时间周期内存在操作记录的用户,比如,以一个智能终端对应一个用户为例,在第一时间周期至第二时间周期内智能终端上存在操作记录,即该用户为活跃用户,或者进一步还可以把应用作为统计维度,即该智能终端的某个应用存在操作记录,则该用户为活跃用户;或者,也可以是以帐号为维度进行统计,一个帐号对应一个用户,这里以即时通讯应用为例说明,用户使用自己的即时通讯帐号在智能终端上的即时通讯应用进行登录操作,则该帐号即产生一条操作记录,在当前时间周期内该帐号对应的用户是活跃用户。用户可以在web前端利用网页查询任意两个时间周期之间活跃用户的总数量,需要说明的是,在第一时间周期至第二时间周期内同一个用户存在多条操作记录,也算一个活跃用户。后台服务器接收web前端发送的查询请求,调用预先处理得到的中间表以及中间表的子表进行分析。第一获取单元11,用于获取所述第二时间周期对应的目标中间表的目标子表,所述目标中间表包含截止所述第二时间周期以前每个用户的最近活跃时间周期,所述目标子表为根据所述目标中间表统计得到的截止所述第二时间周期以前每个时间周期内活跃用户的数量;本发明实施例中,后台服务器预先根据各个时间周期内各个用户的活跃情况(比如产生的操作记录),构建每个时间周期对应的中间表,该中间表中包含截止该时间周期以前(包含该时间周期)每个用户的最近活跃时间周期。具体可选的,这里以时间周期为天举例说明,设计模型,增加一层中间表,表名为fact_action_pro_tot,按日期进行分析,字段为:last_day_idapp_idprovince_idimeiDay_id上述表格中各个字段说明:a)Day_id:日期分区键(表示具体是哪一天的中间表)b)last_day_id:用户最后活跃时间周期c)App_id:应用idd)province_id:地区ide)Imei:手机串号,识别用户的唯一ID在一个中间表中,同一维度下的一个用户只有一条记录,即是只记录该用户最新活跃的日期,例如在7月20号的中间表里:fact_action_pro_tot的20160720分区里面的数据有:max_day_idapp_idprovince_idimei201607202486856302279965220160720258686120243668282016071924868612027430456……………………举个例子:假如用户imei=868563022799652,同样的维度在19号和20号都活跃了(即都存在操作记录),20号的中间表只记录最新20号活跃的这条记录。这样中间表格存储的数据就比较少,节省存储空间。某一个时间周期对应的中间表的子表,即是对该中间表中每个时间周期内活跃用户数量的统计得到,比如,上表中包含的时间周期为2016年7月20日和2016年7月19日,则可以统计得到2016年7月20日活跃用户的数量为2,2016年7月19日活跃用户的数量为1。当需要查询第一时间周期至第二时间周期内活跃用户的总数量时,则获取该第二时间周期对应的目标中间表的目标子表,一个时间周期对应一个中间表和一个子表,通过时间周期标识即可获得某个时间周期对应的中间表的子表,如图3所示,以时间周期为2016年7月27为例进行说明,该时间周期的中间表的子表中包含了在应用和地区统计维度下,在该天活跃用户的数量。统计单元12,用于从所述目标子表中统计所述第一时间周期开始至所述第二时间周期结束中每个时间周期内活跃用户的数量的总和,并将所述总和确定为所述第一时间周期开始至所述第二时间周期结束内活跃用户的总数量。本发明实施例中,第二时间周期对应的目标中间表的目标子表中包含了截止该第二时间周期以前每个时间周期内的活跃用户的数量,比如第二时间周期是2016年7月27,本实施例统计开始日期为2016年6月1日,则第二时间周期对应的目标中间表的目标子表中包含了2016年6月1日至2016年7月27每天活跃用户的数量,当需要计算第一时间周期至第二时间周期内活跃用户的总数量时,即将在第一时间周期至第二时间周期内每个时间周期活跃用户的数量的总和作为总数量,继续以上述为例进行说明,若需要统计的第一时间周期是2016年7月10日,则在2016年7月27对应的目标中间表的目标子表中,将2016年7月10日至2016年7月27中每天活跃用户的数量相加。可选的,如图5所示,本发明实施例的服务器还包括第一构建单元13和第二构建单元14;第一构建单元13,用于构建每个时间周期对应的中间表,所述中间表包含截止所述时间周期以前每个用户的最近活跃时间周期;具体可选的,如图6所示,所述第一构建单元13包括第二获取单元130、第三获取单元131以及调整单元132;第二获取单元130,用于针对每个时间周期,获取所述时间周期以前且与所述时间周期相邻的相邻时间周期对应的中间表;第三获取单元131,用于获取所述时间周期内的至少一个活跃用户的标识;调整单元132,用于根据所述至少一个活跃用户的标识以及所述相邻时间周期对应的中间表中的活跃用户的标识,调整所述相邻时间周期对应的中间表中每个用户的最近活跃时间周期,获得所述时间周期对应的中间表。进一步可选的,如图7所示,所述调整单元132可以包括更新单元1320和添加单元1321;更新单元1320,用于若所述相邻时间周期对应的中间表中的活跃用户的标识与所述至少一个活跃用户的标识中第一标识匹配,则将所述相邻时间周期对应的中间表中所述第一标识所标识的活跃用户的最近活跃时间周期更新为所述时间周期;添加单元1321,用于若所述相邻时间周期对应的中间表中不存在所述至少一个活跃用户的标识中第二标识,则在所述相邻时间周期对应的中间表中添加所述第一标识,并将所述第一标识所标识的活跃用户的最近活跃时间周期确定为所述时间周期。可选的,所述中间表包含截止所述时间周期以前在各个地理区域使用各个应用的每个用户的最近活跃时间周期;所述中间表的子表包含截止所述时间周期以前在各个地理区域使用各个应用的每个时间周期内活跃用户的数量。本发明实施例中,每个时间周期对应的中间表的数据产生过程如下,这里以时间周期为天举例说明,把昨天的中间表和今天的数据进行合并(表fact_action_pro_tot取20160719的数据,fact_action_mac_pro取20160720的数据),进行聚合汇总,活跃日期取最大值,把数据放到fact_action_pro_tot的20160720分区里面,HQL语法实现如下:数据特征:fact_action_pro_tot是20日数据,包含了所有imei(用户)的维度数据,每个维度对应的imei只有一条记录,可以理解成,在当天的表,只保留用户最新的记录,如果当天不活跃的用户,保留历史最新的记录;这里是采用空间换时间思路结合阶梯算法生成的结果。第二构建单元14,用于根据所述每个时间周期对应的中间表,构建每个所述中间表的子表,所述子表包含截止所述时间周期以前每个时间周期内活跃用户的数量。本发明实施例中,构建每个时间周期对应的中间表的子表,一个时间周期对应一个中间表,一个中间表对应一个子表,子表为根据相应的中间表中数据统计得到。具体可选的,设计模型,增加中间表的子表fact_action_pro_tot_sub,如图3所示,按日期day_id分区,子表字段说明如下:a)Day_id:日期分区键b)last_day_id:最后活跃日期c)app_id:应用IDd)province_id:地区IDe)imei_num:当天活跃用户数数据实现,通过fact_action_pro_tot表进行汇总,统计的结果粒度已不是明细级别的数据,只有维度级别的数据量,因为在1天的数据里面,1个用户只落在某一天(最新活跃的那天),所以数据量很小,每天只有百万级别的数据。在web前端数据库设计日期类型的表(即是中间表的子表),例如fact_action_pro_tot_sub_20160727,生成的结果数据如图3所示。前端web查询设计:查询表是fact_action_pro_tot_sub_YYYYMMDD,查询规则如图4所示,可以查询任意两个时间周期之间,针对某个应用,每个地区活跃用户数的总数量排行。案例1:查询条件:20160526~20160726期间,应用=AmigoPlay(app_id=349),统计各省份在这期间的活跃用户数排行;SQL查询如下(mysql数据库):Selectprovince_id,sum(imei_num)fromfact_action_pro_tot_sub_20160726Whereday_id>=20160526andday_id<=20160726andapp_id=349执行时间是2秒;相当于2秒查了2个月的活跃用户数案例2:查询条件:20160320~20160720期间,应用=AmigoPlay(app_id=349),统计各省份在这期间的活跃用户数排行。SQL查询如下(mysql数据库):Selectprovince_id,sum(imei_num)fromfact_action_pro_tot_sub_20160720Whereday_id>=20160401andday_id<=20160720andapp_id=349执行时间是2秒;相当于2秒查询了4个月的活跃用户数。对应的查询表(中间表的子表),跟查询条件的日期截止时间保持一致,20160320~20160720期间就查20160720这个表,不管多长的日期,查询的数据范围都在单表内完成,所需时间很短。查询活跃用户数,原去重算法count(distinstimei)变成可叠加的算法,sum(imei_num);查询活跃用户数,无法进行预处理的问题得到解决,变成可提前进行预处理。本发明实施例中,接收查询请求,该查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量,获取第二时间周期对应的目标中间表的目标子表,该目标中间表包含截止该第二时间周期以前每个用户的最近活跃时间周期,该目标子表为根据目标中间表统计得到的截止该第二时间周期以前每个时间周期内活跃用户的数量,从目标子表中统计第一时间周期开始至第二时间周期结束中每个时间周期内活跃用户的数据的总和,将该总和确定为第一时间周期开始至第二时间周期结束内活跃用户的总数量,本发明通过预先建立中间表以及中间表的子表,从而可以快速查询到活跃用户的总数量,节省存储成本。请参照图8,是本发明实施例提供的另一种服务器的结构示意图,该服务器可以应用于后台服务器。本实施例中所描述的服务器包括:至少一个输入设备1000;至少一个输出设备2000;至少一个处理器3000,例如CPU;和存储器4000,上述输入设备1000、输出设备2000、处理器3000和存储器4000通过总线5000连接。其中,上述输入设备1000具体可为服务器的接收器,可以接收web前端所发送的查询请求;上述输出设备2000具体可为服务器的发射器,用于向web前端输出查询结果。上述存储器4000可以是高速RAM存储器,也可为非不稳定的存储器(non-volatilememory),例如磁盘存储器。上述存储器4000用于存储一组程序代码,上述输入设备1000、输出设备2000和处理器3000用于调用存储器4000中存储的程序代码,执行如下操作:上述输入设备1000,用于接收查询请求,所述查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量;上述处理器3000,用于获取所述第二时间周期对应的目标中间表的目标子表,所述目标中间表包含截止所述第二时间周期以前每个用户的最近活跃时间周期,所述目标子表为根据所述目标中间表统计得到的截止所述第二时间周期以前每个时间周期内活跃用户的数量;上述处理器3000还用于从所述目标子表中统计所述第一时间周期开始至所述第二时间周期结束中每个时间周期内活跃用户的数量的总和,并将所述总和确定为所述第一时间周期开始至第二时间周期结束内活跃用户的总数量。上述输出设备2000,用于输出查询得到的所述第一时间周期开始至第二时间周期结束内活跃用户的总数量。可选的,上述处理器3000还用于构建每个时间周期对应的中间表,所述中间表包含截止所述时间周期以前每个用户的最近活跃时间周期;上述处理器3000还用于根据所述每个时间周期对应的中间表,构建每个所述中间表的子表,所述子表包含截止所述时间周期以前每个时间周期内活跃用户的数量。具体可选的,上述处理器3000还用于针对每个时间周期,获取所述时间周期以前且与所述时间周期相邻的相邻时间周期对应的中间表;获取所述时间周期内的至少一个活跃用户的标识;根据所述至少一个活跃用户的标识以及所述相邻时间周期对应的中间表中的活跃用户的标识,调整所述相邻时间周期对应的中间表中每个用户的最近活跃时间周期,获得所述时间周期对应的中间表。可选的,上述处理器3000根据所述至少一个活跃用户的标识以及所述相邻时间周期对应的中间表中的活跃用户的标识,调整所述相邻时间周期对应的中间表中每个用户的最近活跃时间周期,获得所述时间周期对应的中间表具体包括:若所述相邻时间周期对应的中间表中的活跃用户的标识与所述至少一个活跃用户的标识中第一标识匹配,则将所述相邻时间周期对应的中间表中所述第一标识所标识的活跃用户的最近活跃时间周期更新为所述时间周期;若所述相邻时间周期对应的中间表中不存在所述至少一个活跃用户的标识中第二标识,则在所述相邻时间周期对应的中间表中添加所述第一标识,并将所述第一标识所标识的活跃用户的最近活跃时间周期确定为所述时间周期。可选的,所述中间表包含截止所述时间周期以前在各个地理区域使用各个应用的每个用户的最近活跃时间周期;所述中间表的子表包含截止所述时间周期以前在各个地理区域使用各个应用的每个时间周期内活跃用户的数量。本发明实施例中,接收查询请求,该查询请求用于查询第一时间周期开始至第二时间周期结束内活跃用户的总数量,获取第二时间周期对应的目标中间表的目标子表,该目标中间表包含截止该第二时间周期以前每个用户的最近活跃时间周期,该目标子表为根据目标中间表统计得到的截止该第二时间周期以前每个时间周期内活跃用户的数量,从目标子表中统计第一时间周期开始至第二时间周期结束中每个时间周期内活跃用户的数据的总和,将该总和确定为第一时间周期开始至第二时间周期结束内活跃用户的总数量,本发明通过预先建立中间表以及中间表的子表,从而可以快速查询到活跃用户的总数量,节省存储成本。本发明所有实施例中的单元,可以通过通用集成电路,例如CPU(CentralProcessingUnit,中央处理器),或通过ASIC(ApplicationSpecificIntegratedCircuit,专用集成电路)来实现。本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本发明实施例装置中的单元可以根据实际需要进行合并、划分和删减。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1