日常一提数据分析和可视化,就想到这个工具操作要多简单易用,图表要多美多炫,然而总是忽略背后的数据支撑。
excel几十万行数据就卡死崩,谈何数据透视表、可视化?近千万行的数据,订单提交数据库,sqlsever处理要5分多钟,如果频繁入库/取数的话.....
要知道,为了支撑起业务人员的数据分析,以及日常不考虑计算逻辑和技术难度,IT人员也是要花费很大的心血和精力啊(心疼运维人员n秒)。
随着公司业务的发展,数据量变大是必然的事实。那么,数据部门要做分析,业务部门要看报表,要跑数据,要用BI,大数据量(千万级及以上)的分析,性能该如何优化?
这里借某公司的真实案例,来阐述一下方案。
----------------------------------
作为公司的科技部门人员,经常听到业务部门对自己使用的数据库各种吐槽:
竟然存放在mongoDB中啊,震惊(ΩДΩ)。
数据库慢慢熟悉了还好啊,但是现在每天的数据量越来越大,而且还在增加啊,增加大家很开心,然而数据库并不开心啊,简单的查询统计10多分钟还出不来结果,更不用说有稍微复杂点的统计分析了。
我天天找DBA优化啊,然而并没有什么水花。
数据量还在不断增长,到现在都上亿啦,全量查询统计根本出不来结果啊。
......
最终业务人员找到科技部门提需求要弄个BI系统给处理下。
对mongodb瞄了一大通,这就是个业务库。那直接对接mongodb自然不行,速度慢不说,mongodb挂了,分析系统也瘫了。自然就想到了使用中间库,emmmysqloracle倒是有,可以跑调度抽过来,但是速度依旧不快呢,还要花功夫优化,性价比不高。公司有自己的hadoop平台,将数据抽过来再对接倒是可以,但是要花很大精力跑调度,而且这个数据库不能随意给这个业务部门提供,万一玩挂了可就得不偿失。假设有个具备离线数据存储功能的BI工具,岂不美哉。
于是将市面上有离线数据存储功能的BI工具翻了个遍。期望找到个性能好,可以支持大数据量数据分析的BI工具。
Tableau的hyper功能看起来OK,经不起实际使用,数据量过了亿,等了好久数据抽不好,pass;
其他某BI工具有mpp离线存储,看起来很棒,还能横向扩展,不错。抱有最大期望的用,结果数据量一上亿,直接崩了,崩了,pass;
另一个BI工具去看了看,咦,数据是放在vertica里面的......
后来,找到了FineBI的分布式计算引擎方案,拿的『定制的Alluxio』作为分布式内存存储框架,内存存储有数据安全性的担心,所以持久化层存储用了HDFS。为了数据分析嘛,自然是列式存储的。计算核心则以熟知的Spark,加上自研算法来处理的。使用熟知的zookeeper整合框架,并用于调度通信。
分布式嘛,横向扩展自然不在话下。而列式存储、并行内存计算、计算本地化加上高性能算法,在FineBI中数据展示速度超快。有意思的是其计算本地化的操作,能减少不必要的shuffle,节省数据传输的消耗,提升数据计算速度。
以下记录利用FineBI4.1工具的系统建设过程。
一、需求分析
针对以上的需求,可以预估到,18年内,常用分析预计最大数据量会达到4.7kw,不常用分析会达到3亿到4亿(包含淡季),数据总的体量最多会达到G。后面的情况难以预估,就需要系统可横向扩展节点。
二、方案描述
1.系统架构
根据官方推荐,将FineBI的web应用端与数据存储的分布式引擎放在一个机器上(处于安全考虑,也可以分开。这里不涉及太多部门使用,放一起即可),架构如下所示。
架构图难以理解的话,可以看看灵魂画手的杰作~
结合分布式引擎说明的技术原理,将各个机器再细分化各个组件的作用。
以上,将系统架构规划完成,即可具体完成系统。
2.完成从MongoDB取数
在使用BI工具对接MongoDB的时候,使用MongoDB的BI连接器。
感兴趣可以看:MongoDBDownloadCenter
方案原理:mongodb是非结构的数据库,而要想BI来连接,通过建模的方式取表,拆表,建模来分析。通过MONGODBCONNECTORFORBI连接器的方式,使用mysql的JDBC驱动来获取数据。
实现过程:
第一步:安装MONGODBCONNECTORFORBI
从