OLAP
OLAP又分ROLAP和MOLAP(Multidimension OLAP,简称MOLAP)。ROLAP是联机分析处理(OLAP)的一种,是关系性数据库,但是针对多维报表,可以通过事实表连维表的方式来构造,它对存储在关系数据库(而非多维数据库)中的数据作动态多维分析。MOLAP,严格遵照Codd的定义,自行建立了多维数据库,来存放联机分析系统数据,开创了多维数据存储的先河,后来的很多家公司纷纷采用多维数据存储。
传统OLAP架构,解决的更多是离线分析场景的需求,随着大规模数据服务场景的增多,业务侧不断有新的诉求提出,对数据分析的时效性要求变高,当前架构中存储和计算资源耦合,不同业务、时段及用户对二者要求往往不同,导致集群响应不够及时等问题。
OLAP按存储器的数据存储格式分为ROLAP(Relational OLAP)(关系型在线分析)、MOLAP(Multi-dimensional OLAP)(多维在线分析)和 HOLAP(Hybrid OLAP)。
- MOLAP:用空间换时间,基于多维数组的存储模型,也是OLAP最初的形态,特点是对数据进行预计算,以空间换效率,明细和聚合数据都保存在cube中。但生成cube需要大量时间和空间。MOLAP可选Kylin、Druid,
- ROLAP:充分利用所有资源快速计算 ,完全基于关系模型进行存储数据,不需要预计算,按需即时查询。明细和汇总数据都保存在关系型数据库事实表中。ROLAP可选Presto、impala等,ClickHouse则是ROLAP的佼佼者。
- HOLAP :混合模型,细节数据以ROLAP存放,聚合数据以MOLAP存放。这种方式相对灵活,且更加高效。可按企业业务场景和数据粒度进行取舍,没有最好,只有最适合。
按照查询类型划分,OLAP一般分为即席查询和固化查询。
- 即席查询:通过手写sql完成一些临时的数据分析需求,这类sql形式多变、逻辑复杂,对查询时间没有严格要求
- 固化查询:指的是一些固化下来的取数、看数需求,通过数据产品的形式提供给用户,从而提高数据分析和运营的效率。这类的sql固定模式,对响应时间有较高要求。
按照架构实现划分,主流的OLAP引擎主要有下面三点:
- MPP架构系统(Presto/Impala/SparkSQL/Greenplum/Drill等)。这种架构主要还是从查询引擎入手,使用分布式查询引擎,而不是使用hive+mapreduce架构,提高查询效率。
- 搜索引擎架构的系统(es,solr等),在入库时将数据转换为倒排索引,采用Scatter-Gather计算模型,牺牲了灵活性换取很好的性能,在搜索类查询上能做到亚秒级响应。但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级。
- 预计算系统(Druid/Kylin等)则在入库时对数据进行预聚合,进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。
ClickHouse、Doris、Presto和ByConity都是当前比较流行的开源OLAP引擎,它们都具有高性能和可扩展性的特点。
● ClickHouse 是由俄罗斯搜索引擎公司Yandex开发的一个列式数据库管理系统,它专注于大规模数据的快速查询和分析。
● Doris 是一个分布式列式存储和分析系统,它支持实时查询和分析,并可以与Hadoop、Spark和Flink等大数据技术进行集成。
● Presto 是一个分布式SQL查询引擎,它由Facebook开发,可以在大规模数据集上进行快速查询和分析。
● ByConity 是由字节开源的云原生数仓,采用了存储计算分离的架构,实现租户资源隔离、弹性扩缩容,并具有数据读写的强一致性等特性,它支持主流的OLAP引擎优化技术,读写性能非常优异。
‣
‣
Loading...