最近一直在做统计相关的项目,项目背景和行业方向就不做过多的描述,针对已经做过的工作,整理下开发中的得与失,以及常见的统计技巧。
一、项目架构。
项目开发工具:IDEA2018-02
开发语言:java1.8_131
数据库:mysql5.7.1
项目架构:springboot(后端)+bootstrap、thymeleaf(前端)。
二、数据库统计技巧
1.建立统计表,程序或数据库执行定时任务跑出数据,通过执行统计sql将数据插入统计表。报表统计直接查询统计表。
方案优点:大量数据下查询速度快,数据响应及时。方案缺点:定时任务需控制时间,做不到实时查询。
2.建立存储过程,对执行统计sql语句相对复杂但并不耗时的数据库操作,建立对应的存储过程。本人测试过,存储过程对且繁调调用20秒左右的sql,可提高查询时间3-5秒,具体根据数据量而定。
方案优点:一定程度提高查询效率,sql错误直接修改数据库,程序0改动。方案缺点:无法显著提高查询时间,复杂sql实时查询依旧慢。
三、程序缓存
1.ehCache+springcache做程序缓存,对界面查询缓慢的数据,可放在程序缓存中。在查询条件不改变时,可直接先查询缓存取出数据。
方案优点:直接从内存或磁盘取出,查询速度快。方案缺点:数据非实时,更改查询条件依然查询慢。
目前项目采用的基本还是传统的java项目实现思路,除部分统计做到实时查询,相对复杂的运算统计逻辑存在一定延时。未来更近一步的解决思路,借助大数据相关的技术,提高项目的性能,做出根据数据特征的态势感知,真正去挖掘数据背后的价值。
开发总结:
1.数据统计一定建立在对数据结构,业务方向逻辑充分了解的前提下。预先理清需求,时间维度可能变化的量,统计项中不确定的量。
2.动手写统计sql之前,一定要弄清对照数据的来源,在写好统计后对照来源数据,确保数据的准确性。
3.设计不合理之处及时指出,统计项要有数据来源,数据出处,即追溯到元数据,无原始特征数据协调解决。数据发掘不能时空中楼阁。