各位大神,利用数据仓库技术辅助统计分析,数据库中生成静态表再进行统计分析,这两个哪个效率高呢?

0
已邀请:
2

BAO胖子 - 15年BI经验,涉足电力,快消品,医药,信息服务等行业的BI老兵。 2015-09-19 回答

这个问题描述的不是很清楚,这里尝试澄清并解答。首先,这种问题在实际的项目中是对技术架构的取舍选择,是需要从多个角度审视,综合来看哪种解决方案更合适,而不是仅仅看重查询效能。
 
谈谈我对题主所说的“数据仓库技术辅助统计分析”的理解。 
首先,通常狭义上来讲, MOLAP不能称之为 叫做 “数据仓库技术”,我所理解的数据仓库技术指的是在关系型数据基础上,针对数据仓库需求而增加的特性。比如,物化视图,索引(集簇索引等),数据库分区,表分区等。从查询性能上来讲,无论如何一定是静态表要比如上这些辅助技术要高,而增加静态表会增加ETL的加载,如果查询性能上提升有限,是可以考虑直接使用数据仓库特性的。
这里需要注意的是:物化视图只对full select的SQL(仅有简单的summary运算)有增量刷新的功能。
 
而对于Teradata, Netezza等这类为数据仓库而生的数据库来说,由于他们能够提供数据查询的极高效能,如果没有复杂的运算,我们可以直接使用源表而不做汇总静态表,但对于有复杂查询或者数据量过于大的基础表,还是生成静态表更好一些。这个是一个trade off的过程,需要具体问题具体分析,在没有明确的场景下,是无法判断采用哪种方式合适的。
 
然后,从广义上来讲,MOLAP可以称之为数据仓库技术,这个我猜是题主的原意。同样的问题,会带来ETL的额外负担以及开发维护的额外工作量。其中,这里有多种MOLAP的模式:
1. Hyperion Essbase / Microsoft SSAS
    这两类MOLAP都是用 磁盘 空间换取时间的方式,对于一定规模的数据量,查询效能要比静态表好一些但也会很有限,并且MOLAP更大的好处实际上是对于维度间计算,以及提供丰富的OLAP函数功能。
 
2. Cognos Dynamic Cube / Cognos TM1
    这类MOLAP又有不同,他们采用的方式使用 内存 空间换取时间的方式,查询效能要比静态表好得更多。而TM1能够提供更为丰富的维度计算以及OLAP函数功能。
 
如上均从适度的数据量的假设出发,因为题主的原意应该是静态表是汇总级别的表. 而海量数据对于MOLAP的加载成本以及能否支持都会成问题,通常是不会采用的解决方案。

以上,Architecture Decsion是一个综合性很强的过程,建议不要从效能一个角度出发去审视问题。
 
2

牟瑞 - 大数据 Hadoop 讲师 Hadoop入门课程地址:http://www.hellobi.com/course/39 有架构师,技术总监,CTO的职位请联系我! 2015-09-14 回答

个人的一点经验,有不足,欢迎来讨论
首先数据仓库里面存放的数据是历史数据,历史数据也有数据量的区别,百万,千万,百G,上T等等,不同的数据仓库的数据规模对应着不同的实现方式。
相对来讲,传统行业数据量比较少,SQLServer的SSAS就能满足需求,而且SSAS本身就对数据仓库的存储做了优化,此时,直接绑定SSAS来做多维分析,开发,实施,运维效率等都比较高。
如果数据量再高一个级别,实际上SSAS也是可以满足的,此时的方式是有一个大型的数据仓库,然后面向不同的业务分析的时候,采用小的数据集市的方式来处理。
如果数据量更大,数据集市的维度也比较大,那这个时候可以考虑采用静态表的方式。定时抽取相应的数据到静态表,来做统计分析,也可以利用静态表再作一个小的数据集市,分发下去来方便业务人员进行分析。
随着技术的发展,实时数据分析也可以做到查询效率很高,当然这就需要更大的内存,更好的带宽和数据架构设计。
 
以上,有问题可以随时交流。

要回复问题请先登录注册