数据仓库(Data Warehouse)介绍及设计原则

  • A+
所属分类:数据仓库

什么是数据仓库

1. 百度百科如是说:

数据仓库(Data Warehouse)介绍及设计原则

2. 个人理解:

数据仓库是支撑整个公司业务的大型数据集合,包含数据的存储、建模、处理等过程。

数据仓库建设的几个重要步骤:

      建立数据仓库是一个解决企业问题的过程,业务人员往往不懂如何建立和使用数据仓库,发挥其决策支持的作用;信息部门的人员往往又不懂业务,不知道应该建立哪些决策主题,从数据源中抽取哪些数据。因此数据仓库的项目小组应该由业务人员和信息部门的人员共同组成,双方需要相互沟通,协作开发数据仓库。
      PS:数据部门的人应该是最了解业务的,接触的业务面比较广,且懂技术。

1. 收集需求,分析业务

第一步先要了解业务需求,分析清楚要解决的问题。然后考虑:

(1)数据存储时间,是一年、两年、五年还是十年等;

(2)业务人员操作频率,隔多久业务人员需要查询一次;

(3)用户能接收的响应时间是多长,几秒钟、几分钟,还是几小时。

2. 选择数据仓库建设需要的软件平台

第二步选择软件平台,包括数据库(Oracle、MySql、Hbase、hdfs等)、建模工具、分析工具(Oracle BIEE、Qlikview、yonghong等)等,其他还应该考虑的有数据量的承受、响应时间、分析开发成本、报表展现等。如下给一些参考:

(1)厂商的背景和支持能力,能否提供全方位的技术支持和咨询服务。

(2)数据库对大数据量(TB级)的支持能力。

(3)数据库是否支持并行操作。

(4)能否提供数据仓库的建模工具,是否支持对元数据的管理。

(5)能否提供支持大数据量的数据加载、转换、传输工具(ETT)。

(6)能否提供完整的决策支持工具集,满足数据仓库中各类用户的需要。

3. 建立数据仓库的逻辑模型

(1)确定建立数据仓库逻辑模型的基本方法。

(2)基于主题视图,把主题视图中的数据定义转到逻辑数据模型中。 
      (3)识别主题之间的关系。

(4)分解多对多的关系。

(5)用范式理论检验逻辑数据模型。

(6)由用户审核逻辑数据模型。

4. 逻辑数据模型转化为数据仓库数据模型

(1)删除垃圾数据:数据上报中的有些数据是不必要的,可以在数据进入仓库之前进行数据清洗,过滤掉一些不必要的数据,包括多列、少列的、乱码的灯一切非法上报数据。

(2)增加时间主键和索引:大数据中以data_time(date型)作为主键比dateid(int型)作为主键和索引要高效。
      (3)加入不同级别粒度的汇总数据:数据粒度代表数据细化程度,粒度越大,数据的汇总程度越高。粒度是数据仓库设计的一个重要因素,它直接影响到驻留在数据仓库中的数据量和可以执行的查询类型。显然,粒度级别越低,则支持的查询越多;反之,能支持的查询就有限。

对数据操作的效率与能得到数据的详细程度是一对矛盾,通常,人们希望建成的系统既有较高的效率,又能得到所需的详细资料。实施数据仓库的一个重要原则就是不要试图包括所有详细数据,因为90%的分析需求是在汇总数据上进行的。试图将粒度细化到最低层,只会增加系统的开销,降低系统的性能。

PS: 有些汇总提前算好入库,方便展现时提高效率,有些汇总可以在展现的时候做计算,根据实际情况来定。

5. 数据仓库数据模型优化

数据仓库设计时,性能是一项主要考虑因素。在数据仓库建成后,也需要经常对其性能进行监控,并随着需求和数据量的变更进行调整。

(1)合并不同的数据表;

(2)通过增加汇总表避免数据的动态汇总;
      (3)通过冗余字段减少表连接的数量,不要超过3~5个;

(4)用ID代码而不是描述信息作为键值;

(5)对数据表做分区。

6. 数据的ETL过程

由于业务系统所使用的软硬件平台不同,编码方法不同,业务系统中的数据在加载到数据仓库之前,必须进行数据的清洗和转换,保证数据仓库中数据的一致性。

(1)数据加载方案必须能够支持访问不同的数据库和文件系统;

(2)数据的ETL过程必须满足实际要求,在规定时间范围内完成;
      (3)支持各种转换方法,各种转换方法可以构成一个工作流;

(4)支持增量加载,只把最新的加到仓库中。

7. 开发数据仓库的分析应用

建立数据仓库的最终目的是为业务部门提供决策支持能力,必须为业务部门选择合适的工具实现其对数据仓库中的数据进行分析的要求。所以对于分析工具的选择要满足:

