发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种能够解决数据汇总数据慢和内存溢出问题的数据汇总方法和装置。
本发明解决其技术问题所采用的技术方案是:提出一种数据汇总方法,包括如下步骤:
S1、获取数据,并分类存入相应的数据文件中;
S2、依据数据汇总需求生成至少一个数据汇总任务;
S3、依据数据汇总任务之间的依赖关系执行每一个数据汇总任务,根据遍历数据文件得到的数据执行该数据汇总任务对应的操作,并在执行该数据汇总任务结束后释放分配的内存。
一个实施例中,所述方法还包括:
S4、生成已执行的数据汇总任务的临时索引文件。
一个实施例中,所述步骤S1具体包括:
S11、获取需要分析的多个数据;
S12、根据数据的生成规则解析获取的数据,得到该数据的属性信息;
S13、依据数据的属性信息将解析后的数据按照指定的格式分类存入相应的数据文件中。
一个实施例中,所述步骤S3具体包括:
S31、依据数据汇总任务之间的依赖关系将生成的数据汇总任务标识为独立任务和关联任务;
S32、对于每个独立任务,遍历数据文件,根据从数据文件遍历得到的数据执行该独立任务对应的操作,并在该独立任务结束后释放执行该独立任务时分配的内存;
S33、对于每个关联任务,遍历数据文件,根据从数据文件遍历到的数据以及每个关联任务中各个子任务之间的先后顺序执行对应的操作,并在该关联任务结束后释放执行该关联任务时分配的内存。
一个实施例中,所述步骤S3具体包括:
S31、将标识为独立任务或关联任务的多个数据汇总任务分成两个组,其中一定数量的任务分入运行组,其余任务分入等待组;
S32、执行运行组中的数据汇总任务;
S33、在运行组中的一个任务执行结束后,将等待组中的一个任务补充到运行组中。
本发明为解决其技术问题还提出一种数据汇总装置,包括:
数据处理模块,用于获取数据并分类存入相应的数据文件中;
任务生成模块,用于依据数据汇总需求生成至少一个数据汇总任务;
任务处理模块,用于依据数据汇总任务之间的依赖关系执行每一个数据汇总任务,根据遍历数据文件得到的数据执行该数据汇总任务对应的操作,并在执行该数据汇总任务结束后释放分配的内存。
一个实施例中,所述数据汇总装置还包括:
索引文件生成模块,用于生成已执行的数据汇总任务的临时索引文件。
一个实施例中,所述数据处理模块具体包括:
数据获取模块,用于获取需要分析的多个数据;
数据解析模块,用于根据数据的生成规则解析获取的数据,得到该数据的属性信息;
数据组织模块,用于依据数据的属性信息将解析后的数据按照指定的格式分类存入相应的数据文件中。
一个实施例中,所述任务处理模块具体包括:
任务标识模块,用于依据数据汇总任务之间的依赖关系将生成的数据汇总任务标识为独立任务和关联任务;
独立任务执行模块,用于遍历数据文件,根据从数据文件遍历得到的数据执行独立任务对应的操作,并在该独立任务结束后释放执行该独立任务时分配的内存;
关联任务执行模块,用于遍历数据文件,根据从数据文件遍历到的数据以及每个关联任务中各个子任务之间的先后顺序执行对应的操作,并在该管理任务结束后释放执行该管理任务时分配的内存。
一个实施例中,所述任务处理模块具体包括:
分组模块,用于建立运行组和等待组,并将标识为独立任务或关联任务的多个数据汇总任务中一定数量的任务分入运行组,其余任务分入等待组;
任务执行模块,用于执行运行组中的数据汇总任务;
任务补充模块,用于在运行组中的一个任务执行结束后,将等待组中的一个任务补充到运行组中。
本发明的数据汇总方法和装置,依据数据汇总的需求生成多个数据汇总任务,并依据数据汇总任务之间的依赖关系来串行或并行执行每一数据汇总任务对应的操作,执行任务结束后即释放执行该任务时分配的内存,从而加快了任务处理速度,减少内存占用,避免内存溢出。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提出一种数据汇总方法和装置,依据数据汇总的需求生成至少一个数据汇总任务,并依据数据汇总任务之间的依赖关系来执行每一数据汇总任务对应的操作,执行任务结束后即释放执行该任务时分配的内存,从而加快了任务处理速度,减少内存占用,避免内存溢出。
图1示出了本发明一个实施例的数据汇总方法100的流程图。如图1所示,该数据汇总方法100包括:
步骤110,获取数据,并分类存入相应的数据文件中。例如,对于话单数据而言,可首先从局方获取各个基站中的话单数据,依据该话单数据的属性将其分类存入多个数据文件中,以便于后续的数据汇总分析。其中,获取数据的方式可以为定时获取或实时获取,定时获取数据的优势在于能够尽快结束整个汇总操作,实时获取数据的优势在于能够及时发现新增的数据,提高汇总结果的可靠性。
步骤120,依据数据汇总的需求生成至少一个数据汇总任务。具体实施例中,可以一个需求对应一个数据汇总任务。例如,以话单数据汇总为例,在需要统计某个手机号码出现的次数时,针对该需求生成一个任务;在需要统计某一范围内出现频率最高的手机号码时,针对该需求生成一个任务。一个具体实施例中,每个数据汇总任务包括该任务的ID和该任务的执行命令,其中,任务的ID用于唯一标识该任务,任务的执行命令用于描述该任务将执行的操作以及执行操作后得到的结果。
步骤130,依据数据汇总任务之间的依赖关系执行每一个数据汇总任务,根据遍历步骤110中的数据文件得到的数据执行该数据汇总任务对应的操作,并在执行该数据汇总任务结束后释放执行任务时分配的内存。
一个具体实施例中,根据生成的数据汇总任务在实现时是否与其它数据汇总任务存在关联,数据汇总任务可以分为独立任务和关联任务。当一个任务必须等待其它某个或某些任务结束以后才能执行时,该任务被标识为关联任务。关联任务包括多个子任务等待和单个任务等待两种情况。有的关联任务需要等待多个子任务完成之后才开始运行。例如,在ID为7的任务依赖于ID为3、4、5的任务时,ID为3、4、5的任务可以称为ID为7的任务的子任务,标识为7@(&,3,4,5),其中,“@”表示依赖关系,“&”表示“与(and)”的意思,该任务7要等待3and4and5结束以后才开始运行。当然,除了“@”符号,也可以采用其它符号表示任务之间的依赖关系。又例如,在ID为7的任务只依赖于ID为3、4、5中任一个任务时,可以标识为7@(|,3,4,5),其中,“|”表示“或(or)”的意思,该指令表示任务7在任务3or4or5结束后就开始运行,即任务3、4、5中只要有一个任务结束,任务7就开始运行。当一个任务独立存在,不依赖于其它任务都能执行时,该任务被标识为独立任务。一个具体实施例中,独立任务可以采用串行或并行的方式来执行。当一个关联任务和另一个关联任务没有依赖关系时,这两个关联任务可以串行或并行执行,否则,只能串行执行。例如,ID=3(已执行);ID=4@(3);ID=5@(3);ID=6@(5),则在执行具有依赖关系的关联任务4和关联任务5时,可以采用串行或并行的方式,而在执行不具有依赖关系的关联任务5和关联任务6时,则需采用串行的方式,先执行任务5再执行任务6。
步骤140,生成已执行的数据汇总任务的临时索引文件。这样,所有任务执行结束最后汇总时,可以直接调用生成的临时索引文件,减少了内存的占用。并且,即使在程序异常退出后,本发明还可以从生成的临时索引文件中恢复已执行的任务的操作结果,保障了程序的可靠运行。
一个实施例中,参见图2所示,上述步骤110具体包括:
步骤111,获取需要分析的多个数据。
步骤112,根据数据的生成规则解析获取的数据,得到数据的属性信息。例如,对于经过加密的话单数据,需要根据数据的加密规则等解析获取的话单数据,得到该话单数据具有的用户标识、主叫号码、被叫号码、通话时长、通话时所在的基站标识等属性信息。
步骤113,依据数据的属性信息将解析后的数据按照指定的格式存入相应的数据文件中。一个具体实施例中,可将解析后具有同一属性的数据按照指定的格式存入同一数据文件中,便于后续的数据分析汇总。例如,将获取的具有同一基站标识的话单数据,按照指定的格式存入同一数据文件中,其中,第一个字段(或称第一个属性)为用户标识,第二个字段为主叫号码,第三个字段为被叫号码等等。
一个实施例中,参见图3所示,上述步骤130具体包括:
步骤131,依据数据汇总任务之间的依赖关系将生成的数据汇总任务标识为独立任务和关联任务。如前所述,当一个任务独立存在,不依赖于其它任务都能执行时,该任务被标识为独立任务;当一个任务必须等待其它某个或某些任务结束以后才能执行时,该任务被标识为关联任务。
步骤132,对于每个标识为独立任务的任务,遍历步骤110中的数据文件,根据从数据文件遍历到的数据执行该任务对应的操作,并在独立任务结束后释放执行该独立任务时分配的内存。这样能够有效地利用内存,防止内存溢出。一个实施例中,可以采用串行或并行的方式执行每个独立任务。
步骤133,对于每个标识为关联任务的任务,遍历步骤110中的数据文件,根据从数据文件遍历到的数据以及每个关联任务中各个子任务之间的先后顺序执行对应的操作,并在关联任务结束后释放执行该关联任务时分配的内存。具体实施例中,当一个关联任务和另一个关联任务没有依赖关系时,这两个关联任务可以串行或并行执行,否则,只能串行执行。
若一台机器上最多只能同时并行运行一定数量(假设5个)的任务,当同时并行运行超出已知数量的任务,假设同时并行运行6个任务(超过5个)时,由于系统资源不够,将导致该机器上的所有任务的运行速度都变慢。针对这一问题,本发明提出步骤130中执行数据汇总任务的另一实施例1300。参见图4所示,该另一实施例的方法1300包括:
步骤1301,将标识为独立任务或标识为关联任务的多个数据汇总任务中一定数量的任务置入运行队列,其余任务置入等待队列。具体实施例中,根据智能终端的处理能力,选择数据汇总任务中的一些任务置入运行队列,其余的置入等待队列。其中,置入运行队列的任务可以只有标识为独立任务的任务,也可以同时包括标识为独立任务的任务和标识为关联任务的任务。
步骤1302,执行运行队列中的数据汇总任务。
步骤1303,在运行队列中的一个任务执行结束后,将等待队列中的一个任务补充入运行队列。
本发明的上述方法将独立任务和关联任务分成两个队列,即运行队列和等待队列,运行队列中是正在运行的任务,等待队列中是正在等待的任务。只要运行队列中有一个任务结束了,就将等待队列中的一个任务补充入运行队列开始运行。以上述一台机器上最多只能同时并行运行5个任务的情况为例,ID=10@(1,2,3,4,5)@(6,7,8,9) ,其中,任务1-5为一个组表示正在运行的任务, 任务6-9为一个组表示正在等待的任务。任务10为一个控制任务,用于控制任务1-9。为了保证只有5个任务同时并行运行,只要任务1-5中有一个任务结束,任务6-9中就会有一个任务补充进来。
图5示出了本发明一个实施例的数据汇总装置200的逻辑结构示意图。如图5所示,该数据汇总装置200包括数据处理模块210、任务生成模块220、任务处理模块230和索引文件生成模块240。其中,数据处理模块210用于获取数据并分类存入相应的数据文件中。任务生成模块220用于依据数据汇总的需求生成至少一个数据汇总任务。任务处理模块230用于依据数据汇总任务之间的依赖关系执行每一个数据汇总任务,根据遍历数据处理模块210生成的数据文件得到的数据执行该数据汇总任务对应的操作,并在执行该数据汇总任务结束后释放执行任务时分配的内存。索引文件生成模块240用于生成已执行的数据汇总任务的临时索引文件,以便于最后汇总时可以直接调用生成的临时索引文件,减少了内存的占用。且,即使在程序异常退出后,本发明还可以从生成的临时索引文件中恢复已执行的任务的操作结果,保障了程序的可靠运行。
一个实施例中,参见图6示,上述数据处理模块210具体包括数据获取模块211、数据解析模块212和数据组织模块213。其中,数据获取模块211用于获取需要分析的多个数据。数据解析模块212用于根据数据的生成规则解析获取的数据,得到该数据的属性信息。例如,对于经过加密的话单数据,数据解析模块212根据数据的加密规则等解析获取的话单数据,得到该话单数据具有的用户标识、主叫号码、被叫号码、通话时长、通话时所在的基站标识等属性信息。数据组织模块213用于依据数据的属性信息将解析后的数据按照指定的格式分类存入相应的数据文件中。一个具体实施例中,数据组织模块213将解析后具有同一属性的数据按照指定的格式存入同一数据文件中,便于后续的数据分析汇总。例如,数据组织模块213将获取的具有同一基站标识的话单数据,按照指定的格式存入同一数据文件中,其中,第一个字段(或称第一个属性)为用户标识,第二个字段为主叫号码,第三个字段为被叫号码等等。
一个实施例中,参见图7所示,上述任务处理模块230具体包括任务标识模块231、独立任务执行模块232和关联任务执行模块233。其中,任务标识模块231用于依据数据汇总任务之间的依赖关系将生成的数据汇总任务标识为独立任务和关联任务。当一个任务独立存在,不依赖于其它任务都能执行时,该任务被标识为独立任务;当一个任务必须等待其它某个或某些任务结束以后才能执行时,该任务被标识为关联任务。对于每个独立任务,独立任务执行模块232遍历数据文件,根据从数据文件遍历得到的数据执行独立任务对应的操作,并在独立任务结束后释放执行独立任务时分配的内存。一个实施例中,可以采用串行或并行的方式执行每个独立任务。对于每个关联任务,关联任务执行模块233遍历数据文件,根据从数据文件遍历到的数据以及每个关联任务中各个子任务之间的先后顺序执行对应的操作,并在关联任务结束后释放执行关联任务时分配的内存。具体实施例中,当一个关联任务和另一个关联任务没有依赖关系时,这两个关联任务可以串行或并行执行,否则,只能串行执行。
若一台机器上最多只能同时并行运行一定数量(假设5个)的任务,当同时并行运行超出已知数量的任务,假设同时并行运行6个任务(超过5个)时,由于系统资源不够,将导致该机器上的所有任务的运行速度都变慢。针对这一问题,本发明提出任务处理模块的另一实施例2300。参见图8所示,该任务处理模块2300具体包括分组模块2301、任务执行模块2302和任务补充模块2303。其中,分组模块2301用于建立运行组和等待组,并将标识为独立任务或关联任务的多个数据汇总任务中一定数量的任务分入运行组,其余任务分入等待组。具体实施例中,分组模块2301根据智能终端的处理能力,选择数据汇总任务中的一些任务置入运行队列,其余的置入等待队列,其中,置入运行队列的任务可以只有标识为独立任务的任务,也可以同时包括标识为独立任务的任务和标识为关联任务的任务。任务执行模块2302用于执行运行组中的数据汇总任务。任务补充模块2303用于在运行组中的一个任务执行结束后,将等待组中的一个任务补充到运行组中。
以上借助方法步骤描述了本发明的技术特征及其关系,所述方法步骤的界限范围和顺序是为了便于描述任意定义的。只要能够实现该技术特征及其关系,也可应用其它界限和顺序。任何这样的其它界限或顺序因此落入本发明的范围和精神实质。
以上还借助功能模块对本发明的技术特征及其关系进行了描述。所述功能模块的界限和各功能模块的关系是为了便于描述任意定义的。只要能够实现该技术特征及其关系,也可应用其它的界限或关系。任何这样的其它界限或关系也因此落入本发明的范围和精神实质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。