我们在一些上过商业智能BI报表的企业看到他们经常吐槽,一个报表点一次查询,然后中午出去吃个饭或者出去抽两根烟,半个小时过去了,回来看一下,商业智能BI报表还是没有出来,为什么?应该如何优化?
为什么商业智能BI分析报表很慢
商业智能BI 分析报表查询慢,这是商业智能BI分析领域的一个常态。实际上,我们了解一下其中的原理,大概就能理解慢的原因,以及以后如何优化的一个方向。
大部分的商业智能BI工具都是基于B/S 架构的。B指的就是Browser 浏览器,S 指的就是 Server 服务器。每一次来自浏览器的点击,都是通过HTTP协议像服务器发送一次 Request 请求,一次商业智能BI分析报表的查询本质上发送了一条 SQL 查询命令到了应用服务器端通过程序翻译再到数据库服务器做了一次数据查询动作。
如果这个商业智能BI分析报表的SQL查询本身就比较复杂,底层数据模型建立的又不好,或者在数据库服务器硬件环境配置本身也不好的情况下,这条SQL的执行可能就需要花费很长的时间。这个是第一个时间损耗的点。
第二个点就是商业智能BI分析报表的SQL查询可能返回了大量的数据,比如几十万、上百万、上千万、上亿的数据,这个数据最后打包通过HTTP协议Response响应返回,需要通过网络返回到Browser 浏览器端,几十万的数据可能有上百兆MB,上百万、上千万的数据可能是几百兆(MB)甚至一个GB的数据。大家试想一下平时下载个电影需要多长时间,下载一个几百兆的文件需要多长时间,这个还跟网络带宽有很大的关系,这个是第二个时间损耗的点。
数据返回到浏览器前端,在可视化图表展现的时候,如果在商业智能BI分析报表中写了很多复杂的表达式、聚合函数,数据需要消耗本地浏览器所在电脑大量的内存来完成数据的计算。前端指标计算、条件表达式和各类聚合函数设计的越多,需要的时间就越长,这个就是第三个时间损耗的点。
最后就是页面的渲染,商业智能BI分析报表中可视化图表越多、结构越复杂、列越多,数据渲染通过HTML组织到最后的呈现时间就越长,这个就是第四个时间损耗的点。
到最后页面全部加载完成,HTTP 请求终止与服务器断开连接。
商业智能BI分析报表应该如何优化
在整个商业智能BI分析报表制作过程中,大量的时间损耗主要集中在数据查询、大数据量的返回,以及基于大数据量下的前端聚合函数、条件表达式的时间损耗上。
所以,商业智能BI分析报表的优化首先要解决的就是在数据库服务器上的查询效率,SQL 的结构要合理、底层数据模型的结构要合理,这是SQL层面的优化,更是数据模型的优化。同时,减少商业智能BI分析报表中数据的返回量,减少网络带宽的消耗,数据返回量小了,最终到前端聚合和渲染的速度也会加快。这样整个从查询到返回到展现的时间都会大大缩短。
有的朋友说,用户就是要查询大量的数据展现在商业智能BI分析报表上怎么办,还是按照刚才的四个点去分析。第一,通过设置合理的联动查询条件,逐步减少数据量的返回。第二,通过设置分页将查询分散在每一次与Server 的交互上,也可以减少数据量的返回。第三,提前将能够聚合的数据逻辑在服务器端完成,将计算前置,或者使用列式数据库或者分布式计算来减少查询阶段的时间消耗,都可以实现纯二维报表的优化。
当然也有朋友说使用C/S架构的商业智能BI工具是不是就可以解决这个问题。C/S架构的原理是Client 客户端和Server 服务器端的架构,将数据加载到本地电脑内存来计算,在性能和效率上比B/S架构确实要快很多。但C/S架构的商业智能BI工具就意味着需要在每个用户的本地电脑上安装一套客户端软件,有多少用户就需要安装多少,并且在程序升级方面需要单独独立的升级,不太适合大批量的用户。
与C/S架构的商业智能BI工具不同,B/S架构中用户只需要通过电脑上自带的浏览器随时访问报表,所有的程序升级都是在服务器上一次性升级就可以完成。不过还是要明白,B/S架构和C/S架构没有孰优孰劣,只是在不同的场景下各有优劣。
好的,今天的分享就到这里,关注大数据和商业智能BI,喜欢我们内容的朋友,欢迎点赞支持。