(1)满足用户的全部分析功能要求。数据仓库中的用户包括了企业中各个业务部门,他们的业务不同,要求的分析功能也不同。如有的用户只是简单的分析报表,有些用户则要求做预测和趋势分析。

(2)提供灵活的表现方式。分析的结果必须能够以直观、灵活的方式表现,支持复杂的图表。使用方式上,可以是客户机/服务器方式,也可以是浏览器方式。

事实上,没有一种工具能够满足数据仓库的全部分析功能需求,一个完整的数据仓库系统的功能可能是由多种工具来实现,因此必须考虑多个工具之间的接口和集成性问题,对于用户来说,希望看到的是一致的界面。
      PS: 我们公司用的是Oracle BIEE,优点是免费,比较强大。缺点是重量级系统,学习开发成本较高。

8. 数据仓库的管理

只重视数据仓库的建立,而忽视数据仓库的管理必然导致数据仓库项目的失败。数据仓库管理主要包括数据库管理和元数据管理。

☆ 数据库管理需要考以下几个方面:

(1)安全性管理。数据仓库中的用户只能访问到他的授权范围内的数据,数据在传输过程中的加密策略。

(2)数据仓库的备份和恢复。数据仓库的大小和备份的频率直接影响到备份策略。

(3)如何保证数据仓库系统的可用性,硬件还是软件方法。

(4)数据老化。设计数据仓库中数据的存放时间周期和对过期数据的老化方法,如历史数据只保存汇总数据,当年数据保存详细记录。

☆ 元数据管理贯穿于整个系统的建设过程中,元数据是描述数据的数据。在数据采集阶段,元数据主要包括下列信息:

(1)源数据的描述定义:类型、位置、结构。

(2)数据转换规则:编码规则、行业标准。

(3)目标数据仓库的模型描述:星型/雪花模型定义,维/事实结构定义。

(4)源数据到目标数据仓库的映射关系:函数/表达式定义。

(5)代码:生成转换程序、自动加载程序等。

☆ 在数据管理阶段,元数据主要包括下列信息:

(1)汇总数据的描述:汇总/聚合层次、物化视图结构定义。

(2)历史数据存储规则:位置、存储粒度。

(3)多维数据结构描述:立方体定义、维结构、度量值、钻取层次定义等。

☆ 在数据展现阶段,元数据主要包括以下信息:

(1)报表的描述:报表结构的定义。

(2)统计函数的描述:各类统计分析函数的定义。

(3)结果输出的描述:图、表输出的定义。

元数据不但是独立存放,而且对用户是透明的,标准元数据之间可以互相转换。

数据仓库模型设计:
      1. 设计原则:自顶向下,逐步求精。

2. 设计的三个阶段:

(1)概念模型

对业务进行系统划分,从整体上进行抽象和概括,也就是主题划分。

数据仓库(Data Warehouse)介绍及设计原则

举个例子:

数据仓库(Data Warehouse)介绍及设计原则

上图中把整个业务划分为8块:客户、服务、服务使用、账务、结算、资源、客服、营销。

      (2)逻辑模型
      进一步细化概念模型。    

定义实体和实体间的关系,和每个实体的属性。即定义具体表的作用,表与表的约束,表的字段。形成ER图。这些实体的设计都是基于业务规则,可以说,这一阶段主要面对的是业务。也就是“业务驱动建模”。

数据仓库(Data Warehouse)介绍及设计原则

数据仓库(Data Warehouse)介绍及设计原则

数据仓库(Data Warehouse)介绍及设计原则
数据仓库(Data Warehouse)介绍及设计原则
      (3)物理模型

        具体实现。

       依照逻辑模型,在数据库中进行建表、索引等。数据仓库,为了满足高性能的需求,可以增加冗余、隐藏表之间的约束等反第三范式操作。

补充:数据库三范式

第一范式:数据库表的字段都是单一属性,不可再分。

第二范式:所有属性都依赖于主键。

第三范式:每列值和主键都是直接相关,而不是间接相关。

具体的模型--星型模型和雪花模型:

共同点:他们都是由一个事实表和多个维度表组成的。

区别:

<1> 星型模型

维度表直接跟事实表连接,图形像星星。

应用场景:如下

数据仓库(Data Warehouse)介绍及设计原则

数据仓库(Data Warehouse)介绍及设计原则

<2> 雪花模型

一部分维度表不是直接跟事实表连接,而是通过维度表中转,图形像雪花。

应用场景:

维度间存在多级关系的时候,比如第一级是省、第二级是市、第三级是县。

数据仓库(Data Warehouse)介绍及设计原则

数据仓库(Data Warehouse)介绍及设计原则

从性能上来看,星型模型的查询性能要好。为了提高性能,可以允许违反第三范式,适当的冗余、隐藏表之间的约束。

数据仓库(Data Warehouse)介绍及设计原则

圈里圈外

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: