什么是数据仓库?为什么要用数据仓库。


目前,数据仓库一词尚没有一个统一的定义,著名的数据仓库专家W.H.Inmon在其著作《Building the Data Warehouse》一书中给予如下描述:数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

对于数据仓库的概念我们可以从两个层次予以理解,

首先,数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;

其次,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。

根据数据仓库概念的含义,数据仓库拥有以下四个特点:
1、面向主题。操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织。主题是一个抽象的概念,是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。

2、集成的。面向事务处理的操作型数据库通常与某些特定的应用相关,数据库之间相互独立,并且往往是异构的。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

3、相对稳定的。操作型数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

4、反映历史变化。操作型数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
企业数据仓库的建设,是以现有企业业务系统和大量业务数据的积累为基础。数据仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,供他们做出改善其业务经营的决策,信息才能发挥作用,信息才有意义。而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。因此,从产业界的角度看,数据仓库建设是一个工程,是一个过程。
整个数据仓库系统是一个包含四个层次的体系结构,具体由下图表示。


数据仓库系统体系结构




·数据源:是数据仓库系统的基础,是整个系统的数据源泉。通常包括企业内部信息和外部信息。内部信息包括存放于RDBMS中的各种业务处理数据和各类文档数据。外部信息包括各类法律法规、市场信息和竞争对手的信息等等;




·数据的存储与管理:是整个数据仓库系统的核心。数据仓库的真正关键是数据的存储和管理。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。要决定采用什么产品和技术来建立数据仓库的核心,则需要从数据仓库的技术特点着手分析。针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。




·OLAP服务器:对分析需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为:ROLAP、MOLAP和HOLAP。ROLAP基本数据和聚合数据均存放在RDBMS之中;MOLAP基本数据和聚合数据均存放于多维数据库中;HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。




·前端工具:主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。其中数据分析工具主要针对OLAP服务器,报表工具、数据挖掘工具主要针对数据仓库。

为什么要用数据仓库:

最近做一个web项目,正在考虑报表工具的问题。 报表对于系统开发的重要性是不言而喻的,

一方面对于一般的MIS或者ERP之类的系统而言,报表是客户最能够直观的感受系统功能的表现形式,也就是系统最能够吸引客户的地方,特别是客户的领导阶层。一般的系统在设计的时候都有所谓的“领导查询”或者“决策支持”模块,那是在推销系统的时候给总经理或者总裁预备的,我很少看到在系统真正上线的时候高层领导会直接使用系统的,因为他们通常都是看报表的,而不是直接使用系统的。

另外一方面,在项目上线之后的一段时期内,客户提出最多需求地方就是报表了。所以开发设计各种各样的报表就成了维护人员的日常工作。客户可能会突发奇想,想要一个什么什么样的报表,需要对业务数据进行各种形式的分析,这都令程序员烦恼不已。

解决问题的方法有多种:

1. 系统设计人员会想到给系统增加一个“客户自助查询”或者“报表定制”功能,其实就是自己在做一个小的报表设计器。这样费工费时,而且功能也比较单一。

2. 采用功能比较强的报表工具,带有用户设计器的。例如Fast Report,Crystal Report等,这些工具的设计器很强,而且让用户自己去设计,但是要让客户用这些工具设计复杂的报表,基本上是在培养用户编程程序员。

3. 数据仓库技术是解决这些问题的方案之一,可以看作是报表系统的深化。

现在各大数据库厂商都有自己的数据仓库解决方案了。数据仓库的概念很大,但是一般的人只是用它来做OLAP就足够了。

数据仓库的理论也很复杂,对于一般的应用不需要了解的那么深入。数据仓库入门也很简单,微软的SQLServer附带了Anylize Service,这是微软的数据仓库产品,它带了一个入门教程,很简明,花几个小时step by step做下来之后对数据仓据的一些基本概念就会有所理解了。


没有评论: