小米大数据平台OLAP架构演进
一、数据仓库
1、离线数据仓库的架构
数据仓库一般架构
分析型系统进行联机数据分析,一般的数据来源是数据仓库,而数据仓库的数据来源为可操作型系统,可操作型 系统的数据来源于业务数据库中,那么我们常用的数据仓库的组成和架构一般如下图所示
上图将数据分为业务源头系统和数据仓库系统:
其中数据仓库系统又包括操作型(ODS)系统和数据仓库系统两部分。
操作型(ODS)系统的数据主要来自于各业务数据系统中,这其中包括:
①关系型数据库
②平面文件(文本文件,CSV文件,XML文件)等
③还有网络爬虫抓取的开放的数据等。
数据的种类也丰富多元:有结构化数据、半结构化数据、非结构化数据等,这些数据会通过抽取、转换和装载从 ODS进入到数据仓库系统中。
数据仓库常用架构
在数据仓库技术演进过程中,产生了几种主要的架构方法,包括 Inmon 企业信息工厂架构、 Kimba数据仓库架 构。
Inmon 企业信息工厂架构
企业数据仓库是企业信息化工厂的枢纽,是原子数据的集成仓库,但是由于企业数据仓库不是多维格式,因此不适合分析型应用程序,BI工具直接查询。他的目的是将附加的数据存储用于各种分析型系统。
数据集市,是针对不同的主题区域,从企业数据仓库中获取的信息,转换成多维格式,然后通过不同手段的 聚集、计算,最后提供最终用户分析使用,因此Inmon把信息从企业数据仓库移动到数据集市的过程描述为“数据 交付”。
Kimball 的维度数据仓库
Kimball 的维度数据仓库是基于维度模型建立的企业级数据仓库,它的架构有的时候可以称之为“总线体系结 构”,和 inmon 提出的企业信息化工厂有很多相似之处,都是考虑原子数据的集成仓库。
这两种结构的相似之处:
一、都是假设操作型系统和分析型系统是分离的;
二、数据源(操作型系统)都是众多;
三、ETL整合了多种操作型系统的信息,集中到一个企业数据仓库。
最大的不同就是企业数据仓库的模式不同:inmon是采用第三范式的格式,kimball采用了多维模型–星型模型, 并且还是最低粒度的数据存储。
其次,维度数据仓库可以被分析系统直接访问(这种访问方式毕竟在分析过程中很少使 用)。
最后就是数据集市的概念有逻辑上的区别,在kimball的架构中,数据集市用维度数据仓库的高亮显示的表的子 集来表示。
在kimball的架构中,有一个可变通的设计,就是在ETL的过程中加入ODS层,使得ODS层中能保留第三范式的一组表 来作为ETL过程的过渡。但是这个思想,Kimball看来只是ETL的过程辅助而已。另外,还可以把数据集市和企业维 度数据仓库分离开来,这样多一层所谓的展现层(presentationlayer),这些变通的设计都是可以接受的,只要符合企业本身分析的需求。
混合型结构数据仓库指的是结合inmon和 kimball 两种结构的架构,可以从下图的结构中看出来,将 Inmon 架构 中的数据集市部分内容替换成了一个多维的数据仓库,二数据集市是多维数据仓库上的逻辑视图。使用这种架构的 好处是,既可以利用规范化设计消除数据冗余,保证数据的粒度足够细;又可以利用多维结构更为灵活地在企业中 实现报表和联机分析工作。
2、维度数据建模
维度数据建模主要应用于数据仓库的设计,维度模型是一种进行查询的设计技术。
维度建模中两个核心概念是事实表和维度表。
1. 事实表主要是围绕观察数据的角度,事实表通常是对具体的度量,可以对其进行聚合、累加、计算;
2. 维度表是站在什么角度去看待问题,一组层次关系比如时间、组织、部门、地域等维度表。
维度数据建模的流程
维度数据建模的方式一般有星型模型和雪花模型、星座模型,较为常用的是星型模型。所谓星型模型就是将事实表 作为数据分析的中心,将维度表环绕着事实表。一般使用以下过程构建维度模型分为如下四个步骤:
1. 待分析的业务流程
建模的第一个步骤就是描述需要建模的业务流程,简单来说就是要分析某个业务先将此业务需求的相关业务流程梳理清楚,比如说分析订单销售情况,就要将订单表和订单详情相关的业务通过统一建模语言UML等进行梳理;
2. 确定分析的粒度
确定了分析的业务流程之后,确定事实表中要分析的业务数据的粒度,比如说订单表中的订单是秒级数据,一般从 业务流程中获取的数据都是最细(最低)粒度的数据,同一个业务分析中不要使用多种粒度,一般情况下只是用一种粒 度,比如说统计某一天(或某一个小时的)的订单总金额和订单总笔数。
3.确定分析的角度也就是维度
确定分析的纬度主要取决于分析的粒度,比如说要分析某小时或者某一天的数据,就需要时间维度进行分析,就需 要维度表——时间表。如果需要进行小区、大区、全国进行数据分析就需要使用组织维度进行分析。
4.确认使用到的事实表
待分析的业务确定下来之后,就需要获取分析的事实表(可度量)的数据表。事实表的数据都是可度量的,能够进行累加,统计的数字型数据。
3、数据集市
数据集市相比较于数据仓库最大的区别是,数据仓库数据来源于外部业务系统,外部系统数据等,而数据集市来源于数据仓库的数据;
两者的粒度是不同的,数据仓库的数据是最细粒度的数据,而数据集市是较粗粒度的数据; 数据仓库是面向企业主题的,数据集市是面向部门或者工作组的;
数据仓库是从业务库来的规范化结构数据,而数据集市是满足星型模型、雪花模型或者星座模型或者星型和雪花型模型的混合型维度模型等。