“设计”——暗含了可以预先对组成单元进行规划的意思,“兵马未动,粮草先行”体现了前人在规划事情的聪明才智。但是数据仓库的需求只有在已经装载了部分数据并开始使用的时候才能弄清楚,因此,过去很有效的设计方法在设计数据仓库时并不能满足需要。数据仓库是在启发方式下建造的,过程中后一个阶段开发完全依赖于上一个阶段获得的结果。下面对设计数据仓库的几个主要过程进行分享。
设计师的手稿
1.从操作型数据开始
什么是操作型数据?操作型数据就是企业在生产运行中产生的数据。
在进行数据仓库设计时首先要考虑的问题是如何将数据放置在数据仓库中。操作型系统在建立的时候并没有考虑数据将来如何进行集成,各个系统都建立了自己的数据结构,在数据集成的时候就会出现各式各样的数据没有统一的标准。这是个复杂而又必须解决问题。
数据各自为政
1.1.数据集成过程中首先要解决数据编码不一致的问题。假设将旅客服务系统数据和旅客行为系统数据进行关联,发现旅客服务系统中性别是英文简称“m,f”表示,在旅客行为系统中性别是中文“男,女”,这两个系统在表示性别时采用了不同的编码方式。将旅客性别数据集成到数据仓库时,不管采用哪一种编码方式,进入数据仓库的数据需要统一成为同一种编码格式。
统一编码
1.2.数据集成的过程需要统一度量单位。不同的系统可能在表示同一属性的时候采用了不同的计量单位,进入数据仓库的数据需要转换成同一种计量单位。数据仓库建立是服务于企业所有的系统,将不必要的数据计算开销在数据抽取、装载、清洗过程中完成,节约数据仓库计算资源。在设计数据仓库的时候尽量让清洗的计算在数据抽取的时候就完成,不建议将过多的计算推移到数据仓库中。
统一度量单位
1.3.集成过程中要对字段语义进行理解。例如同一个字段在四个应用中有四个不同的名字。为了转换数据使其正确的进入仓库,就必须建立对各个不同源字段到数据仓库字段的映射。
统一字段名称
将操作数据集成到数据仓库是个非常复杂的过程。在真实过程中除了将数据完整的同步到数据仓库中的需求,在某些需求下集成到数据仓库并非明细数据而是一个汇总数据。我们在后面会具体列出数据集成过程中需要考虑的问题列表。
2.设计数据仓库的数据模型
数据仓库起源于数据模型的设计。在企业中所有的数据模型都是建立在操作型数据模型之上,我们可以通过以下步奏设计数据仓库模型。
2.1.去除纯用于操作型环境中数据。比如去掉控制系统字体大小的样式表内容,因为此类数据对后面的业务支持分析并没有多大的意义。
2.2.增加时间元素。为加入到数据仓库的数据增加时间元素,标注该数据的时间版本。随着时间增长,企业经营的规模增加,原有数据类型不能符合现有业务的需求,需要进行修改,此时在数据仓库中基于原有字段增加一个新的数据字段,通过时间版本可以快速区分老版本和新版本。
2.3.在数据仓库中将操作型系统中的数据转变为“人工关系”,也就是建立起数据仓库中表与表之间的关系。数据仓库对外服务的时候,某一查询请求数据可能来自多张表,通过建立起的表间关系可以将多张表的数据串联成为一个集合发送给调用端。
2.4.对企业数据模型进行稳定性分析(根据各个数据属性是否经常变化的特性将这些属性分组)。比如经常变化的,不时变化的、很少变化的。通过稳定性分析,我们可以根据不同访问频次将数据分开存放,提高数据仓库的响应效率。
稳定性分析
2.5.数据模型的设计非常重要,通常数据模型通过高层、中层和底层三个层次进行设计。下面详细讲解这三层是如何实现的。
2.5.1.高层建模即设计ER图,是最高的抽象设计,描述数据仓库范围的主题域,以及描述主题域之间的关系。高层设计通盘考虑整个公司业务环境,站在领导的角度将公司的业务环境划分为不同的主题域。比如可以将公司的业务环境划分为商务、运行、管理等主题域。如果建立的是商务数据中心则可以划分供应商、顾客、商品和仓储等主题域。建立完成主题域之后要明确主题域和主题域之间的连接关系。
高层设计ER图
2.5.2.中层建模是对高层模型中标识出的每个主题域进行详细设计建模。对每个主题域中包含的具体实体进行设计,并且明确实体与实体之间的对应关系。这个步奏涉及到具体每一个主题域包含了多少实体,这些实体特征和属性,以及实体与实体之间的关系。
中层设计
2.5.3.底层建模是物理模型建立,建立数据具体存储模型。设计上主要优化数据存储和读取的性能。比如数据库存储的分库分区或者使用集群解决方案,目的是降低单台机器的压力,提升数据仓库对请求的响应效率。
3.为了性能适度牺牲范式设计
设计规范化,通常认为的是设计要满足范式,在关系型数据库设计时最低的设计标准是要满足第三范式。
为什么要规范化数据仓库的设计?总结下来至少有以下四点优点:1.降低数据存储所占有的磁盘空间。2.方便对数据的管理。3.将易变和不易变的数据进行区分管理。4.容易进行修改。
但是严格遵循规范化设计在应用高频访问大数据量的情况下也会有弊端,至少会造成两个问题:1.数据访问I/O次数多,严重影响数据访问的效率。2.索引建立复杂而且索引数据量庞大。
解决由于严格遵循规范化导致的性能瓶颈,可以在适当的地方反向规范化。具体可按照以下三个步骤做:
第一步,将经常同时访问的两个不同表的数据可以进行合并。
创建数据组,将经常同时访问的数据放到一起
第二步,对于某些经常访问的(不变的)基础数据表可以冗余存放到不同表中,取消基础数据表。
采用数据冗余
第三步,对于同一张表中某一个字段访问特别多,可以将该字段抽离出该表。
分离高频访问字段
4.使用Zachman方法设计数据仓库
Zachman框架是一种逻辑结构,它是为信息技术企业提供一种可以理解的信息表述。可以对企业信息按照要求分类并从不同角度进行表示。
Zachman框架吸收了传统方法中的一些精髓。他根据抽象规则定义企业信息的多个方面。该框架采用六行六列矩阵布局,六行包括范围、企业模式、系统模式、技术模式、组建和功能系统,六列分别为数据(什么?)、功能(怎样?)、网络(哪里?)、角色(谁?)、时间(何时?)和动机(为何?)。Zachman框架的6行6列整理出的表格如下:
Zachman样表
Zachman在如何使用呢?它的每一个单元格具体填写什么呢?根据下图填写完成里面的内容,可以保证在进行数据仓库建设的时候企业的所有方面都得到了考虑。
Zachman内容填写
Zachman指导数据仓库的建设。Zachman框架可以挖掘出数据仓库建立的需求内容,然后针对需求内容建立数据模型,最后将业务系统的数据集成到数据仓库的一个完整过程。
小结
通过上面的步骤我们一步一步的将业务系统集成到数据仓库中,取得了一些成果。但是我们仅仅分享了数据仓库建设的几个主要步骤,数据仓库建设过程中还有很多细节由于时间我们并没有分享。另外本文还介绍了Zachman分析方法,在数据仓库设计的时候避免遗漏对企业问题的考虑,推荐使用该方法。