OLAP数据库初探

OLAP数据库初探

|0x00 OLAP简介

OLAP的标准概念叫作“联机分析处理系统”,与之对应的是OLTP“联机事务处理系统”。OLTP对于事务性的要求非常高,常用于银行、证券等系统,但运行速度相对有限。有感于此,关系数据库之父Codd便在1993年提出了OLAP的概念,认为用户的很多决策需要依赖大量的计算与多维的分析才能解决,并作为一类单独的产品,与OLTP区分开来。

OLAP委员会对联机分析处理的定义为:从原始数据中转化出来的、能够真正为用户所理解的、并真实反映企业多维特性的数据称为信息数据,使分析人员、管理人员或执行人员能够从多种角度对信息数据进行快速、一致、交互地存取,从而获得对数据的更深入了解的一类软件技术。

可以说,OLAP的核心特点是“多维”,OLAP技术也可以称之为“多维度数据分析工具”。

|0x01 OLAP的特点

Codd提出了关于OLAP的12条准则:

  • 1:Multidimensional conceptual view OLAP 模型必须提供多维概念视图;
  • 2:Transparency 透明性;
  • 3:Accessibility 存取能力准则;
  • 4:Consistent reporting performance 稳定的报表能力;
  • 5:Client/server architecture 客户/服务器体系结构;
  • 6:Generic dimensionality 维的等同性准则;
  • 7:Dynamic sparse matrix handling 动态的稀疏矩阵处理;
  • 8:Multi-user support 多用户支持能力;
  • 9:Unrestricted cross-dimensional operations 非受限的跨维操作;
  • 10:Intuitive data manipulation 直观的数据操纵;
  • 11:Flexible reporting 灵活的报表生成;
  • 12:Unlimited dimensions and aggregation levels. 不受限的维与聚集层次。

综上所述,OLAP系统强调了数据分析在系统中的重要性,对于速度等要求有着极高的要求。

目前我们能接触到的开源OLAP包括但不限定于:Hive、Hawq、Spark SQL、Presto、Kylin、Impala、Druid、Greeplum等。有点类似于“蒙代尔不可能三角”,目前没有一个引擎能够在数据量、灵活性和速度上做到完美统一,针对不同的场景,每种数据库的使用范围不同。

|0x02 Hive

Hive是基于HDFS的OLAP应用,一般只用于分析计算,不用于CRUD操作。作为MapReduce的SQL化表达方式,优点是学习成本低,不用学习专门的MapReduce开发,且数据格式可以自定义,扩展性非常好,十分适合做数据仓库。但Hive在数据处理的过程中,并不会直接加工数据,因此通常会扫描全表数据来实现分析功能,计算的延迟非常高。尽管Hive的计算过程动辄以小时计算,但Hive仍然是基于Hadoop体系应用最广泛的OLAP引擎。

官网:https://hive.apache.org/

|0x03 Hawq

Hawq相较于Hive,最大的不同,是采用了MPP架构,改进了针对 Hadoop 的基于成本的查询优化器。除了能高效处理本身的内部数据。无论是功能特性,还是性能表现,HAWQ 都比较适用于构建 Hadoop 分析型数据仓库应用。

官网:http://hawq.apache.org

|0x04 Spark SQL

SparkSQL的前身是Shark,它将 SQL 查询与 Spark 程序无缝集成,可以将结构化数据作为 Spark 的 RDD 进行查询。SparkSQL作为Spark生态的一员继续发展,而不再受限于Hive,只是兼容Hive。

官网:https://spark.apache.org/sql/

|0x05 Presto

Presto 是由 Facebook 开源的大数据分布式 SQL 查询引擎,适用于交互式分析查询,可支持众多的数据源,包括 HDFS,RDBMS,KAFKA 等,而且提供了非常友好的接口开发数据源连接器。

Presto没有使用MapReduce,它是通过一个定制的查询和执行引擎来完成的。它的所有的查询处理是在内存中,这也是它的性能很高的一个主要原因。Presto和Spark SQL有很大的相似性,这是它区别于Hive的最根本的区别。

官网:https://prestodb.github.io/

|0x06 Kylin

提到Kylin就不得不说说ROLAP和MOLAP。

  • ROLAP:以关系模型的方式存储用作多为分析用的数据,优点在于存储体积小,查询方式灵活,然而缺点也显而易见,每次查询都需要对数据进行聚合计算,为了改善短板,ROLAP使用了列存、并行查询、查询优化、位图索引等技术。

  • MOLAP:将分析用的数据物理上存储为多维数组的形式,形成CUBE结构。维度的属性值映射成多维数组的下标或者下标范围,事实以多维数组的值存储在数组单元中,优势是查询快速,缺点是数据量不容易控制,可能会出现维度爆炸的问题。

而Kylin自身就是一个MOLAP系统,多维立方体(MOLAP Cube)的设计使得用户能够在Kylin里为百亿以上数据集定义数据模型并构建立方体进行数据的预聚合。

官网:http://kylin.apache.org/cn/

|0x07 Impala

Impala也是一个SQL on Hadoop的查询工具,底层采用MPP技术,支持快速交互式SQL查询。与Hive共享元数据存储。Impalad是核心进程,负责接收查询请求并向多个数据节点分发任务。statestored进程负责监控所有Impalad进程,并向集群中的节点报告各个Impalad进程的状态。catalogd进程负责广播通知元数据的最新信息。

官网:https://impala.apache.org/

|0x08 Druid

Druid 是一种能对历史和实时数据提供亚秒级别的查询的数据存储。Druid 支持低延时的数据摄取,灵活的数据探索分析,高性能的数据聚合,简便的水平扩展。适用于数据量大,可扩展能力要求高的分析型查询系统。Druid解决的问题包括:数据的快速摄入和数据的快速查询。

官网:https://druid.apache.org/

|0x09 Greeplum

Greenplum是一个开源的大规模并行数据分析引擎。借助MPP架构,在大型数据集上执行复杂SQL分析的速度比很多解决方案都要快。一个重要的信息是,Greenplum基于Postgresql,也就是说GreenPulm和TiDB的定位类似,想要在OLTP和OLAP上进行统一。

官网:https://greenplum.org/

|0xFF

就像美团在调研Kylin的报告中所说的:“目前还没有一个OLAP系统能够满足各种场景的查询需求。其本质原因是,没有一个系统能同时在数据量、性能、和灵活性三个方面做到完美,每个系统在设计时都需要在这三者间做出取舍。”

上一篇:全面的关于OLAP数仓总结


下一篇:OLTP 与 OLAP