当面对大量的数据,而且是各种各样类型的数据,还可能有的数据单元(粒度)很大,单纯靠数据库是不易解决,为了解决这些问题,提高系统后台的效率,就需要引进数据仓库。
有关数据仓库的数据存储的几个基本问题:
1、数据存储的方式?
数据仓库的数据由两种存储方式:一种是存储在关系数据库中,另一种是按多维的方式存储,也就是多维数组。
2、存储何种数据?
数据仓库中存在不同的综合级别的数据。一般把数据分成四个级别,早期细节级数据,当前细节级数据,轻度综合级,高度综合级。不同的综合级别一般称为粒度。粒度越大,表示细节程度越低,综合程度越高。级别的划分是根据粒度进行的。
数据仓库中还有一种是元数据,也就是关于数据的数据。传统数据库中的数据字典或者系统目录都是元数据,在数据仓库中 元数据表现为两种形式:一种是为了从操作型环境向数据仓库环境转换而建立的元数据,它包含了数据源的各种属性以及转换时的各种属性;另一种元数据是用来与多维模型和前端工具建立映射用的。
3、粒度与分割
粒度是对数据仓库中的数据的综合程度高低的一个衡量。粒度越小,细节程度越高,综合程度越低,回答查询的种类越多;反之粒度越大,细节程度越低,综合程度越高,回答查询的种类越少。
分割是将数据分散到各自的物理单元中去以便能分别独立处理,以提高数据处理的效率。数据分割后的数据单元成为分片。数据分割的标准可以根据实际情况来确定,通常可选择按日期、地域或者业务领域等进行分割,也可以按照多个标准组合分割。
4、追加时数据的组织方式
这里说一种比较简单的情况,轮转综合文件。比如:数据存储单位被分为日、周、季度、年等几个级别。每天将数据记录在日记录集中;然后七天的数据被综合存放在周记录集中,每隔一季度周记录集中的数据被存放到季度记录集中,依此类推……这种方法把越早期的记录存放的综合程度越高,也就是粒度越大。
B<>数据仓库的实现步骤:
一般地,设计和创建数据仓库的步骤是:
1.确定用户需求
确定终端用户的需要,为数据仓库中存储的数据建立模型。通过数据模型,可以得到企业完整而清晰的描述信息。数据模型是面向主题建立的,同时又为多个面向应用的数据源的集成提供了统一的标准。数据仓库的数据模型一般包括:企业的各个主题域、主题域之间的联系、描述主题的码和属性组。
深入地分析企业的数据源,记录数据源系统的功能与处理过程。一般地,设计数据仓库最重要的一步便是要理解商业动作的规律,只有了解数据是如何被处理的,才能分解商业处理过程,从中获取数据元素。
利用现有系统的信息,确定从源数据到数据仓库的数据模型所必须的转化/综合逻辑。这涉及到应该合并转化多少数据;是综合所有的数据文件还是综合发生变化的操作系统文件;转化/综合过程应该多长时间执行一次等问题。决定数据转化与更新频率是重要的商业事件。无论数据仓库的更新是采用事件驱动还是时间驱动,都必须让数据仓库知道当某种事件发生时就需要更新数据。
在数据仓库建立之前,应该写一个详细的方案和实现规划。这种方案和实现规划包括:建立商业案例、收集用户需求、确定技术需求。建立商业案例包括由该方案解决的商业需求、方案的成本和投资的收益。收集用户需求主要是调查用户建立数据仓库的意图。用户需求可以确定这些内容:数据需求(粒度级)、企业经营系统包含的数据、这些数据遵循的商业规则、需要提供给用户的查询、用户需要的标准报告、将要使用的客户应用程序工具。确定技术要求包括下列内容:硬件体系结构和框架(例如,链接到数据市场所在的地理位置)、备份和恢复机制、安全性限制、从经营系统到数据仓库加载数据和转换数据的方法。
2.设计和建立数据库
设计和建立数据库是成功地创建数据仓库的一个关键步骤。这一步通常由有经验的数据库设计人员使用,因为这一步涉及的数据来自多种数据源并且要把它们合并成一个单独的逻辑模型。不象OLTP系统那样以高度的正规化形式存储数据,数据仓库中存储的数据以一种非常非正规化的形式存储数据以便提高查询的性能。数据仓库常常使用星型模式和雪花型模式来存储数据,作为OLAP工具管理的合计基础,以便尽可能快地响应复杂查询。
星型模式是最流行的实现数据仓库的设计结构。星型模式通过使用一个包含主题的事实表和多个包含事实的非正规化描述的维度表来执行典型的决策支持查询。一旦创建了事实表,那么可以使用OLAP工具预先计算常用的访问信息。星型模式是一种关系型数据库结构,在该模式的中间是事实表,周围是次要的表,数据在事实表中维护,维度数据在维度表中维护。每一个维度表通过一个关键字直接与事实表关联。维度是组织数据仓库数据的分类信息,例如时间、地理位置、组织等等。维度用于父层和子层这类分层结构。例如,地理位置维度可以包含国家、城市等数据。因此,在该维度表中,纬度由所有的国家、所有的城市组成。为了支持这种分层结构,在维度表中需要包括每一个成员与更高层次上纬度的关系。维度关键字是用于查询中心事实表数据的唯一标识符。维度关键字就像主键一样,把一个维度表与事实表中的一行链接起来。这种结构使得很容易构造复杂的查询语句并且支持决策支持系统中向下挖掘式的分析。事实表包含了描述商业特定事件的数据。例如银行业务或者产品销售。事实表还包含了任何数据合计,例如每一个地区每月的销售情况。一般地,事实表中的数据是不允许修改的,新数据只是简单地增加进去。维度表包含了用于参考存储在事实表中数据的数据,例如产品描述、客户姓名和地址、供应商信息等。把特征信息和特定的事件分开,可以通过减少在事实表中扫描的数据量提高查询性能。维度表不包含与事实表同样多的数据,维度数据可以改变,例如客户的地址或者电话号码改变了。
通过降低需要从磁盘读取数据的数据量,星型模式设计有助于提高查询性能。查询语句分析比较小的维度表中的数据来获取维度关键字以便在中心的事实表中索引,可以降低扫描的数据行。
在转换OLTP数据库模式到星型模式时,涉及的步骤如下:
确定事实表和维度表
设计事实表
设计维度表
实现数据库设计
(1)确定事实表和维度表
确认在OLTP系统中现有的表和数据包含了将要用在事实表和维度表中的数据,是非常重要的。如果确认不正确,那么数据仓库的性能就比较差,在以后可能需要重新设计。重新设计一个可能包含了大量数据的数据仓库是一项耗费很大的任务。确定事实表和维度表的结构和组成的过程比较难,特别是当涉及多个OLTP系统时。
(2)设计事实表
设计事实表的主要目标是最小化表的大小。事实表是数据库中最大的表,因为它们包含了基本的商业事务的详细信息。然而,一定要考虑存储和维护这些大表的成本。例如,大表的处理时间比较长、备份和恢复的时间比较长、执行查询的时间也比较长。降低事实表大小的最简单方法如下:降低列的数量、尽可能地降低每一个列的大小、把历史数据归档到单独的事实表等。
(3)设计维度表
设计维度表的主要目标是非正规化那么参考事实表的数据到一个单独的表。最常用的维度数据应该直接参考事实表,而不是通过其他维度表间接参考维度表。这种方法可以最小化表连接的数量,提高系统的性能。
(4)实现数据库设计
当事实表和维度表设计之后,最后一步是在Microsoft SQL Server中物理地实现数据库。当创建数据库时,考虑分区策略,可以使用由SQL Server提供的可以并行处理数据的文件组。当创建用于存储事实和维度的表时,应该尽可能地考虑数据库的分区策略,把事实表分别存储在不同的文件组上。索引可以加速数据仓库的检索,应该在每一个维度表的关键字列上创建一个索引。
3.提取和加载数据
把经营系统中数据提取出来然后加载到数据仓库中,随着复杂性的变化而变化。如果在数据源中的数据和将要出现在数据仓库中的数据是直接关联,那么这个进程非常简单。这个进程也可能非常地复杂,例如数据源的数据驻留在多个异构系统中,并且在加载数据之前需要大量的转变格式和修改。提取和加载数据的进程如下:
校验经营系统中的数据
从经营系统中提取数据
净化数据
把数据转换和迁移到数据仓库中
(1)校验数据
在数据从OLTP系统提取之前,确保数据是完全有效的是非常必要的。应该由商业分析人员在数据源确定是有效的。对数据的任何变化应该在经营系统中改变,而不是在数据仓库中。校验数据是非常耗时的,通过写存储过程来检查数据的域完整性来自动化校验进程。然而,手工校验数据也是必要的。如果发现了无效的数据,应该尽力找到错误发生的原因和更正这些错误。
(2)迁移数据
从经营系统中迁移数据一般是在数据拷贝到数据仓库之前,把数据拷贝到一个中间数据库中。如果数据需要净化,那么把数据拷贝到中间数据库中是必要的。应该在OLTP系统中活动比较低的时候拷贝数据,否则会降低系统的性能。另外,如果该数据仓库是由来自多个相关经营系统中的数据构成,应该确保数据迁移发生在系统同步的时候。如果经营系统不同步,那么数据仓库中的数据可能会产生预想不到的错误。在Microsoft SQL Server 7中,Microsoft SQL Server Data Transformation Services Import and Export wizards可以用来创建一系列任务,可以把数据从异构经营系统中拷贝到一个运行SQL Server的中间数据库中。
(3)数据净化
数据净化就是使数据达到一致性。在多个经营系统中,可能有相同的数据。例如,一个名称为ABC Cooperation的公司可能被写成ABC Co、ABC、ABC Cooperation等。如果这些名称不一致,那么在查询的时候就会将这个公司作为两个不同的公司处理。如果在数据仓库中的数据生成一致的信息,那么该公司的名称必须完全一致。
数据净化可以通过下面几种方法得到:
在从OLTP系统拷贝到中间数据库或者数据仓库时,使用SQL Server的数据转换服务的数据引入引出向导修改数据
写一个连接数据源的Microsoft ActiveX脚本或者Visual C++程序,由DTS API程序执行,来净化数据
例如,在定单系统中,这些数据需要净化:State(必须总是两个字符的值)以及ProductName(必须是产品的完整名称,不能使用缩写)。那么,在拷贝数据的进程中,可以使用数据转换服务的引入引出向导检查State的值,使其为两个字符的值,通过写Visual C++程序可以保证产品的名称为完整的名称。一旦数据净化之后,就可以把数据移动到数据仓库中。
(4)转换数据
在数据的迁移进程中,一般地,经常需要把经营数据转换成一种单独的格式,以便适应数据仓库的设计。例如,转换数据可以包括下列内容:把所有的字母字符转变成大写字母;重新计算汇总数据;把单个数据分解成多个数据,例如把格式为nnnn-description的产品代码分解成单独的代码和描述值;把多个数据合并成一个数据,例如把姓和名合成一个数据姓名;把数据从一种表示形式映射成另外一种表示形式。例如把数据(1, 2, 3, 4)转换成(I, II, III, IV);由于数据已经被净化了,所以数据转换进程发生在迁移进程中,这时数据要么从经营数据库中要么从中间数据库中拷贝到数据仓库中。