仓库的主要区别:数据仓库是企业级的,能为整个企业各个部门的运行提供决策支持手段;而数据集市则是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据,因此是部门级的,一般只能为某个局部范围内的管理人员服务,因此也称之为部门级数据仓库。
|
数据仓库 |
数据集市 |
数据的来源 |
生产系统、外部数据等 |
数据仓库 |
范围规模 |
企业级 |
部门级或工作组级 |
主题 |
以企业为主题 |
以部门或特殊的分析为主题 |
数据粒度 |
最细的粒度 |
较粗的粒度 |
数据结构 |
第三范式,规范化结构 |
星型模型、雪花模型、星座模型 |
历史数据 |
大量的历史数据 |
适度的历史数据 |
优化 |
处理海量数据、数据探索 |
便于访问和分析、快速查询 |
索引 |
高度索引 |
高度索引 |
数据集市可以分为两种类型——独立型数据集市和从属型数据集市。独立型数据集市直接从操作型环境获取数据,从属型数据集市从企业级数据仓库获取数据,带有从属型数据集市的体系结构如图2所示。
数据仓库规模大、周期长,一些规模比较小的企业用户难以承担。因此,作为快速解决企业当前存在的实际问题的一种有效方法,独立型数据集市成为一种既成事实。独立型数据集市是为满足特定用户(一般是部门级别的)的需求而建立的一种分析型环境,它能够快速地解决某些具体的问题,而且投资规模也比数据仓库小很多。
独立型数据集市的存在会给人造成一种错觉,似乎可以先独立地构建数据集市,当数据集市达到一定的规模再直接转换为数据仓库。有些销售人员会推销这种观点,其实质却常常是因为建立企业级数据仓库的销售周期太长以至于不好操作。
多个独立的数据集市的累积,是不能形成一个企业级的数据仓库的,这是由数据仓库和数据集市本身的特点决定的——数据集市为各个部门或工作组所用,各个集市之间存在不一致性是难免的。因为脱离数据仓库的缘故,当多个独立型数据集市增长到一定规模之后,由于没有统一的数据仓库协调,企业只会又增加一些信息孤岛,仍然不能以整个企业的视图分析数据。借用Inmon的比喻:我们不可能将大海里的小鱼堆在一起就构成一头大鲸鱼,这也说明了数据仓库和数据集市有本质的不同。
如果企业最终想建设一个全企业统一的数据仓库,想要以整个企业的视图分析数据,独立型数据集市恐怕不是合适的选择;也就是说“先独立地构建数据集市,当数据集市达到一定的规模再直接转换为数据仓库”是不合适的。从长远的角度看,从属型数据集市在体系结构上比独立型数据集市更稳定,可以说是数据集市未来建设的主要方向。
2. 为什么要有数据集市?良好的数据集市有什么特点?
虽然 OLTP 和遗留系统拥有宝贵的信息,但是可能难以从这些系统中提取有意义的信息并且速度也较慢。而且这些系统虽然一般可支持预先定义操作的报表,但却经常无法支持一个组织对于历史的、联合的、智能的或易于访问的信息的需求。因为数据分布在许多跨系统和平台的表中,而且通常是“脏的”,包含了不一致的和无效的值,使得难于分析。
数据集市将合并不同系统的数据源来满足业务信息需求。若能有效地得以实现,数据集市将可以快速且方便地访问简单信息以及系统的和历史的视图。一个设计良好的数据集市有如下特点(有些特点数据仓库也具有,有些特点是相对于数据仓库来讲的):
(1) 特定用户群体所需的信息,通常是一个部门或者一个特定组织的用户,且无需受制于源系统的大量需求和操作性危机(相对于数据仓库)。
(2) 支持访问非易变(nonvolatile)的业务信息。(非易变的信息是以预定的时间间隔进行更新的,并且不受 OLTP 系统进行中的更新的影响。)
(3) 调和来自于组织里多个运行系统的信息,比如账目、销售、库存和客户管理以及组织外部的行业数据。
(4) 通过默认有效值、使各系统的值保持一致以及添加描述以使隐含代码有意义,从而提供净化的(cleansed)数据。
(5) 为即席分析和预定义报表提供合理的查询响应时间(由于数据集市是部门级的,相对于庞大的数据仓库来讲,其查询和分析的响应时间会大大缩短)。
3. 数据集市的数据结构
数据集市中数据的结构通常被描述为星型结构或雪花结构。一个星型结构包含两个基本部分——一个事实表和各种支持维表。
(1) 事实表
事实表描述数据集市中最密集的数据。在电话公司中,用于呼叫的数据是典型的最密集数据;在银行中,与账目核对和自动柜员机有关的数据是典型的最密集数据。对于零售业而言,销售和库存数 据是最密集的数据等等。
事实表是预先被连接到一起的多种类型数据的组合体,它包括:一个反映事实表建立目的的实体的主键,如一张订单、一次销售、一个电话等等,主键信息,连接事实表与维表的外键,外键携带的非键值外部数据。如果这种非键外部数据经常用于事实表中的数据分析,它就会被包括在事实表的范围内。事实表是高度索引化的。事实表中出现30到40条索引非常常见。有时实事表的每列都建了索引,这样作的结果是使事实表中的数据非常容易读取。但是,导入索引所需的资源数量必须为等式提供因数。通常,事实表的数据不能更改,但可以输入数据,一旦正确输入一个记录,就不能更改此记录的任何内容了。
(2) 维表
维表是围绕事实表建立的。维表包含非密集型数据,它通过外键与事实表相连。典型的维表建立在数据集市的基础上,包括产品目录、客户名单、厂商列表等等。
数据集市中的数据来源于企业数据仓库。所有数据,除了一个例外,在导入到数据集市之前都应该经过企业数据仓库。这个例外就是用于数据集市的特定数据,它不能用于数据仓库的其他地方。外部数据通常属于这类范畴。如果情况不是这样,数据就会用于决策支持系统的其他地方,那么这些数据就必须经过企业数据仓库。
数据集市包含两种类型的数据,通常是详细数据和汇总数据。
(3) 详细数据
数据集市中的详细数据包含在星型结构中。当数据通过企业数据仓库时,星型结构就会很好的汇总。在这种情况下,企业数据仓库包含必需的基本数据,而数据集市则包含更高间隔尺寸的数据。但是,在数据集市使用者的心目中,星型结构的数据和数据获取时一样详细。
(4) 汇总数据
数据集市包含的第二种类型数据是汇总数据。分析人员通常从星型结构中的数据创建各种汇总数据。典型的汇总可能是销售区域的月销售总额。因为汇总的基础不断发展变化,所以历史数据就在数据集市中。但是这些历史数据优势在于它存储的概括水平。星型结构中保存的历史数据非常少。
数据集市以企业数据仓库为基础进行更新。对于数据集市来说大约每周更新一次非常平常。但是,数据集市的更新时间可以少于一周也可以多于一周,这主要是由数据集市所属部门的需求来决定的。
4. 如何建立数据集市?
数据仓库(集市)的设计可以采用迭代式的方法。在迭代式开发中,每个迭代为上一次的结果增加了新的功能。功能增加的顺序要考虑到迭代平衡以及尽早发现重大风险。通俗地说,就是在正式交货之前多次给客户交付不完善的中间产品“试用”。这些中间产品会有一些功能还没有添加进去、还不稳定,但是客户提出修改意见以后,开发人员能够更好地理解客户的需求。如此反复,使得产品在质量上能够逐渐逼近客户的要求。这种开发方法周期长、成本高,但是它能够避免整个项目推倒重来的风险,比较适合大项目、高风险项目。
理论上讲,应该有一个总的数据仓库的概念,然后才有数据集市。实际建设数据仓库(集市)的时候,国内很少这么做。国内一般会先从数据集市入手,就某一个特定的主题(比如企业的客户信息)先做数据集市,再建设数据仓库。数据仓库和数据集市建立的先后次序之分,是和设计方法紧密相关的。而数据仓库作为工程学科,并没有对错之分,主要判别方式应该是能否解决目前存在的实际问题,并为今后可能发生的问题保持一定的可伸缩性。
5. 数据仓库建模与数据集市建模
数据只是所有业务活动、资源以及企业结果的记录。数据模型是对那些数据的组织良好的抽象,因此数据模型成为理解和管理企业业务的最佳方法是极其自然的。数据模型起到了指导或计划数据仓库的实现的作用。在真正的实现开始之前,联合每个业务领域的数据模型可以帮助确保其结果是有效的数据仓库,并且可以帮助减少实现的成本。
(1)数据仓库的建模
数据仓库数据的建模是将需求转换成图画以及支持表示那些需求的元数据的过程。出于易读性目的,本文将关于需求和建模的讨论相分离,但实际上这些步骤通常是重叠的。一旦在文档中记录一些初始需求,初始模型就开始成型。随着需求变得更加完整,模型也会如此。
最重要的是向终端用户提供良好集成并易于解释的数据仓库的逻辑模型。这些逻辑模型是数据仓库元数据的核心之一。为终端用户提供的简单性以及历史数据的集成和联合是建模方法应该帮助提供的关键原则。
(2)数据集市的数据建模
因为仓库终端用户直接与数据集市进行交互,所以数据集市的建模是捕获终端用户业务需求的最有效工具之一。数据集市的建模过程取决于许多因素。下面描述了三个最重要的:
数据集市的建模是终端用户驱动的。终端用户必须参与数据集市的建模过程,因为他们显然是要使用该数据集市的人。因为您应期望终端用户完全不熟悉复杂的数据模型,所以应该将建模技术和建模过程作为整体进行组织,以便使复杂性对终端用户透明。
数据集市的建模是由业务需求驱动的。数据集市模型对于捕获业务需求十分有用,因为它们通常由终端用户直接使用,且易于理解。
数据集市的建模极大地受到了数据分析技术的影响。数据分析技术可以影响所选择的数据模型的类型及其内容。目前,有几种常用的数据分析技术:查询和报表制作、多维分析以及数据挖掘。
如果仅仅意图提供查询和报表制作功能,那么带有正规(normalized)或非正规(denormalized)数据结构的 ER 模型就是最合适的。维度数据模型也可能是较好的选择,因为它是用户友好的,并具有更好的性能。如果其目标是执行多维数据分析,那么维度数据模型就是这里的惟一选择。然而,数据挖掘通常在可用的最低细节级(level of detail)工作得最好。因此,如果数据仓库是用于数据挖掘的,就应该在模型中包含较低细节级(level of detail)的数据。
6. 数据集市常见的误区:
误区1:数据集市是比较小的。用大小来判断一个企业是在实施数据仓库还是数据集市的做法是很天真的。一种定义认为数据量小于50GB 的数据库是数据集市,大于50GB 的是数据仓库。事实上, 数据集市集中解决的是某一种业务功能的特殊需要,并且维持数据和数据模型来满足这种要求。尺寸大小不是数据集市的本质特征,因为它同样可以有几百GB 的描述更多细节的数据。数据集市也可以只有几个GB 的综合数据就可以满足面向应用的执行信息系统的需要。真正的问题在于,数据集市(它可能是一个数据仓库的子集)的数据模型一定是满足应用的特定需求的。
误区2:数据集市容易建立,可以更快地投入运行。一个单一的数据集市的确比数据仓库的复杂性程度低一些,因为它只针对某一需要解决的特定的商业问题,但是围绕数据获取的很多复杂问题并没有减少。数据获取包括从可以使用的数据源中提取、确认和集成数据, 把它们输送到数据集市和数据仓库中。