Mysql数据可视化设计

479 阅读4分钟

本文正在参加「技术专题19期 漫谈数据库技术」活动

随着时代的发展,计算机项目的数据越来越大,在参加项目的过程当中,逐渐的从基本的业务功能实现开始着手做数据的分析(可能是之前自己太菜了,没有参与到),开头是对外部数据的数据进行采集分析,比如:租房信息,比如学员成绩,后来到线上项目的数据分析,比如:访问日志,用户行为分析。整个过程基本可以分为:

1、数据采集,使用爬虫,埋点,问卷等方法获取到数据。

2、数据清洗,对于获取到的数据进行降噪,其实感觉不论哪里来的数据,根据业务逻辑的需求总是有用不到的,所以,从根源上进行将数据清洗一下,会对后面的操作提供相当大的便利,所以,个人感觉数据分析类项目必须先做好数据结构的制定和对接,层层规范,层层清洗,这样项目会顺很多。

3、数据分析,没有经过分析的数据直接摆放在一起其实没有任何价值,只有透过业务逻辑,通过合适的方式,对数据进行整合才可以反应出我们想要的问题。

4、结果展示,数据分析的结果需要通过恰当的数据可视化展板进行承载和展示,才可以给大家一个直观的体现。

今天以nginx日志数据可视化为例来聊一聊基于Mysql做数据展示的思路。

数据采集存储

nginx日志可以记录用户的每一次对服务器的访问,通过对日志分析,可以得到指定时间范围内用户访问的评率,用户访问的内容,用户使用的浏览器等等信息,这些信息对于网站运营优化来说是比较有价值的,所以可以对日志进行分析是比较有价值的,采用awk等命令,或者是对nginx日志进行json格式化,都可以很容易的实现数据的清洗,但是这里建议对nginx日志进行以下设置:

1、nginx日志进行切分,以天进行记录日志,这个可以通过nginx的配置实现,这样的好处就是从开头降低分析的数据量,尤其对每日数据进行实时的展示,十分有必要。

2、nginx日志格式调整为JSON格式,如果直接输出日志,由于不是每条日志都有所有的配置字段的值,导致的问题就是很难将日志的字段切分出来,但是如果以json格式输出的话,不论直接使用python还是其他插件(logstach+ES)都可以很方便,所以说这个层面结局的问题如果放到数据清洗的时候就会很麻烦。

然后,由于这些数据的实时性要求并不高,比如每小时的用户访问量的变化趋势,或者每天用户量变化趋势,所以就可以将数据存放到mysql当中,然后进行查询展示。

存在问题

mysql可以设计一个大表,用来记录nginx分析的信息,但是如果直接对这个表进行查询做为数据可视化的数据的话,可能会特别慢,用户体验很差,而且随着数据量的增大会越来越差。开头想的是对数据库加索引,优化数据库查询语句,但是总感觉解决的策略有些不对,有点硬上的感觉,所以请教了大佬(在这里感谢指点我的大佬),他从设计结构上给出了一个很优雅的策略。

解决方案

首先这个策略给我的第一感觉就是,大佬技术牛不说,真的把数据可视化的业务流程已经吃的透透了,膜拜,我来分享一下自己的立即,大概的思路如下:

1、首先说创建索引,优化查询这个是必然的,但不是唯一的。

2、其次认真的看一下业务场景,对实时性要求不高,所以,可以对整个流程进行如下设计:

1、定时存入,每小时查询一次日志数据,存入数据库当中,这里使用Python脚本解析nginx日志实现。

2、不要直接对存入数据库的表进行查询,而是根据业务逻辑设计新的数据表,然后每小时进行数据查询,把结果集存放到这些表里,也就是把:

前端请求服务端视图,服务端视图查询结果进行计算

转为

脚本定时查询前端需要数据,然后打倒指定表当中,服务器直接查询,提供前端使用。

这样很轻松的降低了服务端查询和计算的压力,提高了请求和响应的效率。不知道大家还有没有更好的方法,欢迎一起讨论啊。

本文正在参加「技术专题19期 漫谈数据库技术」活动