具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本实施例中所涉及的时间有两种,一种是统计端的操作系统时间,一种是数据时间,即数据本身包含的时间属性的值。为便于描述,在后文的描述中,将统计端的操作系统时间简称为系统时间,将数据时间简称为时间,即没有特殊说明的时间均为数据时间。类似的,以统计端的操作系统时间为基准确定的时间窗口称为系统时间窗口,以数据的时间属性值为基准确定的时间窗口称为数据时间窗口。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
为解决现有技术中的数据归档方法造成的数据统计不准确的问题,本申请实施例1提供一种数据归档方法。该方法的执行主体,可以但不限于为服务器统计端。
为便于描述,下文以该方法的执行主体为统计端为例,对该方法的实施方式进行介绍。可以理解,该方法的执行主体为统计端只是一种示例性的说明,并不应理解为对该方法的限定。
该方法的实现流程示意图如图1所示,包括下述步骤:
步骤11:将第一数据加载到存储有第二数据的第一存储器中;
本实施例中,第一存储器可以是易失性存储器,也可以是非易失性存储器,易失性存储器包括但不限于内存,非易失性存储器包括但不限于闪存、只读存储器。为便于描述,在后续描述中将以第一存储器是内存为例,对本申请实施例进行说明。
其中,所述第一数据,为统计端在至少一个时间窗口内获得的数据,所述第二数据,为时间属性所表示的时间在有效时间区间内的数据。
一般地,获得第一数据的时间窗口,可以晚于所述有效时间区间,且与所述有效时间区间完全不重叠;或者,获得第一数据的时间窗口,也可以与所述有效时间区间有部分重叠。为便于描述,实施例1中均以前者为例,对本申请实施例提供的该方法进行描述。
本实施例中,数据为包含时间属性的数据,数据的时间属性一般为数据的生成时间。比如,数据可以为日志数据,而日志数据的时间属性,可以是该日志数据的生成时间。
在将第一数据加载到存储有第二数据的内存中前,可以预先对数据进行采集。通过各种途径产生的数据均适用于本实施例,比如可以是网站内部产生的日志数据,也可以是互联网中的网页数据,等等。
对于不同途径产生的数据可以采用不同的数据采集方式。当所述数据为网站内部产生的日志数据时,则可以通过分布式日志收集系统对数据进行收集,分布式日志收集系统可以通过应用程序编程接口(Application Programming Interface,API)对数据进行采集。当所述数据为互联网中的网页数据时,则可以通过网页采集器对网页数据进行采集。
统计端可以将在同一系统时间窗口采集到的数据写入缓存器的同一分区表中。
需要说明的是,由于业务侧的数据是不断产生的,因此对数据的采集一般是实时进行的。为了避免数据频繁写入缓存器造成系统资源的浪费,同一系统时间窗口采集到的数据可以一次写入缓存器的同一分区表中。统计端后续可以将最新存入缓存器分区表中的数据加载到内存中,而之前已经加载过的数据将不会被重复加载。为了便于与其它数据进行区分,我们可以将最新存入缓存器分区表中的、待加载到内存中的数据称为第一数据。即,本申请实施例中所述的第一数据,一般表示当前系统时间窗口内获得的数据。
需要说明的是,本申请实施例中所述的第一数据,也可以是在时间轴上排列在当前系统时间窗口之前的其他系统时间窗口(可称为历史系统时间窗口)内获得的数据。第一数据具体是当前系统时间窗口内获得的数据,还是历史系统时间内获得的数据,本申请实施例不做限定。为便于描述,下文均以该第一数据为当前系统时间窗口内获得的数据为例,对该方法的实施方式进行介绍。
在实际应用中,所述缓存器可以是数据仓库。相应地,数据仓库工具比如可以是Apache Hive,Apache Hive是由Apache公司开发的一种开源的数据仓库工具,可以很方便地管理、查询和分析数据仓库中的数据。
需要说明的是,将采集到的数据预先保存到数据仓库中再加载到内存中只是本方法的一种优选方案,本方法也可以将采集到的数据直接加载到内存中,而不利用数据仓库先对数据进行存储。
本实施例中,当缓存器中存入新的数据(即第一数据)时,统计端会将第一数据加载至内存中,随着时间的推移,后续不同时间窗口内获得的数据也会被陆续加载至内存中。由于内存大小的限制,内存中缓存的数据量会受到限制,同时一些时间很久的数据并没有很高的分析利用价值,所以,为了基于存储量有限的内存,存储有较高分析利用价值的数据,可以通过设置有效时间区间的方式,来对内存中的数据进行过滤,以使得内存中保存的是时间属性表示的时间属于该区间的数据。该区间的大小,一般取决于实际需求,本申请实施例对此不作限定。
本申请实施例中,根据有效时间区间对数据进行过滤,可以是周期性进行的,也可以是在向内存中加载完第一数据后执行的。本申请实施例中,针对内存中的、时间属性表示的时间不属于所述区间的数据,可以通过释放该数据占用的内存的方式,达到过滤该数据的目的。
当然,本申请实施例中,也可以不采用对内存中的数据进行过滤的机制,而是定期(如每隔一定的周期)对内存中保存的所有数据进行替换。
本申请实施例中,可以将在第一数据加载到内存之前就缓存在内存中的数据,称为第二数据。当然,这里所说的内存中的数据,并非是泛指内存中的任何数据,而是特指待进行归档的数据。
在实际应用中,第二数据比如可以是数据时间属性值所表示的时间在最近6小时以内的数据。有效时间区间的长度可以根据业务需求进行设置。比如当业务决策人员只关注最近2小时的实时统计结果时,将超过2小时的历史数据进行回补统计是没有任何意义的,因此可以将有效时间区间设置为最近2小时。
在第一数据加载到内存中后,相对于下一次将被写入内存的新采集的数据,缓存于内存中的数据便称作第二数据。即第一数据和第二数据是根据数据所处状态而命名的,并不是对数据的绝对描述。
步骤12:采用按数据的时间属性进行归档的方式,对所述内存中的第一数据和第二数据进行归档。
本实施例中,按数据的时间属性归档,可以是指将第一数据加载到内存中后,按照数据的时间属性所表示的时间由先至后的顺序,对数据进行排序;然后,针对重新排序后的数据,将数据的时间属性所表示的时间处于同一数据时间窗口的数据归为同一档,这样第一数据中处于有效时间区间的历史数据便可以回补到对应的数据时间窗口中,从而完成对该历史数据的归档。
本申请实施例中,将不同数据时间窗口的数据进行分类归档,可以通过计算框架准确分析各个数据时间窗口的数据。其中,计算框架,是指用于对数据进行计算分析的系统,该系统能够实现的计算任务,通常由软件程序调用计算机硬件来完成的。
本实施例中对数据归档的目的,可以是对归档后的数据集合进行统计。因此在归档完以后,计算框架会调用计算逻辑对各个数据集合中的数据进行计算统计。比如统计00:00~00:10这一时间段内登录网站的人数时,内存计算框架可以通过调用“count”计算逻辑来对00:00~00:10这一时间窗口内的数据进行计算。
在本申请实施例中,可以基于内存计算框架对数据归档。内存计算框架将数据存放于内存中,并通过多线程处理器和多机并行对内存中的数据进行快速计算,实现对大数据进行挖掘的目的。本实施例中涉及内存的操作步骤均可通过调用内存计算框架来实施。
在实际应用中,内存计算框架一般为开源的内存计算框架,比如可以是Apache的Spark计算框架。利用开源的内存计算框架,我们可根据本实施例中的方法对现有的内存计算框架进行二次开发,以便将本方法进行实施应用。
基于上述统计计算,内存计算框架会将计算结果写入到数据库中,由于在内存中存储有多个数据时间窗口的数据,在第一数据加载到内存中进行归档后,数据时间窗口中的统计结果可能会有变化,因此内存计算框架每次统计完后会将统计结果覆盖写到数据库中。
在实际应用中,根据归档目的的不同,为了提高内存计算框架的计算效率,本实施例中的第二数据也可以是其它类型数据。比如,第二数据可以为有效时间区间内的数据归档后的统计结果,在第一数据加载到内存后,统计端只对第一数据中的数据按照时间属性进行归档,将对于第一数据的统计结果和内存中缓存的统计结果进行运算得到新的统计结果,进而将新的统计结果覆盖写入到数据库中。
采用本申请实施例提供的上述方法,由于可以通过以第二数据和统计端在至少一个时间窗口内获得的数据(第一数据)共同作为归档对象,从而即便发生了数据乱序,延迟传输到统计端的数据也可以作为第一数据被加载到内存中,并与第二数据共同作为归档对象,而不是简单地被丢弃,从而可以解决现有技术中由数据乱序问题导致的数据统计不准确的问题。
需要说明的是,实施例1所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。
实施例2
本申请实施例2,主要介绍本申请实施例1提供的上述方法在实际中的一种应用方案。
本申请实施例2中的数据归档方法与实施例1中所述数据归档方法相似,实施例2中没有介绍到的数据归档方法的其他一些功能可以参见实施例1中的相关描述,此处不再赘述。
在对该方案的实现方式进行详细介绍前,先对该方案的实施场景进行简单介绍:
本申请实施例中的第一存储器为内存,第二存储器为数据仓库。
本实施例2中的数据为日志数据,统计端按自身的操作系统时间,每隔10分钟将接收到的日志数据加载到内存中一次,使得内存计算框架在内存中始终持有最近6个小时的日志数据(即第二数据)。最近6小时内登录网站的日志数据如表一所示,其中,从表一的第二行起,每一行表示一条日志数据。基于表一,本实施例2假设统计端需要统计登录时间处于10:00~10:10这个时间段内的用户数。
表一:
用户名 |
用户标识 |
登录时间 |
性别 |
A |
01 |
10:01 |
男 |
B |
02 |
10:03 |
男 |
C |
03 |
10:05 |
女 |
基于上述假设,实施例2中对如表一所示的第二数据和当前的系统时间窗口内采集的数据进行归档的过程如图2所示,包括下述步骤:
步骤21:统计端实时采集日志数据;
步骤22:分布式日志收集处理框架对采集的日志进行预处理,将收集的日志数据统一成某种特定格式(比如如表1所示的格式),以便对数据批量分析;
步骤23:按照统计端的操作系统时间,每隔10分钟,分布式日志收集处理框架将当前的系统时间窗口内采集的日志数据写入数据仓库的一个分区表中;
其中,这里所说的系统时间窗口,是以统计端的操作系统时间为基准的。
本申请实施例2中,假设数据仓库的一个分区表中存储有在长度为10分钟的系统时间窗口内采集的日志数据。
步骤24:将最近一次写入数据仓库分区表中的、在当前的系统时间窗口采集的日志数据(即第一数据)加载至内存中;
比如,假设所述第一数据如表二所示,并且,表二所示的各日志数据到达统计端的时间为11:35,比如表一所示的第二数据到达统计端的时间10:35晚了1个小时。
表二:
D |
04 |
10:06 |
女 |
E |
05 |
10:08 |
男 |
在将第一数据加载至内存中后,内存中当前缓存的数据包括表1和表2中的所有数据。
步骤25:在内存中对所有日志数据按登录时间和预设的时间窗口设置方式,进行归档;
若假设以网站的系统时间0点为计时起点,每10分钟作为一个时间窗口,则用户名分别为A、B、C、D、E的日志数据均被归为10:00~10:10这一时间窗口内。
步骤26:对归档的日志数据进行统计;
则10:00~11:00这一时间窗口内的登录数量为5。
步骤27:将统计结果覆盖写到数据库中。
假设用户名分别为D、E的日志数据,是在11:35才到达的,因此在11:35之前的计算结果中,10:00~10:10这一事件窗口内的登录数量为3。那么通过上述步骤得到新的登录数量5之后,需要将新的统计结果覆盖之前的统计结果写到数据库中。
采用本申请实施例提供的上述方法,由于可以通过以第二数据和统计端在至少一个时间窗口内获得的数据(第一数据)共同作为归档对象,从而即便发生了数据乱序,延迟传输到统计端的数据也可以作为第一数据被加载到内存中,并与第二数据共同作为归档对象,而不是简单地被丢弃,从而可以解决现有技术中由数据乱序问题导致的数据统计不准确的问题。
实施例3
为解决采用现有技术由于数据乱序导致的数据统计不准确的问题,本申请实施例提供一种数据归档装置。该数据归档装置的结构示意图如图3所示,主要包括下述功能单元:
数据加载单元31,用于将第一数据加载到存储有第二数据的内存中;所述第一数据,为统计端在至少一个时间窗口内获得的数据;所述第二数据,为时间属性所表示的时间在有效时间区间内的数据;
数据计算单元32,用于采用按数据的时间属性进行归档的方式,对所述内存中的第一数据和第二数据进行归档。
所述数据加载单元31,具体用于从将预设的缓存器中的第一数据,加载到所述内存中。
数据写入单元33:用于在将第一数据加载到存储有第二数据的内存中前,按照将所述统计端在同一时间窗口获得的数据写入所述缓存器的同一分区表中的方式,将所述第一数据写入所述缓存器。
所述预设的缓存器包括数据仓库。
所述第一数据为所述统计端在当前时间窗口内获得的数据。
所述第一存储器包括内存。
所述数据计算单元32,具体用于按照预设的有效时间区间,从所述内存中,删除与所述有效时间区间不匹配的数据,得到更新后的数据,采用按数据的时间属性进行归档的方式,对所述更新后的数据进行归档。
采用本申请实施例提供的上述装置,由于可以通过以第二数据和统计端在至少一个时间窗口内获得的数据(第一数据)共同作为归档对象,从而即便发生了数据乱序,延迟传输到统计端的数据也可以作为第一数据被加载到内存中,并与第二数据共同作为归档对象,而不是简单地被丢弃,从而可以解决现有技术中由数据乱序问题导致的数据统计不准确的问题。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。