一种基于数据库逆向统计的报表展示方法及系统
技术领域
发明涉及信息系统领域,尤其涉及互联网大数据技术领域,具体为一种基于数据库逆向统计的报表展示方法及系统。
背景技术
随着云时代的来临,数据成为了信息系统的核心,绝大部分业务系统的逻辑归根结底是对数据的操作,大数据也吸引了越来越多的关注。在大数据背景下大量非结构化数据和半结构化数据在用于查询分析时会花费过多时间和金钱。在常见的信息系统中,通常都会提供报表查询功能,报表可以快速的对整个系统或某些子系统的数据进行统计,然后以直观的方式在页面上呈现出来,用户可以通过报表快速了解整个系统大致的统计信息,也可以直观的看到一些具体的统计报表、趋势走向、或者横(纵)向对比差异。
在传统方式下,信息系统中一个报表展示的大致流程为对数据库请求查询、服务器接收请求并解析请求参数、服务器连接数据库进行查询操作、数据库进行使用结构化查询语言(SQL)查询返回查询统计结果至后台服务器、后台服务器解析数据库查询结果生产报表返回终端界面显示。通常使用传统数据查询在大数据背景下对数据进行查询统计也存在一些弊端:
由于报表查询通常涉及到全表扫描或多个表的联合查询,当数据表中的数据量达到一定的数量级时,全表扫描操作或多个表之间的笛卡尔乘积操作通常计算量非常大且非常耗时,执行一条SQL查询语句的时间长,查询进程缓慢,用户体验差。
统计过程中对CPU资源和内存资源造成较大的消耗。如果程序中使用了数据库连接池,并且支持多线程对数据库访问,程序将并发地执行数据库使用结构化查询语言查询,由于计算机资源有限,可能会造成内存占用率高、竞争导致查询失败、长时间等待导致查询失败问题。
如发明专利CN106066894A的中国申请文件公布了一种数据全缓存方法和数据全缓存装置,其具体公开了根据预先读取数据库中预设类型的数据,将读取到的数据写入缓存,再在接收到目标终端查询目标数据的请求时,在缓存中查询目标数据:若查询到目标数据,向目标终端传输目标数据;若未查询到目标数据,向目标终端传输预设信息,其中,预设信息用于示出未查询到目标数据通过在缓存中预先写入数据库中全部的预设类型的数据,使得无论初次查询目标数据还是再次查询目标数据,都可以根据在缓存查询的结果直接确定服务器中是否存在目标数据,无需在数据库中进行查询,避免了在缓存中写入较多的数据而将缓存设置的较大,提高查询性能,节约了服务器资源。
但是,在该种数据全缓存方法和数据全缓存装置下对数据库数据对数据进行规整并存入缓存,后直接对缓存进行查询统计,若未查询到目标数据,则直接向数据库进行查询,加快数据读取速度,一定程度上减少对计算机CPU资源的占用,降低对内存资源的消耗。但是,后台服务器通过数据库进行正向的统计,需要进行大量的计算和统计工作,没从根本上解决数据量较大时查询进程慢、对计算机资源占用高和对内存资源消耗高的问题。其中缓存为不稳定状态,服务器断电即消失,增加了数据的不稳定性,使服务器必须一直处于供电正常工作状态。
发明内容
本发明针对现有技术存在的问题,提出了一种基于数据库逆向统计的报表展示方法及系统。
本发明采用对数据资源表进行正向查询统计后建立统计缓存表,将所建统计缓存表物理永久性存储于数据库系统中,每次收到数据查询指令后直接对统计缓存表进行查询,使得在对大数据查询时,加快查询速度,增加查询稳定性,减少对CPU资源和内存资源的损耗,降低查询失败的可能性。同时当数据资源表中有数据进行更新后,处于同一事务中的数据缓存表同步进行更新,并且数据缓存表定时进行校验,检测到数据有错误时再次对数据资源表进行逆向查询统计,统计结果存储于统计缓存表中,确保数据的正确有效性。
本发明的上述技术目的是通过以下技术方案得以实现的:
一种基于数据库逆向统计的报表展示方法,包括以下步骤:
步骤S1,建立统计缓存表;
步骤S2,接收数据查询请求并对所述统计缓存表进行查询;
步骤S3,基于查询处理结果展示报表数据;
作为本发明的优选,所述步骤S1具体为:
步骤S11,数据录入数据资源表;
步骤S12,对所述数据资源表使用结构化查询语言进行查询统计并封装生成统计结果;
步骤S13,将统计结果存储于所述统计缓存表。
作为本发明的优选,在所述步骤S1和所述步骤S2之间还包括更新步骤S21:
当所述数据资源表中数据有修改、添加或删除操作时所述统计缓存同步更新。
作为本发明的优选,在所述步骤S1和所述步骤S2之间还包括校验步骤S22:
对所述缓存数据表数据进行校验是否正确,若不正确,则重新对所述数据资源表使用结构化查询语言进行查询统计,生成所述统计结果并把所述统计结果添加至所述统计缓存表并储存。
作为本发明的优选,在所述步骤S1和所述步骤S22之间还包括以下步骤:
设置检验预设时间;
获取当前时间;
判断当前时间是否与预设时间一致,若是,则执行所述校验步骤。
一种基于数据库逆向统计的报表展示系统,包括:
初始建立模块,用于建立统计缓存表;
数据库调度器,用于接收数据查询请求并发送至查询统计模块;
查询统计模块,查询统计缓存表并存储查询结果;
报表展示模块,用于显示所述查询统计模块内的查询结果。
作为本发明的优选,所述初始建立模块包括:
数据录入单元,将数据录入数据资源表;
查询单元,对数据资源表内的数据进行正向结构化查询,并生成统计结果;
结果储存单元,将统计结果储存于统计缓存表。
作为本发明的优选,在所述建立模块和所述接收请求模块之间还包括更新模块。
作为本发明的优选,在所述建立模块和所述接收请求模块之间还包括校验模块。
作为本发明的优选,在所述建立模块和所述执行校验单元之间还包括:
时间预设单元、计时单元、触发单元,所述时间预设单元和所述计时单元分别与所述触发单元相连。
有益效果:
1、对数据资源表进行查询统计后建立的统计缓存表,是对数据的有效统计规整,在查询时直接对已进行统计后的统计缓存表进行数据查询提高查询速度,降低对CPU资源和内存资源的损耗。
2、对数据资源表的操作和对统计缓存表的操作处于同一事务中,保证统计缓存表数据的一致性和有效性,保证了查询数据的可靠性和正确性。
3、系统对统计缓存表在系统业务访问量最小的时间段定时执行校验操作,保证统计缓存表数据的一致性和有效性。
附图说明
图1为本发明一种基于数据库逆向统计的报表展示方法的总流程图;
图2为实施例1中步骤S1的流程图;
图3为本发明一种基于数据库逆向统计的报表展示系统的原理框图;
图4为本发明一种基于数据库逆向统计的报表展示系统的数据库内部逻辑结构框图;
图5为实施例1中初始建立模块的原理框图;
图6为实施例2中校验模块的流程图;
图7为实施例2中校验模块的原理框图。
具体实施方式
以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
当前在大数据背景下对数据库进行查询,实现方式为将读取到数据库中访问频率很高的数据加载到缓存中,在接收到目标终端查询目标数据的请求时,直接在缓存中查询目标数据;若未查询到目标数据,则直接向数据库进行查询,加快数据读取速度,一定程度上减少对计算机CPU资源的占用,降低对内存资源的消耗。但是,后台服务器通过数据库进行正向的统计,需要进行大量的计算和统计工作,没从根本上解决数据量较大时查询进程慢、对计算机资源占用高和对内存资源消耗高的问题。
在本发明中,基于现有传统查询方式建立统计缓存表,将传统方案中的报表统计时的正向查询统计转变为当数据资源表中的数据发生改变时将改变结果反馈给统计缓存表,实现一种逆向统计的效果。
以下为本发明具体实施例。
实施例1
如图1-2,本发明一种基于数据库逆向统计的报表展示方法,包括以下步骤:
步骤S1,建立统计缓存表。
数据库初始状态下,所述统计缓存表内数据为空,需要对已存在的所述数据资源表使用SQL查询语言进行正向查询统计得到统计数据,对所述统计数据进行封装,封装完成后的所述统计结果插入所述数据缓存表中储存,所述数据缓存表储存方式为物理永久缓存。
具体为:
步骤S11,数据录入数据资源表。
数据库初始状态下,数据资源表中不存在数据,需采集数据并录入,主要是针对性地采集需要的数据,可供采集数据的来源可以有多种,如数字电视终端、PC终端以及手机等移动终端等,人工手动输入数据或通过服务器智能导入各平台数据,形成具有数据信息的数据资源表。
步骤S12,对所述数据资源表使用结构化查询语言进行查询统计并封装生成统计结果。
比如数据库中有一张IP资源表,其中以业务维度记载了包含资源信息代码、IP地址、所有人、状态、使用客户名称等字段,其部分数据示例如下表所示:
表一IP资源表
资源信息代码 |
IP地址 |
所有人 |
状态(1为空闲,2为使用中) |
使用客户名称(允许为空) |
resource_infos_code |
ip_address |
ower |
status |
cuetomers_name |
00030005(移动) |
114.141.173.1 |
XXX公司 |
1 |
|
00030006(联通) |
114.141.173.2 |
XXX公司 |
2 |
YYY技术有限公司 |
00030007(电信) |
114.141.173.3 |
XXX公司 |
2 |
ZZZ技术有限公司 |
对已存在数据或数据表格的所述数据资源表使用SQL查询语言进行正向查询统计,查询后得到统计数据,并将查询的统计数据进行封装成统计结果。以上述数据为例,封装完成的所述统计结果为资源类型、各个不同资源类型IP(移动、联通、电信,以资源信息代码区别)总量、各个不同资源类型IP(移动、联通、电信,以资源信息代码区别)已使用量和不同资源类型IP(移动、联通、电信,以资源信息代码区别)统计更新时间。
步骤S13,将所述统计结果存储于所述统计缓存表。
将所得封装结果插入所述统计缓存表,并对添加封装数据后的所述统计缓存表进行储存。以上述举例数据为例,通过查询统计以及业务维度分析得出结果的封装数据。其部分数据示例如下表所示:
表二统计缓存表
资源信息代码 |
资源类型 |
总量 |
已使用总量 |
更新时间 |
resource_infos_code |
rescoure_type |
total_amount |
used_amount |
update_time |
00030005(移动) |
IP |
3000000 |
300000 |
2017/3/1 12:33 |
00030006(联通) |
IP |
2500000 |
500050 |
2017/3/4 9:23 |
00030007(电信) |
IP |
4500000 |
1200000 |
2017/3/3 6:16 |
步骤S2,接收数据查询请求并对所述统计缓存表进行查询。
数据库中的数据库调度器接收外界输入的数据查询指令,对数据查询指令进行解析
解码成数据库语言,通过所述数据库调度器解析后的数据查询指令直接对所述统计缓存表进行查询,经过查询后得到统计数据,并将查询的所述统计数据进行封装成所述统计结果。使用结构化查询语言对所述统计缓存表进行全表扫描执行查询统计,改进了如发明专利CN106066894A仍需要对多个表进行的关联查询,避免了进行笛卡尔乘积的操作,避免大量计算,解决因极大缓存占用的内存不足问题,降低并发执行结构化查询语句导致内存占用率高、竞争导致查询失败、长时间等待导致查询失败等问题。
步骤S3,基于查询处理结果展示报表数据。
查询后已封装完成的所述统计结果插入报表中,报表打包发送至所述数据库调度器,所述数据库调度器将报表进行解析,解码成平台或终端认可语言形式,最后在平台或终端上展示。
如图3-4,本发明一种基于数据库逆向统计的报表展示系统,包括:初始建立模块、数据库调度器、查询统计模块和报表展示模块。所述初始建立模块依次连接所述数据库调度器、所述查询统计模块、所述报表展示模块。所述数据库调度器和所述报表展示模块分别连接所述查询统计模块。
所述初始建立模块,用于建立统计缓存表。
进一步,所述初始建立模块包括数据录入单元、查询单元和结果存储单元。
数据库初始状态下,所述统计缓存表内数据为空,所述数据录入单元在终端人工手动输入或平台智能分析采集数据,在数据库初始状态下,主要是针对性地采集需要的数据,通过数据库调度器解析录入的数据,解码成适用于数据库的数据语言,对经过解码的数据进行封装并插入所述数据资源表中储存,形成具有数据信息的所述数据资源表。
所述查询单元在所述数据资源表中进行,对数据资源表内的数据进行正向SQL查询,完成全表扫描操作,并生成所述统计结果,对所述统计结果进行数据封装。
所述结果存储单元在所述统计缓存表中进行,对已插入所述统计缓存表的所述统计结果(通常为表格形式展示)进行储存,存储成具有数据信息的所述统计缓存表。
进一步,所述统计缓存表存储形式为永久性缓存,与临时缓存不同,不会因为服务器断电或不工作而丢失,无需服务器一直处于运行状态。
数据库调度器,用于接收数据查询请求并发送至查询统计模块。
进一步,所述数据库调度器中包含接收指令单元、解码编译单元、发送单元。所述接收指令单元,用于接收由客户端发出的并已通过服务器编译的查询指令。所述解码编译单元,用于对经服务器编译的过查询指令进行解码编译,编译据库语言。所述发送单元,用于发送通过所述数据库调度器编译的查询指令发送至查询统计模块。
查询统计模块,用于统计缓存表并存储查询结果,在此模块中所述数据库调度器直接发送查询指令至所述统计缓存表,所述统计缓存表接收到查询指令后使用SQL查询语言进行正向查询统计得到统计数据,对所得统计数据进行封装,封装完成后的所述统计结果插入所述数据缓存表中储存,经过统计后生成统计报表
报表展示模块,用于显示所述查询统计模块内的查询结果,所述统计报表在客户端进行展示。
进一步,在所述查询统计模块和报表展示模块之间,所述统计报表经过所述数据库调度器的解码后发送至服务器,服务器接收经解码后的所述统计报表后进行编译,编译成硬件语言或计算机语言发送至客户端,客户端解析后进行客户端可读化的报表展示。
实施例2
本实施例与实施例1不同之处在于,本实施例中还包括对所述统计缓存表数据的校验。
如图6,本发明一种基于数据库逆向统计的报表展示方法,在所述步骤S1和所述步骤S22之间还包括以下校验步骤:
设置检验预设时间,通过对业务系统访问查询量进行分析,得出全天业务系统访问查询量最小时间点,将此时间点设置成检验预设时间。
获取当前时间,在数据库中建立时间体系,实时获取当前时间。判断当前时间是否与预设时间一致,若是,则执行所述校验步骤。
所述校验步骤实质为对所述统计缓存表中数据进行校验,若校验后发现数据错误则再次对所述数据资源表进行正向结构化查询,完成全表扫描操作,并生成所述统计结果,对所述统计结果进行数据封装,封装完成后将正确的统计结果插入储存至所述统计缓存表中。
通过以上流程能够保证统计缓存表中的统计数据正确性。
如图7,本发明一种基于数据库逆向统计的报表展示系统,在所述建立模块和所述接收请求模块之间还包括校验模块。
具体为:
校验模块还包括时间预设单元、计时单元和触发单元。所述时间预设单元用于对系统预设全天业务系统访问查询量最小时间点,所述计时单元用于获取当前时间,所述触发单元用于判断是否触发对所述统计缓存表的数据校验行为。
所述时间预设单元与所述触发单元相连,所述计时单元与所述触发单元相连。
实施例3
本实施例与实施例1不同之处在于,本实施例中还包括对所述统计缓存表数据的更新。
本发明一种基于数据库逆向统计的报表展示方法,在所述步骤S1和所述步骤S2之间还包括更新步骤S21:
当所述数据资源表中数据有修改、添加或删除操作时所述统计缓存同步更新。
进一步,把对数据资源表的操作和对统计缓存表的操作放在同一事务中,尽可能保证数据完整性和一致性。
本发明一种基于数据库逆向统计的报表展示系统,在所述建立模块和所述接收请求模块之间还包括更新模块。
所述更新模块用于在所述数据资源表中数据有修改、添加或删除操作时所述统计缓存同步更新。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。