1 引言
数据库现在已经成为大型软件不可缺少的一部分,数据库在软件体系中扮演着越来越重要的角色,数据库设计正日益成为影响软件性能、健壮性的重要因素。随着软件体系结构的复杂性变得越来越高,开发人员不得不设计更多的表来存储他们需要的数据。表越多,数据库越复杂。复杂的数据库对于数据的写入不会有任何问题,但是如果我们想把数据取出来,将变得异常的困难。这在一些响应需求很高的软件中是不能忍受的。
数据仓库是近几年来数据库领域非常活跃的一个研究方向。数据仓库主要解决的问题就是从海量的历史数据中通过数据挖掘进行知识发现,提供决策支持。数据仓库的设计目标是给决策层提供支持,但是其面向主题性、完整性、稳定性为我们解决上面的问题提供了思路。
2 问题描述
现在以网络管理软件为例说明构建轻量级数据仓库的必要性。大型的网络管理系统非常的复杂,具有管理设备多、网络层次复杂、响应需求性高等特点。网络管理客户端系统一般可以粗略的分为两部分,网管GUI和报表系统。网管GUI部分主要功能是对设备进行监视和数据采集。报表系统主要功能是对采集到的数据进行分析、提供网络运营情况的详细报表可能包括日报表、周报表、月报表、季度报表、年报表。每种报表可能还会按照网络层次、区域(可能是地理的也可能是逻辑的)等规则来划分。网络管理软件的开发人员还可能由于性能、语言、复杂性等因素存入不当的数据类型(比如时间,很多开发人员可能更愿意使用long型的数据类型而不愿意使用Datetime或者字符串类型的数据类型,因为这样便于程序员的操作、比较,性能也更好一点)。然而不当的数据类型可能给报表系统、数据库更大的压力,造成性能的严重恶化。多表的关联也是影响数据库性能的主要因素之一。因为有时候为了获得需要的结果,不得不从多个表中根据相关条件进行条件选择,本来就很多的数据又以联合级数增长。下面以图1的表簇为例,并用SQL server数据库进行查询,得到记录数和响应时间表格如下:
从上面的表格可以看出,当数据量达到百万级的时候不良的数据类型造成的响应时间就达到了分钟级别,恰当的数据类型的响应时间也长达30秒钟,而且这是在用数据库的查询工具在本地进行查询,在实际的应用中更多的是分布式系统,数据库和进行查询的报表分布在不同的主机之上。考虑到网络的传输和数据库之间的接口,响应速度就会更加恶化,任何一个优秀的软件,这种响应速度都是不能忍受的。网络管理中数据采集的数据量是巨大的,百万级的数据量在统计IP层发送的包数、字节数,监控重要或者核心设备的状态信息是常见的。网络管理软件中是如此,在需要频繁高密采样的软件设计中,也会遇到同样的问题。
3 数据仓库
3.1 数据仓库简介
数据仓库概念始于20世纪80年代,首次在数据仓库之父William H.Inmon的《建立数据仓库》一书中出现的。随着这几年对数据仓库的广泛研究,数据仓库的概念逐渐清晰。数据仓库是企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的集合,用于支持经营管理中的决策过程。与传统的联机事务处理系统相比,数据仓库中的数据具有如下特点:
3.1.1 面向主题
面向主题是数据仓库最重要的特征之一。传统的数据是面向应用的,数据与应用紧密相连,而数据仓库则是面向主题的,主题是在一个较高层次上的将数据归类的标准。基于主题的数据相互逻辑上是不交叉的。
3.1.2 集成性
当前很多企业内的数据是分散的而非集成的。造成这种分散性的主要原因是事务处理的分散性、数据的不一致性、外部数据和非结构化数据。数据仓库中的数据来源于这些现行的业务系统或管理信息系统,而这些系统是相互独立的,在数据字典、编码规则、命名方式和关键字之间等各个方面各不相同,甚至相互矛盾。在进入数据仓库之前必须对这些数据进行合理的重组、转换、清洗和集成,使原始数据结构从面向应用到面向主题转变,以适应数据仓库面向主题的要求。
3.1.3 稳定性
数据仓库中的数据主要是为信息分析和管理决策服务的,需要长期的积累,通常是通过对大量原始数据经过清洗、加工和集成后进入数据仓库的,因此根本或很少修改,具有稳定性。
3.1.4 强调时间序列
一般应用的应用中的数据可以不包含时间因素,而只表示当前情况,是企业当前情况的瞬间映像。数据仓库中的数据是企业在以前各个时间点的瞬间映像,是以时间为变量的动态过程,这样才能发现和挖掘出事务在动态变化过程中的内在规律,为决策提供支持。