01.MOLAP
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 支持很弱( 有些插件类似于pinot 的PQL 语言) ,只能JSON 格式查询;对于去重操作不能精准去重。 - 处理方式复杂,需要流处理引擎将数据
join 成宽表,维护相对复杂;对内存要求较高。
场景
- Kylin:适合对实时数据需求不高,但响应时间较高的查询,且维度较多,需求较为固定的特定查询;而不适合实时性要求高的
adhoc 类查询。 - Druid:数据量大,对实时性要求高且响应时间短,以及维度较少且需求固定的简单聚合类查询
(sum ,count,TopN),多以Storm 和Flink 组合进行预处理;而不适合需要join 、update 和支持SQL 和窗口函数等复杂的adhoc 查询;不适合用于SQL 复杂数据分析的场景。