OLAP引擎介绍及比较
所属分类 OLAP
浏览量 2319
OLAP(On-Line Analytical Processing)
联机分析处理 大规模数据分析及统计计算
数据量大 高速响应 灵活交互 多维分析
存储类型分类
ROLAP(RelationalOLAP)
MOLAP(MultidimensionalOLAP)
HOLAP(HybridOLAP)
处理类型分类
MPP架构
搜索引擎架构
预处理架构
开源解决方案
MPP架构 ROLAP Presto SparkSQL Impala SnappyData
预处理架构 MOLAP Druid Kylin
搜索引擎架构 ES
列式数据库 ClickHouse IndexR
数据规模 响应时间 并发 实时性 SQL能力 去重能力 join能力 update能力 存储能力 成本
基于MPP架构的ROLAP引擎
Presto Impala SparkSQL等利用关系模型来处理OLAP查询,通过并发来提高查询性能
优点
支持的数据规模大(非存储引擎)
灵活性高
易用性强,支持标准SQL以及多表join和窗口函数
处理方式简单,无需预处理,没有冗余数据
缺点
性能较差,当查询复杂度高且数据量大时,可能分钟级别的响应。
非存储引擎,没有本地存储,当join时shuffle开销大,性能差
SparkSql只是计算引擎,需要从外部加载数据,数据的实时性无法保证 ,多表join的时候性能很难秒级响应
基于Spark SQL的AP引擎,如:TiSpark(TiKV作为存储)、SnappyData
实时性较差,不支持数据的实时导入,偏离线处理
预计算引擎架构的MOLAP
Kylin 完全的预计算引擎,通过枚举所有维度的组合,建立各种Cube,提前聚合,以HBase为基础的OLAP引擎
Druid 轻量级的提前聚合(roll-up),同时根据倒排索引以及bitmap提高查询效率 ,时间序列数据存储引擎
优点
Kylin
支持数据规模超大(HBase)
易用性强,支持标准SQL
性能很高,查询速度很快
Druid
支持的数据规模大(本地存储+DeepStorage–HDFS)
性能高,列存压缩,预聚合加上倒排索引以及位图索引,秒级查询
实时性高,可通过kafka实时导入数据
缺点
Kylin
灵活性较弱,不支持adhoc查询;没有二级索引,过滤时性能一般;不支持join以及对数据的更新
处理方式复杂,需要定义Cube预计算;当维度超过20个时,存储可能爆炸式增长;无法查询明细数据;维护复杂
实时性差,很多时候只能查询前一天或几个小时前的数据
Druid
灵活性适中,虽然维度之间随意组合,但不支持adhoc查询,不能自由组合查询,无明细数据
易用性较差,不支持join,不支持更新,sql支持很弱,只能JSON格式查询;不能精准去重
处理方式复杂,需要流处理引擎将数据join成宽表,维护相对复杂;对内存要求较高
场景
Kylin
实时性不高,响应时间要求高,维度较多,需求较为固定的特定查询
Druid
数据量大,对实时性要求高且响应时间快,维度较少且需求固定的简单聚合类查询(sum,count,TopN),
一般结合storm和flink进行预处理;
不适合需要join、update和支持SQL和窗口函数等复杂的adhoc查询;
不适合用于SQL复杂数据分析的场景
搜索引擎架构
ES
倒排索引,采用Scatter-Gather计算模型提高查询性能。
对于搜索类的查询效果较好,当数据量较大时,对于Scan类和聚合类为主的查询性能较低
优点
性能较高,支持倒排索引和各种过滤后的聚合查询
实时性强,在文档上建立完索引后,立刻可以查询
处理方式简单,无需预处理
缺点
支持的数据规模较小,高并发不理想
灵活性差,不支持复杂的adhoc查询
易用性差,不支持SQL;DSL成本高,且不能精准去重
场景
全文检索,数据规模较少 过滤条件很多的聚合查询,并发度也不大的场景。
纯列存OLAP
ClickHouse 列存数据库,保存原始明细数据, MergeTree 数据存储本地化
单机版超高性能的数据库
优点
性能高,列存压缩比高,通过索引实现秒级响应
实时性强,支持kafka导入
处理方式简单,无需预处理,保存明细数据
缺点
数据规模一般
灵活性差,不支持任意的adhoc查询,join支持不好
易用性较弱,SQL语法不标准,不支持窗口函数 ,维护成本高
场景
适合数据规模不大 单机 单表的数据分析
基于内存
SnappyData 计算与存储引擎,全内存、行列混合存储,不需预处理,支持SQL与Spark SQL
兼顾MPP的特点且colocate特性使得数据本地化,支持join、列表的update以及窗口函数等任意的adhoc查询
优点
性能高,列存压缩+全内存,数据状态共享,秒级查询
实时性强,支持kafka stream table以及实时导入
处理方式简单,无需预处理,保存明细数据,数据本地存储
灵活性高, 支持任意字段的查询、update以及窗口函数和复杂的adhoc查询
易用性强,支持标准SQL和Spark SQL,精准去重
缺点
数据规模中等,全内存导致成本较高,且需要关注GC问题
维护成本高
场景
SnappyData适合数据规模中等(PB以下),需求变化较多,实时性要求较高、响应时间较短且复杂的窗口函数类查询;
同时适合查询明细数据以及探索式的adhoc查询
大数据SQL引擎
OLAP ROLAP MOLAP HOLAP
上一篇
下一篇
Spring JMX
JVM Attach机制
arthas原理简介
clickhouse MergeTree 和 Distributed 存储引擎
后浪程序员
大数据常用存储格式