数据仓库分层与架构

数据仓库的定义


数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用使用。

数据仓库的特点

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

​ 集成的:数据仓库里面的数据都是经过ETL( Extract-Transform-Load 抽取-转换-加载)操作后被集中放到同一个数据源,数据仓库里的数据是来自于各种不同的数据源。

​ 随时间变化的:关键数据隐式或者显示地随时间变化而变化。

​ 数据相对稳定的:数据装入后一般只是进行查询操作,没有传统数据库的增删改操作。

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

 

数据仓库的作用

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

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

​ 可以作为各个业务的数据源,形成业务数据互相反馈的良性循环。

​ 可以提供数据报表,用于公司的决策等等。

数据仓库与传统数据库的区别

  传统数据库 数据仓库 特征 用于操作处理,面向OLTP 用于信息处理,面向OLAP 用户 用户:DBA、开发。用户规模:数百或数亿 用户:经理、主管、分析人员。用户规模:数百 功能 日常操作 长期信息需求、决策支持 DB设计 基于ER模型,面向应用 星形/雪花模型,面向主题 数据 当前的、最新的 历史的、跨时间维护

​ 注解 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。 OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作。OLAP系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。

数据仓库的架构

数据仓库分层与架构

 

数据采集层:数据采集层的任务就是把数据从各种数据源中采集和存储到数据库上,期间有可能会做一些ETL(抽取extra,转化transfer,装载load )操作。数据源种类可以有多种:

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

数据存储与分析层:

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

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

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

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

​ 数据共享

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

​ 数据应用

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

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

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

数据仓库的要求

高效率:数据仓库的分析数据一般分为日、周、月、季、年等,可以看出,以日为周期的数据要求的效率最高,要求24小时甚至12小时内,客户能看到昨天的数据分析。由于有的企业每日的数据量很大,如果数据仓库设计的不好,需要延时一到两天才能显示数据,这显然是不能出现这种事情的。

​ 数据质量高:数据仓库所提供的各种信息,肯定要准确的数据。数据仓库通常要经过数据清洗,装载,查询,展现等多个流程而得到的,如果复杂的架构会有更多层次,那么由于数据源有脏数据或者代码不严谨,都可以导致数据不准确或者有错误,如果客户看到错误的信息就可能导致分析出错误的决策,造成经济的损失。

​ 扩展性:之所以有的大型数据仓库系统架构设计复杂,是因为考虑到了未来3-5年的扩展性,因为如果在未来需要扩展一些新的功能了,就可以不用重建数据仓库系统,就能很稳定运行。因为重建一个数据创库是比较耗费人力和财力。可扩展性主要体现在数据建模的合理性。

​ 为了达到上述的要求,建立起一个高效率、高数据质量、良好的可扩展性,再加上为了提高建仓的速度,根据在实际生产环境中的经验的总结,于是就提出来了数据仓库的分层概念,那么到底什么是数据仓库的分层?为什么要分成?数据仓库的分层的好处是什么呢?接下来将介绍关于数据仓库分层的一些概念。

什么是数据仓库分层

分层是数据仓库解决方案中数据架构设计的一种数据逻辑结构 ,通过分层理念建立的数据仓库,它的可扩展性非常好,这样设计出来的模型架构,可以任意地增减、替换数据仓库中的各个组成部分。

数据仓库分层的原因
​ 1、用空间换时间,通过数据预处理提高效率,通过大量的预处理可以提升应用系统的用户体验(效率),但是数据仓库会存在大量冗余的数据.

​ 2、增强可扩展性,方便以后业务的变更。如果不分层的话,当源业务系统的业务规则发生变化整个数据仓库需要重建,这样将会影响整个数据清洗过程,工作量巨大。

​ 3、通过分层管理来实现分步完成工作,简化数据清洗的过程,使每一层处理逻辑变得更简单。因为把原来一步的工作分到了多个步骤去完成,相当于把一个复杂的工作拆成了多个简单的工作,把一个大的黑盒变成了一个白盒,每一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数据发生错误的时候,往往我们只需要局部调整某个步骤即可。

数据仓库具体的分层
​ 标准的数据仓库分层:ods(临时存储层),pdw(数据仓库层),mid(数据集市层),app(应用层)。

​ ods:历史存储层,它和源系统数据是同构的,而且这一层数据粒度是最细的,这层的表分为两种,一种是存储当前需要加载的数据,一种是用于存储处理完后的数据。

​ pdw:数据仓库层,它的数据是干净的数据,是一致的准确的,也就是清洗后的数据,它的数据一般都遵循数据库第三范式,数据粒度和ods的粒度相同,它会保存bi系统中所有历史数据

​ mid:数据集市层,它是面向主题组织数据的,通常是星状和雪花状数据,从数据粒度来讲,它是轻度汇总级别的数据,已经不存在明细的数据了,从广度来说,它包含了所有业务数量。从分析角度讲,大概就是近几年

​ app:应用层,数据粒度高度汇总,但不一定涵盖所有业务数据,只是mid层数据的一个子集。

补充

数据缓存层:用于存放接口方提供的原始数据的数据库层,此层的表结构与源数据保持基本一致,数据存放时间根据数据量大小和项目情况而定,如果数据量较大,可以只存近期数据,将历史数据进行备份。此层的目的在于数据的中转和备份。

核心数据层:此层的数据在数据缓存层的基础上做了一定程度的整合,称之为数据集市,存储上仍是关系模型。此层的目的在于进行必要的数据整合为下一步多维模型做准备。

分析应用层:此层的数据为根据业务分析需要构造的多维模型数据。数据可以直接用于分析展现。

说明

数据层次的划分不是固定不变的,可以根据工作当中实际项目的需要进行适当裁剪或者是添加。如果业务相对简单和独立,可以将核心数据层与分析应用层进行合并。另外,分析应用的数据可以来自多维模型的数据,也可以来自关系模型数据甚至原始数据。