olap与数据仓库的关系及区别


大数据域系统非常庞大,最近对自己的数仓部分有所了解,做一些记录。

为了更好地理解OLTP和OLAP的概念,我们先介绍一下OLTP,操作对象是数据库,也叫OLTP数据库(如Mysql),主要用于CRUD操作,对于高并发、低延时,一般用作业务数据。

与OLAP相比,OLAP是一种在线分析处理,做数据分析用的,比如要进行数据聚合操作,它对数据源的操作要求比较低。活动目标为数仓。有时,OLAP与数据仓库的关系就是olap等同于数仓。

通常的多维度模型为多维度模型,分层,ETL处理。其数据源有多种来源和多种格式,例如结构化数据和非结构化数据。

通过ETL处理,需要对业务有深入的了解,例如,MySQL被用作商业,例如,商业中可能有许多表类型,在数仓制之后,就可以进行重新建模,例如划分维度表和事实表。

目前我们面临两个问题,第一,ETL机制很弱,基本上是把MySQL库导入数仓;第二个业务库更改之后,需要重新构建,一直滞后于对业务数据库的理解。

那么数据仓库的作用何在?可以进行交互查询,数据分析,数据挖掘,BI报告。

基于对数仓的理解,还有许多分类,例如:

1:按照模型的不同,分为MOLAP,ROLAP。

MOLAP需要进行预计算,存储可能的查询结果,以适合于分析比较稳定的场景,Kylin是该领域的解决方案。

ROLAP是当前的主流,它基于关系模型,建立在多维数据模型上,一般通过SQL进行查询。

2:关于ROLAP,有两种解决方法,一种是宽表模型,例如,目前比较流行的clockhouse;Presto等多表组合模型。

从实时性上分,分为实时数仓和离线数仓,本文主要了解离线数仓,也称批处理,即数据是预先准备好的,如Hadoop就是这样。

4:OLAP处理的数据量很大,为了加速处理速度,有两个解决方案:并行处理(如Hadoop的Mapreduce)MPP体系结构中的Presto)和预期计算(例如,Kylin)。

那么具体怎么选择呢?

1:我们使用比较传统的Hadoop,采用HDFS作为分布式存储,Mapreduce作为并行计算框架,但是HDFS仅仅存储,没有结构化的概念,如何实现数仓呢?

Hive可以解决两个问题,第一个是存储表结构元数据,第二个是在Hive查询中将sql自动变成MR并行任务,MR从元数据读取信息,再到HDFS读取数据,最后进行运算。

这通常属于离线数仓,HDFS存储全量数据(不支持数据增删和修改,只能覆盖整个文件),使用sqoop工具将MySQL导入HDFS。

2:MPPonHadoop解决方案。

因为对HDFS进行MR操作的中间结果仍然是在磁盘上,运算仍然很慢。

Presto基于MPP体系结构,充分利用了每个节点的cpu能力,在内存中放置中值结果,降低磁盘消耗。

例如,Presto是SQL执行引擎,它本身并不存储数据,它可以直接调用MySQL进行操作。

Hive还可以被调用,读取元数据,然后对HDFS数据进行并行运算。

通过Hive,通过Presto,结合可视化BI工具,可以生成数据报告,用于数据分析和挖掘。

或许,olap与数据仓库的关系就是。

简而言之,BI就是一个公式:

BI平台=数据仓库+OLAP服务/报告。