亿级数据,秒级响应,Smartbi究竟如何做到?

ぃ、小莉子 提交于 2021-02-09 11:57:34

关于Smartbi,似乎有很多标签:真Excel、复杂报表、性能、自助分析、数据挖掘、NLP….其中,一个“性能”标签,江湖上就有很多的传说,例如应用于火星探测器飞行数据的分析,应用于某省的经济普查,应用于某银行的大规模数据挖掘等等。

 

356.jpg

 

数据处理的性能,对于一款BI软件来说,是最基本的要求。然而,恰恰最基本的要求,却最能体现产品的品质,使其在众多竞品中脱颖而出。

 

那么,Smartbi又是如何做到数据处理性能如此强悍呢?

 

 

一、支持列式数据库

 

传统行式数据库的存储格式按照‘行’的方式把一行各个字段的数据存储在一起,一行行连续存储。对于把一行的数据写到数据库中,或者对一行数据中的某些字段进行修改,或者删除整行数据这些事务型的数据库操作来说,既直观也高效。

 

但是,在行式数据库上做统计分析的时候,这种存储格式效率并不高。例如:统计各地区的销售额和利润同比变化、统计各部门的业绩完成情况等等,都是在其中某些字段上的操作,但行式数据库却需要读取每一行的所有字段。在只分析销售额和利润的时候,把其它字段的数据如客户名称,签约时间,客户经理等等也统统都读了进来,浪费了大量资源。虽然通过“索引”有一定的改善,但大量的索引所带来的存储空间浪费以及为维护这些索引所带来的时间浪费都会以指数级别增长。

 

357.jpg

图源:网络

 

列式数据库将同一个数据“列”的各个值存放在一起,插入某一行数据时,该行各个数据列的值也会存放到不同的地方。上例中列式数据库只需要读取存储着“地区、销售额、利润”的数据列,而行式数据库需要读取所有的数据列。因此,列式数据库大大地提高了大数据量统计分析的效率,特别适合分析型的数据仓库。当然,列式数据库不是万能的,每次读取某个数据行时,需要分别从不同的地方读取各个数据列的值,然后合并在一起形成数据行。因此,如果每次查询涉及的数据量较小或者大部分查询都需要整行的数据,列式数据库并不适用。

 

358.jpg

图源:网络

 

正因为列式数据库在统计分析的效率上拥有无可比拟的优势,因此Smartbi将其作为提升数据处理性能的主要手段,也即Smartbi的“高速缓存库”。高速缓存库除了支持Smartbi自主研发的SmartbiMPP列式数据库外,也支持市面上主流的列式数据库如Infobright、Vertica、Presto+Hive、星环等。

 

当我们需要处理大规模数据时,可以先把数据抽取到高速缓存库中再进行统计分析。因为高速缓存库实际上是连接某个列式数据库,所以数据处理性能会得到极大的提升。在Smartbi的抽取过程中,支持分批次将数据写入到高速缓存库中,既能保证查询速度又避免占用太大内存;同时也支持多线程并发抽取,支持按实时、全量、增量等不同的方式抽取,进一步提升了抽取效率。

 

 

二、支持MPP

 

MPP(Massively Parallel Processing)指大规模并行处理,是将任务并行地分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。采用MPP架构的数据库称为MPP数据库。

 

传统数据库无法支持大规模集群与PB级别数据量,单台机器性能受限、成本高昂,扩展性受限。随着数据量的不断增长,采用MPP数据库成为必然的选择。MPP数据库由多个SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。其基本特征是由多个SMP服务器(节点)通过节点互联网络连接而成,每个节点只访问自己的本地资源(内存、存储等),是一种完全无共享结构,因而扩展能力最好,理论上其扩展无限制。

 

359.jpg

图源:网络

 

从名字可以看出,SmartbiMPP不仅是一款列式数据库,也是一款MPP数据库,支持集群部署和大规模并行处理,对数据处理性能有明显的提升。Infobright、Vertica、Presto+Hive、星环等列式数据库同样都采用MPP分布式架构,可以由多节点组成集群。因此,支持这些MPP数据库的Smartbi高速缓存库,是Smartbi提升大规模数据处理性能的又一利器。

 

 

三、支持缓存

 

Smartbi除了支持列式数据库和MPP,还采用一种常见的性能提升技术:缓存。缓存储存最近从数据文件中读取的数据块,其中的数据可以被用户访问。如当我们利用Select语句从数据库中查询员工信息的时候,其首先不是从数据文件中去查询这个数据,而是从缓存中去查找,而没有这个必要再去查询磁盘中的数据文件了。只有在数据缓存中没有这个数据的时候,数据库才会从数据文件中去查询。因为读取内存的速度比读取磁盘的速度要快很多倍,所以这种机制可以提高数据的整体访问效率。

 

Smartbi中,为了提高统计分析的性能,也采用了缓存技术,叫“对象缓冲池”,用于缓存系统中用到的数据集定义及最近使用的查询结果等。产品的对象池是存储在内存中,对象缓冲池可以增强系统在并发时的性能,减少服务器的压力,提高用户报表查询速度。用户打开组合分析、透视分析、电子表格刷新数据时,服务器利用对象缓冲池获取数据的流程如下:

 

360.jpg

 

除了以上三种提升性能的主要手段,在Smartbi层面也有很多可以优化的策略。例如可以将Smartbi也部署在集群上以提高并发处理能力;系统设置分页策略为SQL分页;把分组报表的扩展方式设置为“覆盖”等等。当然,对SQL语句的优化,通常也可以起到立竿见影的效果。

 

总之,Smartbi正是通过多方面的手段用以提高数据处理的性能,从而保证在众多的大规模数据应用场景中游刃有余。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!