3.7 数据仓库物理模型设计
数据仓库的物理模型就是数据仓库逻辑模型在物理系统中的实现模式。其中包括了逻辑模型中各种实体表的具体化,例如表的数据结构类型、索引策略、数据存放位置和数据存储分配等。在进行物理模型的设计实现时,所考虑的因素有:I/O存取时间、空间利用率及维护的代价。
为确定数据仓库的物理模型,设计人员必须做这样几方面工作:首先要全面了解所选用的数据库管理系统,特别是存储结构和存取方法;其次了解数据环境、数据的使用频率、使用方式、数据规模及响应时间要求等,这些都是对时间和空间效率进行平衡和优化的重要依据;最后还需要了解外部存储设备的特征。只有这样才能在数据的存储需求与外部存储设备条件两者之间获得平衡。
3.7.1 设计存储结构
在物理设计时,常常要按数据的重要性、使用频率及对反应时间的要求进行分类,并将不同类型的数据分别存储在不同的存储设备中。重要性高、经常存取并对反应时间要求高的数据存放在高速存储设备上;存取频率低或对存取响应时间要求低的数据则可以存放在低速存储设备上。另外,在设计时还要考虑数据在特定存储介质上的布局。在设计数据的布局时要注意遵循以下原则。
● 不要把经常需要连接的几张表放在同一存储设备上,这样可以利用存储设备的并行操作功能加快数据查询的速度。
● 如果几台服务器之间的连接会造成严重的网络业务量的问题,则要考虑服务器复制表格,因为不同服务器之间的数据连接会给网络带来沉重的数据传输负担。
● 考虑把整个企业共享的细节数据放在主机或其他集中式服务器上,提高这些共享数据的使用速度。
● 不要把表格和它们的索引放在同一设备上。一般可以将索引存放在高速存储设备上,而表格则存放在一般存储设备上,以加快数据的查询速度。
在对服务器进行处理时往往要进行大量的等待磁盘数据的工作,此时,可以在系统中使用RAID(Redundant Array of Inexpensive Disk,廉价冗余磁盘阵列)。
3.7.2 设计索引策略
数据仓库的数据量很大,因而需要对数据的存取路径进行仔细地设计和选择。由于数据仓库的数据一般很少更新,所以可以设计索引结构来提高数据存取效率。在数据仓库中,设计人员可以考虑对各个数据存储建立专用的索引和复杂的索引,以获取较高的存取效率,虽然建立它们需要付出一定的代价,但建立后一般不需要过多的维护。
数据仓库中的表通常要比联机事务处理系统(OLTP)中的表建立更多的索引,表中应用的最大索引数应与表格的规模成正比。数据仓库是个只读的环境,建立索引可以取得灵活性,对性能极为有利。但是表若有很多索引,那么数据加载时间就会延长,因此索引的建立需要进行综合的考虑。在建立索引时,可以按照索引使用的频率由高到低逐步添加,直到某一索引加入后,使数据加载或重组表的时间过长时,就结束索引的添加。
最初,一般都是按主关键字和大多数外部关键字建立索引,通常不要添加很多的其他索引。在表建立大量的索引后,对表进行分析等具体使用时,可能需要许多索引,这会导致表的维护时间也随之增加。如果从主关键字和外部关键字着手建立索引,并按照需要添加其他索引,就会避免首先建立大量的索引带来的后果。如果表格过大,而且需要另外增加索引,那么可以将表进行分割处理。如果一个表中所有用到的列都在索引文件中,就不必访问事实表,只要访问索引就可以达到访问数据的目的,以此来减少I/O操作。如果表太大,并且经常要对它进行长时间的扫描,那么就要考虑添加一张概括表以减少数据的扫描任务。
3.7.3 设计存储策略
确定数据的存储结构和表的索引结构后,需要进一步确定数据的存储位置和存储策略,以提高系统的I/O效率。下面介绍几种常见的存储优化方法。
1.表的归并
当几个表的记录分散存放在几个物理块中时,多个表的存取和连接操作的代价会很大。这时可以将需要同时访问的表在物理上顺序存放,或者直接通过公共关键字将相互关联的记录放在一起。
在图3-57中商品表和商品存储关系表是2个经常需要同时访问的表,在对存储关系表进行查询后,需要通过商品ID到商品表中获取商品的其他基本属性,以比较直观的方式显示给最终用户。
图3-57 表归并的表现形式
对于这种情况,我们可以将2个表的记录通过公共关键字将相互关联的记录放在一起。如图3-57所示。设计时可以先存放商品ID为1的商品在商品表中的记录,然后将仓储关系表中同商品1相关的2条记录放在其后。这样,在进行数据访问时,就可以提高I/O的效率。
表的归并只有在访问序列经常出现或者表之间具有很强的访问相关性时才有较好的效果,对于很少出现的访问序列和没有强相关性的表,使用表的归并没有效果。
2.引入冗余
一些表的某些属性可能在许多地方都要用到,将这些属性复制到多个主题中,可以减少处理时存取表的个数。
例如,在图3-58所示的商品存储关系表中增加“商品名称”和“商品类型”等用户常用的字段。这样通过在逻辑设计中引入冗余数据来达到提高更新和访问速度的效果。
图3-58 引入冗余数据示意图
3.其他方法
除了以上2种主要的方法外,还有以下3种方法可以对存储分配进行优化。
● 建立数据序列。按照某一固定的顺序访问并处理一组数据记录。将数据按照处理顺序存放到连续的物理块中,形成数据序列。
● 表的物理分割。每个主题中的各个属性存取频率是不同的。将一张表按各属性被存取的频率分成2个或多个表,将具有相似访问频率的数据组织在一起。
● 生成派出数据。在原始数据的基础上进行总结或计算,生成派出数据,可以在应用中直接使用这些派出数据,减少I/O次数,免去计算或汇总步骤,在更高级别上建立了公用数据源,避免了不同用户重复计算可能产生的偏差。
以上完成了数据仓库从概念模型到物理模型的整个设计过程。下一步的工作就是创建数据仓库。由于数据仓库本身是由DBMS管理的,因此可以像创建普通的数据库一样创建设计好的数据仓库。这属于数据库管理的内容,具体创建过程参见《SQL Server 2005数据库管理与应用高手修炼指南》。