数据仓库的架构与设计

1. 什么是数据仓库

1.1 数据仓库的概念

官方定义

数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。

数据仓库的四个特点

面向主题:数据仓库都是基于某个明确主题,仅需要与该主题相关的数据,其他的无关细节数据将被排除掉

集成的:从不同的数据源采集数据到同一个数据源,此过程会有一些ETL操作

随时间变化:关键数据隐式或显式的基于时间变化

l 信息本身相对稳定:数据装入以后一般只进行查询操作,没有传统数据库的增删改操作

简单理解

数据仓库就是整合多个数据源的历史数据进行细粒度的、多维的分析,帮助高层管理者或者业务分析人员做出商业战略决策或商业报表。

1.2 数据仓库的用途

整合公司所有业务数据,建立统一的数据中心

产生业务报表,用于作出决策

为网站运营提供运营上的数据支持

分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果

开发数据产品,直接或间接地为企业盈利

1.3 数据库和数据仓库的区别

差异项

数据库

数据仓库

特征

操作处理

信息处理

面向

事务

分析

用户

DBA、开发

经理、主管、分析人员

功能

日常操作

长期信息需求、决策支持

DB设计

基于ER模型,面向应用

星形/雪花模型,面向主题

数据

当前的、最新的

历史的、跨时间维护

汇总

原始的、高度详细

汇总的、统一的

视图

详细、一般关系

汇总的、多维的

工作单元

短的、简单事务

复杂查询

访问

读/写

大多为读

关注

数据进入

信息输出

操作

主键索引操作

大量的磁盘扫描

用户数

数百到数亿

数百

DB规模

GB到TB

>=TB

优先

高性能、高可用性

高灵活性

度量

事务吞吐量

查询吞吐量、响应时间

 

2. 数据仓库的架构

数据仓库理想架构图:


数据采集:采用Flume收集日志,采用Sqoop将RDBMS以及NoSQL中的数据同步到HDFS上

消息系统:可以加入Kafka防止数据丢失

实时计算:实时计算使用Spark Streaming消费Kafka中收集的日志数据,实时计算结果大多保存在Redis中

机器学习:使用了Spark MLlib提供的机器学习算法

多维分析OLAP:使用Kylin作为OLAP引擎

数据可视化:提供可视化前端页面,方便运营等非开发人员直接查询

 

3. 数据仓库多维数据模型的设计

3.1 基本概念

主题(Subject)

主题就是指我们所要分析的具体方面。例如:某年某月某地区某机型某款App的安装情况。主题有两个元素:一是各个分析角度(维度),如时间位置;二是要分析的具体量度,该量度一般通过数值体现,如App安装量。

维(Dimension)

维是用于从不同角度描述事物特征的,一般维都会有多层(Level:级别),每个Level都会包含一些共有的或特有的属性(Attribute),可以用下图来展示下维的结构和组成:

以时间维为例,时间维一般会包含年、季、月、日这几个Level,每个Level一般都会有ID、NAME、DESCRIPTION这几个公共属性,这几个公共属性不仅适用于时间维,也同样表现在其它各种不同类型的维。

分层(Hierarchy)

OLAP需要基于有层级的自上而下的钻取,或者自下而上地聚合。所以我们一般会在维的基础上再次进行分层,维、分层、层级的关系如下图:

每一级之间可能是附属关系(如市属于省、省属于国家),也可能是顺序关系(如天周年)。

量度

量度就是要分析的具体的技术指标,诸如年销售额之类。它们一般为数值型数据。我们或者将该数据汇总,或者将该数据取次数、独立次数或取最大最小值等,这样的数据称为量度。

粒度 

数据的细分层度,例如按天分按小时分。

事实表和维表

事实表是用来记录分析的内容的全量信息的,包含了每个事件的具体要素,以及具体发生的事情。事实表中存储数字型ID以及度量信息。

维表则是对事实表中事件的要素的描述信息,就是你观察该事务的角度,是从哪个角度去观察这个内容的。

事实表和维表通过ID相关联,如图所示:

星形/雪花形/事实星座

这三者就是数据仓库多维数据模型建模的模式

上图所示就是一个标准的星形模型。

雪花形就是在维度下面又细分出维度,这样切分是为了使表结构更加规范化。雪花模式可以减少冗余,但是减少的那点空间和事实表的容量相比实在是微不足道,而且多个表联结操作会降低性能,所以一般不用雪花模式设计数据仓库。

事实星座模式就是星形模式的集合,包含星形模式,也就包含多个事实表。

企业级数据仓库/数据集市

企业级数据仓库:突出大而全,不论是细致数据和聚合数据它全都有,设计时使用事实星座模式

数据集市:可以看做是企业级数据仓库的一个子集,它是针对某一方面的数据设计的数据仓库,例如为公司的支付业务设计一个单独的数据集市。由于数据集市没有进行企业级的设计和规划,所以长期来看,它本身的集成将会极其复杂。其数据来源有两种,一种是直接从原生数据源得到,另一种是从企业数据仓库得到。设计时使用星形模型

 

3.2 数据仓库设计步骤

1、确定主题

主题与业务密切相关,所以设计数仓之前应充分了解业务有哪些方面的需求,据此确定主题。

2、确定量度

在确定了主题以后,我们将考虑要分析的技术指标,诸如年销售额之类。量度是要统计的指标,必须事先选择恰当,基于不同的量度将直接产生不同的决策结果。

3、确定数据粒度

考虑到量度的聚合程度不同,我们将采用“最小粒度原则”,即将量度的粒度设置到最小。例如如果知道某些数据细分到天就好了,那么设置其粒度到天;但是如果不确定的话,就将粒度设置为最小,即毫秒级别的。

4、确定维度

设计各个维度的主键、层次、层级,尽量减少冗余。

5、创建事实表

事实表中将存在维度代理键和各量度,而不应该存在描述性信息,即符合“瘦高原则”,即要求事实表数据条数尽量多(粒度最小),而描述性信息尽量少。

---------------------

文章摘自:https://blog.csdn.net/Trigl/article/details/68944434