UML软件工程组织

轻量级数据仓库的实现方法
作者:杜能功 吴宇红

摘要 以网络管理软件为例,分析了软件体系结构中数据库之重要性以及海量的数据和不良的数据库设计可能对软件造成的响应速度的极度恶化。本文汲取了数据仓库中面向主题的思想,提出了一种构建轻量级数据仓库模型及实现方法,用空间来换取时间,以提高软件的响应速度。该模型具有可扩展性、一次构建重复使用等特点。

关键词 数据仓库;网络管理;响应速度

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 强调时间序列

一般应用的应用中的数据可以不包含时间因素,而只表示当前情况,是企业当前情况的瞬间映像。数据仓库中的数据是企业在以前各个时间点的瞬间映像,是以时间为变量的动态过程,这样才能发现和挖掘出事务在动态变化过程中的内在规律,为决策提供支持。

3.2 数据仓库思想

数据仓库中有很多优秀的思想值得软件设计者和数据库设计者借鉴。数据仓库的核心思想之一就是其面向主题的思想。面向主题与面向数据不同,面向主题的粒度要比面向数据的粒度大,面向主题更能反映从人的层面上对数据的理解。主题反映了人对原始数据的第一次加工和对数据所载信息的归类,这种归类带有人们对数据的需求的痕迹。主题因此也构成了需求的主要元素。

数据仓库的按照主题归类主要是通过对数据块不同层面的切割实现的。数据切割主要包括切片、切块。切片是一种用来在数据仓库中将一个维度中的分析空间限制为数据子集的技术。切块是一种用来在数据仓库中将多个维度中的分析空间限制为数据子集的技术。大型的连锁超市、银行、电信、网络管理软件中的数据库,这些数据库中的大部分数据有着共同的特性,就是时间的矢量性和多层的地理区域性。时间的矢量性说明数据库中的时间是单向的递增的,不会出现时间倒退的纪录,任何写入数据库中的数据的时间都要比数据库中的最新时间新。多层的地理区域性是指一条数据按照区域的粒度可能属于某个区、某个市、某个省也可能是地理区域的变形,属于某个科室、某个部门、某个集团等。在实际的软件功能中,客户对数据需求最多的就是对这些数据进行不同层面上的聚合运算包括均值运算、求和运算、极值运算等。对同类数据进行的不同层面上的运算事实上就是对时间或者地理维度的切片或者切块。其结果构成了新的事实表,这些事实表的集合就构成了该类数据的一个主题。因此数据仓库是以主题(Subject)为基本组成单位。每个主题包含多个事实表、维表、中间表以及数据立方体,它们在本质上都是一些综合数据表。软件和数据库之间的接口直接从事实表中提取数据,避免了大量的聚合运算,因此可以极大地提高软件的响应速度,提供给用户更加友好的操作环境。

4 系统实现

数据仓库是一个庞大的系统,数据仓库的最终目的是提供决策支持。主要是通过把以前存入数据库中的数据通过数据挖掘和知识发现发现某种内在规律,比如顾客的喜好、顾客购买商品之间的关联性等。数据仓库对于很多企业比如超市连锁店、电信行业、保险行业有着很好的应用。但是实施这样一个庞大的工程是昂贵的,动则百万美金以上。这使很多企业望而却步。因此这里提出一种轻量级数据仓库的构建方案。该构建方案汲取了数据仓库的面向主题的思想,虽然该方案的目标主要是提高软件的响应速度,但是由于其面向主题的特性也可以为决策层提供支持,而且这种结构良好、面向主题的数据库系统也可以为以后完整数据仓库的构建所用,减少构建的复杂度。

