1.4 OLAP实现技术的演进
在介绍了OLAP几种主要的架构之后,再来看看它们背后技术的演进过程。我把这个演进过程简单划分成两个阶段。
第一个可以称为传统关系型数据库阶段。在这个阶段中,OLAP主要基于以Oracle、MySQL为代表的一众关系型数据实现。在ROLAP架构下,直接使用这些数据库作为存储与计算的载体;在MOLAP架构下,则借助物化视图的形式实现数据立方体。在这个时期,不论是ROLAP还是MOLAP,在数据体量大、维度数目多的情况下都存在严重的性能问题,甚至存在根本查询不出结果的情况。
第二个可以称为大数据技术阶段。由于大数据处理技术的普及,人们开始使用大数据技术重构ROLAP和MOLAP。以ROLAP架构为例,传统关系型数据库就被Hive和SparkSQL这类新兴技术所取代。虽然,以Spark为代表的分布式计算系统,相比Oracle这类传统数据库而言,在面向海量数据的处理性能方面已经优秀很多,但是直接把它们作为面向终端用户的在线查询系统还是太慢了。我们的用户普遍缺乏耐心,如果一个查询响应需要几十秒甚至数分钟才能返回,那么这套方案就完全行不通。再看MOLAP架构,MOLAP背后也转为依托MapReduce或Spark这类新兴技术,将其作为立方体的计算引擎,加速立方体的构建过程。其预聚合结果的存储载体也转向HBase这类高性能分布式数据库。大数据技术阶段,主流MOLAP架构已经能够在亿万级数据的体量下,实现毫秒级的查询响应时间。尽管如此,MOLAP架构依然存在维度爆炸、数据同步实时性不高的问题。
不难发现,虽然OLAP在经历了大数据技术的洗礼之后,其各方面性能已经有了脱胎换骨式的改观,但不论是ROLAP还是MOLAP,仍然存在各自的痛点。
如果单纯从模型角度考虑,很明显ROLAP架构更胜一筹。因为关系模型拥有最好的“群众基础”,也更简单且容易理解。它直接面向明细数据查询,由于不需要预处理,也就自然没有预处理带来的负面影响(维度组合爆炸、数据实时性、更新问题)。那是否存在这样一种技术,它既使用ROLAP模型,同时又拥有比肩MOLAP的性能呢?