网站流最日志分析--数据可视化--动态加载数据--数据格式排序问题剖析 | 学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习网站流最日志分析--数据可视化--动态加载数据--数据格式排序问题剖析

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第五阶段):网站流最日志分析--数据可视化--动态加载数据--数据格式排序问题剖析】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/697/detail/12258


网站流最日志分析--数据可视化--动态加载数据--数据格式排序问题剖析

如何动态的去从数据库加载数据返回到前端,让这些图形表格能够有数据展示?

image.png

以这个图形为例,这个叫做最近七天日平均 PV 量,通过这个 title 可以知道最近七天的平均量大概会是一个柱状图或是一个直线图。 X轴表示的是每一天,Y轴表示的是每一天对应的批量形成一个高低起伏的状况。

问题在于现在这个图形是 loading 的状态,因为没有数据。那么该怎么去突破它呢?

这时不妨按一下浏览器的开发模式,之后再去重新加载这个页面,可以发现当中现在有三个请求包处于 404 单薄平面,PV 量,而这这三个请求正好对应页面上三个没有数据的图形,这些图形背后的知识点大同小异,都是一样的逻辑。

下面重点看一个,比如最近七天的访问量。可以发现在这个加载页面的时候它会发起一个请求,这个请求背后包含的就是向后台去查询数据,返回到前端。接下来就带着这个请求来到页面上,打开开发工具。

现在的首页叫做 index jsp 。在当中可以去查找一下或者是搜索一下,这当中写了很多的代码,有些是页面样式之类。

找到最近七天平均 pv 量:

会是一个什么样的图形?整个可视化开发当中,最大的工作量就是前后端数据的一个问题,下面来画图看一下:

image.png

mychart

.setoption({

title :{

text :'"最近7天日平均PV量

subtext:'动态数据'

},

tooltip:{}, legend :{

data :['日平均Pv量']},

xAxis :{

data : []},

yAxis :{}, series :[ {

name :'日平均PV量', type :'bar', data :[]

});} ]

//loading 动画

myChart.showLoading();//异步加载数据

回到代码动态距离可以发现 title 就是最近七天日平均 pv。下面的 X 轴和 Y 轴现在数据都是空的,而且是一个数组,意味着当前没有数据,它显示 showloading,表示没有数据。什么时候才会把 showloading 的数据屏蔽掉呢?

这个请求就是在页面上刚才发现的请求,叫做 avgpvnum, 意味着这个请求就是向后端动态的加载数据的。当这个请求成功之后把数据做一个回调填充,可以发现 X 轴往里面填,往 y 里面填,也就是说这个异步请求的方法,保证了从后台拿到数据填充到里面的 X 轴和 Y 轴上,然后把 loading 这个动画隐藏掉就可以搞定。

接下来来剖析一下数据格式问题。在前端 XY 轴,它需要的是两个数组,那前端数据需要什么格式比较好?

下面简单画个图:

image.png

这时候后端数据是什么样子呢?这里就涉及到开发的第一个问题。

1. 在规划中重点考虑前后端数据格式问题,那么前端 echarts 往往

需要的都是  js 格式的数据。

后端查询返回的数据格式是多条数据历史的集合。

当然也有其他的数据。前端是 js 格式的数据,后端是去从数据库做一个查询,当前只有一天的数据,那么下面就来模拟一下。打开参考资料。

在这里有一个叫做 sql 的文件夹,里面就是刚才三个表对应的数据,执行这三个数据。

image.png

接下来初始化数据库,打开代码来确认我们所创建的数据库的配置叫什么。

打开 property,配置文件叫做 sqoopdb,因此直接来创建这个数据库。

需要这个 sql 做执行,这里以一个表为例,其他大家可以来灵活的自己来练习。

选择这个数据库叫 sql 文件,点击开始,执行。

执行之后,点刷新,可以发现当前就多了一个表,这个表当中记录的就是模拟的数据,叫做每天的平均pv量:

image.png

来到画板剖析一下,后端的数据格式长的是这个样子。通过查询第七天返回应该是什么格式,可以看到现子操作 mysql 数据库,甚至会创建一个嘉宾跟这个数据库表保持一致,是不是那么一个对象当中有 ID 属性,日期属性和 avg 属性,然后每一条每个对象表示一条记录,记录查询返回的是一个集合里面封装的对象。

image.png

所以后端如果不出意外返回的是历史的集合,里面放的是一个对象,

那么这时必须要做前后端数据格式的转换,是前端迎合后端还是后端迎合前端?

前端使用的是 js,按照它的规范不管怎么查必须要把数据转成 js 扔到前台就可以。所以说这里涉及到前后端数据格式转换问题。

通常是画在后端的时候把数据转成阶层返回到前端,把这个集合做一个便利,把每个月的日期拿出来做一个日期数组,把 Pvg 拿出来做一个 PV 数,然后把它传递到前台就可以了,这也是我们在实际开发中遇到的最大的问题。

也可以往大了说,整个 echarts 数据可视化报表当中大量的工作量就在这个数据格式转换的问题。因为后端查询出来数据,可能是一个表,可能是多个表,可能是不同的数据,但是数据不管长什么样一定要去迎合前端的数据格式,这是第一个要考虑的叫做数据格式问题。

2. 数据排序问题

保证查询返回前端数据是有序的 往往跟时间的顺序相关

第二个问题,刚才画图的时候,看 201812012020304,如果这里面数据是一号、四号、三号、二号、九号、七号,如果是乱序,这时候在柱状图上,或者折线图展示的就不是有规律的波澜。

本来是逐渐递增的,又变成逐渐递减的甚至变成乱七八糟的,因此这里出现一个问题叫做数据排序,这个问题非常重要,尤其涉及到折线柱状,最近几天这种日期的基本上是按照时间的一个过程。

以上就是我们从理论上来推导进行前后端数据格式进行动态加载之后需要考虑的问题,一个是数据格式问题,一个是数据排序的问题。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
19天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
128 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
2月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
439 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
19天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
2月前
|
数据采集 机器学习/深度学习 存储
使用 Python 清洗日志数据
使用 Python 清洗日志数据
39 2
|
2月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
223 0
|
23天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
170 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
255 3
|
4月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
136 3
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1650 14
|
2月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
35 0