本篇基本是知乎网友温正湖文章的笔记,感兴趣的建议阅读原文:

  • OLAP数仓入门问答-基础篇
  • OLAP入门问答-进阶篇

    数据库分类

  • OLTP 是Online transaction processing的英文缩写,指在线/联机事务处理

  • OLAP 是Online analytical processing的英文缩写,指联机分析处理.OLAP 的对象一般是数据仓库。
  • HTAP 将OLTP和OLAP相融合,在同一个系统中同时提供TP和AP 2种服务,即HTAP产品,国内的数据库创业公司PingCAP的TiDB即是其中的佼佼者。

    性能测试

  • OLTP和OLAP发展到现在已经比较成熟,业界也有些公认的benchmark来进行性能评估。

  • 对于OLTP来说,有sysbench和tpcc测试套件,对于OLAP来说,有tpch和tpcds 2种。

OLAP 分类

(1)MOLAP

  • 1993年Edgar F. Codd提出OLAP概念时,指的就是MOLAP数仓,M即表示多维(Multidimensional)。大多数MOLAP产品均对原始数据进行预计算得到用户可能需要的所有结果,将其存储到优化过的多维数组存储中。
  • 代价:预计算消耗的时间、需求变更时需要重新建模和计算。
  • 适合需求固定、数据量大的场景。
  • 典型产品:Apache Kylin

(2)ROLAP

  • 无需预计算,直接在构成多维数据模型的事实表和维度表上进行计算。R即表示关系型(Relational)。显然,这种方式相比MOLAP更具可扩展性,增量数据导入后,无需进行重新计算,用户有新的查询需求时只需写好正确的SQL语句既能完成获取所需的结果。
  • 相比于 MOLAP 使用门槛低,只需要将星型/雪花模型建立好即可。
  • 局限:返回结果的时间不可控,可能很耗费时间。
  • 目前生产环境使用较多的开源ROLAP主要可以分为两大类,一个是宽表模型,另一个是多表组合模型(就是前述的星型或雪花型)。

    宽表模型

  • 宽表模型能够提供比多表组合模型更好的查询性能,不足的是支持的SQL操作类型比较有限,比如对Join等复杂操作支持较弱或不支持。

  • 典型产品:druid、clickhouse
  • ElasticSearch和Solar也可以归为宽表模型。但其系统设计架构有较大不同,这两个一般称为搜索引擎。对于搜索类的查询效果较好,但当数据量较大或进行扫描聚合类查询时,查询性能会有较大影响。

    多表组合

  • 常见的包括GreenPlum、Presto和Impala等,他们均基于MPP架构,采用该模型和架构的系统具有支持的数据量大、扩展性较好、灵活易用和支持的SQL类型多样等优点。

  • 相比其他类型ROLAP和MOLAP,该类系统性能不具有优势,实时性较一般。通用系统往往比专用系统更难实现和进行优化,这是因为通用系统需要考虑的场景更多,支持的查询类型更丰富。而专用系统只需要针对所服务的某个特定场景进行优化即可,相对复杂度会有所降低。

    (3)HOLAP

  • H 是指 Hybrid,尝试将两者的优点互补。

  • 对于查询频繁而稳定但又耗时的那些SQL,通过预计算来提速;对于较快的查询、发生次数较少或新的查询需求,像ROLAP一样直接通过SQL操作事实表和维度表。
  • 但目前没有开源产品属于这个类型。

(4)HTAP

  • 从另一个维度看,HTAP也算是一种OLAP类型的系统,是ROLAP的一个扩展,具备了OLAP的能力。最新发展显示,有云厂商在HTAP的基础上做了某种妥协,将T(transaction)弱化为S(Serving),朝HSAP方向演进。

ROLAP 性能优化

  • 目前生产环境中系统采用的架构包括基于传统的MapReduce架构加上SQL层组装的系统;主流的基于MPP的系统;其他非MPP系统等。
  • 基于 MR 的缺陷:
    • (1)每个MapReduce 操作都是相互独立的,无法跨 MR 进行优化。
    • (2)每一步的结果,都会持久化到 HDFS 上。
  • MPP 架构
    • massively parallel processing的简称,即大规模并行计算框架。
    • 相比 MR,查询速度快,甚至可以在毫秒内返回查询结果,所以很多强调低延迟的系统,大多采用 MPP 架构。
    • MPP中间结果驻留内存不落盘,基于流水线处理无需等待上一个计算完成,所以性能比MR好。
    • 但扩展性不够,系统节点进一步增多后,性能无法线性提升。故障率提高会导致重新执行 sql 的概率提高。
    • MPP 适合执行时间不会太久的业务场景。
  • 其他非 MPP
    • Hive 基于 Tez
    • Spark 基于 DAG

      开源 OLAP

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