暂无说说

数据仓库的架构与设计

大数据 jiajun 7个月前 (03-16) 177次浏览 0个评论 扫描二维码

什么是数据仓库

1.1 数据仓库的概念

官方定义

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

这个定义的确官方,但是却指出了数据仓库的四个特点。

特点

面向主题:数据仓库都是基于某个明确主题,仅需要与该主题相关的数据,其他的无关细节数据将被排除掉 
集成的:从不同的数据源采集数据到同一个数据源,此过程会有一些 ETL 操作 
随时间变化:关键数据隐式或显式的基于时间变化 
信息本身相对稳定:数据装入以后一般只进行查询操作,没有传统数据库的增删改操作

个人理解

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

1.2 数据仓库的用途

整合公司所有业务数据,建立统一的数据中心
产生业务报表,用于作出决策
为网站运营提供运营上的数据支持
可以作为各个业务的数据源,形成业务数据互相反馈的良性循环
分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果
开发数据产品,直接或间接地为公司盈利

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

2. 数据仓库的架构

2.1 当前架构

数据采集

数据采集层的任务就是把数据从各种数据源中采集和存储到数据存储上,期间有可能会做一些 ETL 操作。

数据源种类可以有多种:

日志:所占份额最大,存储在备份服务器上
业务数据库:如 Mysql、Oracle
来自 HTTP/FTP 的数据:合作伙伴提供的接口
其他数据源:如 Excel 等需要手工录入的数据
数据存储与分析

HDFS 是大数据环境下数据仓库/数据平台最完美的数据存储解决方案。

离线数据分析与计算,也就是对实时性要求不高的部分,Hive 是不错的选择。

使用 Hadoop 框架自然而然也提供了 MapReduce 接口,如果真的很乐意开发 Java,或者对 SQL 不熟,那么也可以使用 MapReduce 来做分析与计算。

Spark 性能比 MapReduce 好很多,同时使用 SparkSQL 操作 Hive。

数据共享

前面使用 Hive、MR、Spark、SparkSQL 分析和计算的结果,还是在 HDFS 上,但大多业务和应用不可能直接从 HDFS 上获取数据,那么就需要一个数据共享的地方,使得各业务和产品能方便的获取数据。 
这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实就是关系型数据库和 NOSQL 数据库。

数据应用

报表:报表所使用的数据,一般也是已经统计汇总好的,存放于数据共享层。

接口:接口的数据都是直接查询数据共享层即可得到。

即席查询:即席查询通常是现有的报表和数据共享层的数据并不能满足需求,需要从数据存储层直接查询。一般都是通过直接操作 SQL 得到。

2.2 理想架构

增加了以下内容:

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

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

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

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

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

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

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、创建事实表

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

 

喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址