一、OLAP介绍
1. OLAP简介
OLAP(Online AnalyticalProcessing)是一种数据处理技术,专门设计用于支持复杂的分析操作,侧重对决策人员和高层管理人员的决策支持。数据仓库对外数据能力的一种重要的输出方式。
- OLAP遵循以下准则1. OLAP模型必须提供多维概念视图2. 透明性准则3. 存取能力准则4. 稳定的报表能力5. 客户/服务器体系结构6. 维的等同性准则7. 动态的稀疏矩阵处理准则8. 多用户支持能力准则9. 非受限的跨维操作10. 直观的数据操纵11. 灵活的报表生成12. 不受限的维与聚集层次
- OLAP场景的关键特征1. 大多数是读请求2. 数据总是以相当大的批(> 1000 rows)进行写入3. 不修改已添加的数据4. 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列5. 宽表,即每个表包含着大量的列6. 较少的查询(通常每台服务器每秒数百个查询或更少)7. 对于简单查询,允许延迟大约50毫秒8. 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)9. 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)10. 事务不是必须的11. 对数据一致性要求低12. 每一个查询除了一个大表外都很小13. 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中
2. OLAP与OLTP
- OLTP系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作,强调事务性。典型作为后端服务的数据来源。
- OLAP系统则强调数据分析,强调SQL执行时长,强调磁盘I/O,强调分区。典型作为数据报表、数据产品的数据来源。
- OLTPOLAP使用场景在线业务服务数据分析,数据挖掘DB设计面向应用面向主题数据存储最新的数据历史的,多数据源的DB大小MB-GBGB-EB时间要求实时响应不严格要求数据模型关系模型(3范式)维度模型主要应用数据库数据仓库代表MySQLSQL on Hadoop、Kylin
3. OLAP常规操作
- 上卷(Roll Up)/聚合:选定某些维度,根据这些维度来聚合事实,如果用SQL来表达就是select dim_a, aggs_func(fact_b) from fact_table group by dim_a.
- 下钻(Drill Down):上卷和下钻是相反的操作。它是选定某些维度(维度之间有层级关系,典型如年、月、日),将这些维度拆解出小的维度(如年拆解为月,省份拆解为城市),之后聚合事实。
- 切片(Slicing、Dicing):选定某些维度,并根据特定值过滤这些维度的值,将原来的大Cube切成小cube。如dim_a in (‘CN’, ‘USA’)
- 旋转(Pivot/Rotate):维度位置的互换。
二、OLAP引擎分类
目前市面上主流的开源OLAP引擎包含不限于:Hive、Spark SQL、Presto、Kylin、Impala、Druid、Clickhouse、Doris等,可以说目前没有一个引擎能在数据量,灵活程度和性能上做到完美,用户需要根据自己的需求进行选型。
主流的 OLAP 可以分为3类:多维 OLAP ( Multi-dimensional OLAP )、关系型 OLAP ( Relational OLAP ) 和混合 OLAP ( Hybrid OLAP ) 三大类。
1. 多维OLAP
MOLAP的典型代表是:Druid、Kylin,MOLAP一般会根据用户定义的数据维度、度量(也可以叫指标)在数据写入时生成预聚合数据;Query查询到来时,实际上查询的是预聚合的数据而不是原始明细数据。
优点:数据预处理,将原始数据按照指定的计算规则预先做聚合计算,这样避免了查询过程中出现大量的即使计算,提升了查询性能。
缺点:限制后期数据查询的灵活性
2. 关系OALP
ROLAP的典型代表是:Presto,Impala,GreenPlum,Clickhouse,Elasticsearch,Hive,Spark SQL,Flink SQL,Doris。数据写入时,ROLAP并未使用像MOLAP那样的预聚合技术;ROLAP收到Query请求时,会先解析Query,生成执行计划,扫描数据,执行关系型算子,在原始数据上做过滤(Where)、聚合(Sum, Avg, Count)、关联(Join),分组(Group By)、排序(Order By)等,最后将结算结果返回给用户,整个过程都是即时计算,没有预先聚合好的数据可供优化查询速度,拼的都是资源和算力的大小。
优缺点,与MOLAP恰好相反
3. 混合OLAP
混合 OLAP,是 MOLAP 和 ROLAP 的一种融合。当查询聚合性数据的时候,使用MOLAP 技术;当查询明细数据时,使用 ROLAP 技术。在给定使用场景的前提下,以达到查询性能的最优化。
三、各引擎对比
1. 简单查询对比
简单查询指的是点查、简单聚合查询或者数据查询能够命中索引或物化视图。这样的查询经常出现在【数据产品服务】应用中,如阿里的生意参谋、腾讯的广点通等。这种查询通常有几个特点:对响应时间要求高;查询模型相对固定(可以通过数仓建模进行部分预计算);并发量大。从下图可以看出,这些场景最合适的是,Elasticsearch、Doris、Druid、Kylin这些。
2. 复杂查询对比
复杂查询指的是复杂聚合查询、大批量数据SCAN、复杂的查询(如JOIN)。在ad-hoc场景中,经常会有这样的查询,往往用户不能预先知道要查询什么,更多的是探索式的。像ES、Druid、Kylin,几乎是不支持这种查询。
3. 执行模型对比
- Scatter-Gather执行模型:相当于MapReduce中的一趟Map和Reduce,没有多轮的迭代,而且中间计算结果往往存储在内存中,通过网络直接交换。Elasticsearch、Druid、Kylin都是此模型。
- MapReduce:Hive是此模型
- MPP:MPP学名是大规模并行计算,其实很难给它一个准确的定义。如果说的宽泛一点,Presto、Impala、Doris、Clickhouse、Spark SQL、Flink SQL这些都算。
四、各引擎介绍
4. Hive
Hive是一个分布式SQL on Hadoop方案,底层依赖MapReduce计算模型执行分布式计算。Hive擅长执行长时间运行的离线批处理,数据量越大,优势越明显。而且Hive需要的几乎仅仅是硬盘资源,节省成本,稳定性高,仍是OLAP引擎的主流选择之一。不过目前有被SparkSQL取代之势。
MapReduce计算模型执行分布式计算。Hive擅长执行长时间运行的离线批处理,数据量越大,优势越明显。而且Hive需要的几乎仅仅是硬盘资源,节省成本,稳定性高,仍是OLAP引擎的主流选择之一。不过目前有被SparkSQL取代之势。
未完待续…
版权归原作者 W.zhaolin 所有, 如有侵权,请联系我们删除。