很多数据库管理系统提供商比如Microsoft、Sysbase、Oracle都有其构建数据仓库专门的工具。这些工具由于是为构建数据仓库而设计,因此结构非常的复杂、对数据库设计人员的要求比较高,在软件开发中可实施性比较低。实际上关系型数据库从提出到现在已有30多年的历史,关系型数据库是现在所有数据库中包括面向对象数据库、关系型面向对象数据库发展最为完善的一种。关系型数据库中的存储过程、触发器、发布和订阅模式有足够的能力解决上面的问题。因此利用现有的关系型数据库中这些成熟稳定的工具,就可以构建轻量级的数据仓库。 轻量级数据仓库的构建模型如下图2所示,主要包括如下几个步骤:数据的清洗,根据需求定制主题集合,定制事实表采集规则,编程接口之实现。

数据清洗是原始数据进入数据仓库的第一步。软件的数据采集器采集到数据库中的数据可能含有不规则、错误的数据,也就是噪声数据,这些数据数量少,但是可能极大地影响结果的正确性,因此必须清洗掉。数据清洗主要是由数据库中的规则以及根据业务定义的清洗规则来实现的。数据库中的规则保证了数据库中的数据是合乎数据类型的而业务的清洗规则保证了数据库中的数据是合乎逻辑的。

轻量级数据仓库的第二步就是根据需求定义主题。主题是数据库中以某个表为基表,以其列集为扩展维度而构成的一系列事实表的集合。事实表的构建规则应该尽可能的和需求相吻合,这样可以最大程度上减轻software report 从Center DB 提取数据造成的对数据库的压力。主题和事实表都是可以扩展的,也是可以重复利用的。事实表可以也作为基表进行扩展新的事实表。

第三步就是定义事实表的采集规则。由于Software report 不是直接从DB里面提取数据而是从Center DB中提取数据,因此Center DB中的数据必须能够实时地反映DB中数据的变化,因此需要定制一定的采集策略。事实表的采集规则这里主要是指采集的频度策略。不同的事实表对数据的采集频度有不同的需求,例如按天统计的事实表和按周、月、年统计的事实表采集频度肯定不相同。事实表采集规则也是主要依靠需求制定的。 最后一步就是所有这些清洗规则,事实表采集规则之实现。既可以通过数据库数据库之间的接口实现,也可以通过其他编程接口实现。数据库与数据库之间的编程接口主要是通过存储过程和触发器以及数据库之间的发布订阅模式来实现。现在很多语言包括C,C++,JAVA都和数据库之间有方便的接口ADO、DAO、ODBC、JDBC,通过这些接口编程人员可以更加灵活的操作数据库,并对数据库中的数据进行处理,也可以实现数据清洗、事实表采集规则。

5 比较

轻量级数据仓库和企业级数据仓库相比有如下异同: 企业级数据仓库主要目标是为企业发展提供决策支持。轻量级数据仓库主要目标是提高软件的响应速度。企业级数据仓库的数据源是海量的,可能是10年的数据也可能是20年的数据。轻量级数据仓库的数据源要少的多,主要是软件的数据采集器采集的数据,量级在百万到千万级。企业级数据仓库的数据源是异构的,可能是源于不同的DBMS,也可能是源于不同的存储介质包括磁带、磁盘、光盘。轻量级数据仓库的数据源是同构的,主要是同一种DBMS下的数据。

企业级数据仓库和轻量级数据仓库的思想是一致的,都是面向主题的,稳定的,一经写入从不或者很少修改的。企业级数据仓库和轻量级数据仓库都是以星型为扩展模式构建的事实表的集合,本质上把频繁运算的结果集存贮为事实表,从而达到一次运算重复利用的效果。

6 结论

本文描述了轻量级数据仓库的构建模型及实现方法,并和企业级数据仓库做了比较。 该模型可运用于网络管理、电信、银行、超市等业务管理与统计软件中。该模型通过时间分摊、事实表的预运算等方法,提高了软件的响应速度。实验表明通过基于主题的事实表的构建,百万级记录的响应时间有原来的分钟级降到了1~3秒,达到了提高响应速度的目的。


版权所有:UML软件工程组织