转载至:
http://www.ciotimes.com/infrastructure/database/a/database200909161049.html
导读:本文提出一种改进的数据仓库体系结构,在数据仓库中添加一个辅助结构作为接收和存储更新数据的暂存库,直到数据仓库获得空闲周期,加入新的数据和更新必要的视图;通过试验模拟两种数据仓库结构,验证了新的模型在设计和性能上的优越性。
本文提出一种改进的数据仓库体系结构,在数据仓库中添加一个辅助结构作为接收和存储更新数据的暂存库,直到数据仓库获得空闲周期,加入新的数据和更新必要的视图;通过试验模拟两种数据仓库结构,验证了新的模型在设计和性能上的优越性。
数据仓库中的数据是从多业务处理系统中抽取转换而来的,这些数据源的数据是不断变化的。因此,数据仓库需要更新机制来不断更新和维护,以保证数据的完整和正确。同时,数据仓库面向决策支持,数据仓库的体系结构应努力保证查询和分析的实时性。
现在系统越来越庞大,数据源越来越多,结构也越来越复杂,这使得数据仓库的加载和更新维护工作更加困难,制定一个数据集成的计划花费的时间和精力也是越来越多。面对这种情况,开发人员的精力被调度繁杂的系统所占用,无法集中到制定合理高效的数据集成计划上来。为了使这一过程更加自动化,减少人工干预,我们引入了基于元数据库的工作流方法,使得整个数据仓库更新处理过程成为一个整体,更加简单易行,减轻了开发人员的负担,从而提高效率。
1 数据仓库的更新问题
为了对决策提供有效的支持,数据仓库中的数据需要不断地从业务数据库中得到更新。数据更新是指在原有数据仓库基础上,定期捕捉源数据库的变化数据,追加到数据仓库中。数据仓库获得所需更新信息的方法有以下3种:
(1)由建立在源数据库上的应用程序提供更新信息给数据仓库。这种方法优点是易于执行,只要对历史遗留系统的代码稍加修改,使它提供源数据库中的更新给数据仓库。缺点是遗留系统的代码难以提供一个好的平台为数据仓库更新。
(2)利用日志文件。这种方法的优点是对数据仓库的更新不会影响源数据库,利用日志文件效率很高,避免了扫描整个数据库。缺点是解析源数据库日志文件有困难,即:①系统日志文件通常采用软件供应商专有的形式,而不同供应商之间难于共享结构信息;②获得日志文件,需要系统管理员权限;③数据库系统不一定都有实施该方法的数据库日志类型。
(3)前后映象文件的方法。在抽取数据前后对数据库各作一次快照,然后比较两幅快照的不同从而确定新数据。这种方法的优点和第2种方法一样,快照数据被提供给数据仓库,或者提供给独立于源数据库和数据仓库的辅助处理器,来完成快照的比较工作。缺点是快照文件会变得越来越大,导致快照的比较工作非常耗时,占用大量资源,影响性能。数据仓库更新过程牵涉的因素众多而且复杂,因此,本文的研究只限于源数据已经传递到数据仓库后的数据更新处理。
2 改进的数据仓库体系结构
常用的数据仓库体系结构如图1所示,它集成源数据库的数据,并将其存储在数据仓库中,用户直接从数据仓库访问数据。这个结构简单易行,但它不能及时地自动侦测源数据库的更新,只有当高端应用对数据仓库进行查询时,才由数据仓库的实体化视图对相关的源数据库发动查询,源数据库对更新处理处于被动状态。本文建议在数据仓库体系结构中添加一个如图2所示的更新辅助结构,来优化数据仓库的性能,减少用户查询时间。该结构假定为非易失随机存储器NVRAM,用它作为数据仓库和数据解释器之间的缓冲存储区。辅助结构和源数据库(SDB)之间的数据流是单向的,负责接收由SDB提交到数据解释器的更新数据。辅助结构和数据仓库之间的数据流是双向的,它向数据仓库提供视图维护的基本数据,数据仓库的查询和维护请求则在辅助结构中执行完成。有了这个辅助结构,避免了数据仓库在接收数据解释器中数据的同时,对数据库表和用户视图执行更新维护。使得数据仓库的更新选择在系统空闲时间,而不是在新数据由源数据库转换的同时进行。数据仓库使用具有周期性,因此必然存在接收更新数据的空闲时间。另外数据仓库可以查询辅助结构获取更新数据,反馈给用户的查询。为了防止辅助结构中数据溢出,设一个机制强制执行更新事务,将有关数据传送到数据仓库。
图1 标准数据库仓库模型
图2 数据仓库的改进模型
3 改进模型的设计实现
新模型结构重点在于用户查询,系统对用户查询响应拥有对系统其他进程更高的优先权。
(1)功能结构。来自数据解释器的数据,首先存放在更新辅助结构的数据表中。这些辅助表(例如索引)是存储在数据仓库中的表的副本,但是不具有与数据仓库结构相联系的管理能力。它们是用于更新数据仓库的临时存储,而不用于用户直接访问。更新信息传送到辅助结构时,首先检查辅助结构的空间相对分配给辅助结构的NVRAM空间所占比例。当辅助结构已使用空间达到NVRAM空间的95%,标志溢出,更新辅助结构自动生成数据包和必要的查询传递给数据仓库。溢出功能触发器是一种安全措施,防止因为更新辅助结构的存储空间满,不能接收来自数据解释器的数据。操作流程为数据仓库在空闲时间请求更新辅助结构里的数据。数据仓库的系统请求或者数据溢出标志可能会触发更新进程。一旦更新进程被触发,更新辅助结构生成数据包,并发送给数据仓库,用于插入到数据仓库表中。数据仓库中相应的数据表和视图被更新,在更新完成后,事务完成信息返回给辅助结构。然后辅助结构删除临时存储表中的相关数据,从而释放其占用的空间。
(2)处理用户查询。数据仓库接到用户查询要求后,系统暂停队列表中除了来自辅助结构的用户查询响应之外的所有队列。仓库应用程序确认用户查询,并将一个查询副本立即发送给更新辅助结构,辅助结构临时内存中可能存有与查询相关的信息。查询先在数据仓库的主数据表处理,查询的结果暂存在临时表里,该临时表用于存放以后不断积累的查询结果数据。如果辅助结构里有任何与查询有用的数据,会被立即提交给数据仓库作为对查询副本的响应。辅助结构响应用户查询的数据传输在系统信息通道中有最高优先权,以确保来自数据仓库的信息迅速地被处理,并使当前执行的用户查询较系统查询队列里其他查询最先获得所需数据。如果辅助结构中没有符合用户查询要求的数据,辅助结构提交一个空包作为响应,防止数据仓库空等待,使数据仓库能控制用户查询进程,确认查询进程的结束。来自辅助结构的数据加入到临时表里,然后发给报表/视图生成器处理成用户可读的形式。
4 基于XML的中间件模型
改进结构中提供了多种操作符,如投影、选择、连接、并、拆分等。把复杂的数据集成工作分解为很多相对简单的小步骤,使用户可以灵活地定制自己的数据集成计划,这样也为使用工作流方法来调度整个数据集成计划提供了方便,因为工作流方法对于这种流程化的处理十分方便。使用工作流方法,来操纵数据的流向,使其从数据源经过预先指定的处理过程流向目标,即数据仓库中。工作流方法离不开元数据库的支持。元数据贯穿于数据仓库的整个过程。按照数据库中的定义,元数据是关于数据的数据。在数据仓库的环境下,元数据的作用更加重要,由于数据仓库是面向主题的,所以其元数据的内容也更加丰富。初始阶段我们可以根据元数据库提供的数据源信息,来制定清洗计划,执行这个计划,能完成一次数据的抽取转换和加载任务,把各个数据源中的零散的数据整合到数据仓库中;在维护阶段,把用户在建立数据仓库的初期所制定的计划,主要包括数据库的表信息以及用到的临时表等,以XML文件的形式保存在元数据库中。这样节约了管理人员的时间,他们的精力可以更多地集中在制定一个合理高效的数据集成计划上,从而提高效率。
5 一种更新流实例
以下给出了一个具体的例子来说明改进结构如何处理凋度流程,如图3、图4所示。
图3 改进结构的数据集成框架
图4 计划工作流流程
图4中每一个节点都是工作流的一个活动,箭头所指向的是数据流的实际流向,从数据源到目标。虚线表示的是控制流。数据流向和控制流向基本相同,重合的没有画出,只是在并操作时不同,所以用不同的箭头标注出来。本例中,要把来自3个不同数据库的原始表经过一系列的操作如投影连接等,整合成一张表加载到数据仓库中。首先通过ODBC/OLE DB标准或者数据源提供的API,把数据从源中抽取出来。然后先投影表1,再与表2进行连接,得到的表与表3进行并,形成一张表,再进行一些排序筛选,最后加载到目标数据仓库中。要注意的是,在进行并(Union)操作的2个表必须是列结构相同,否则要进行回溯,对2表进行相应的改动处理,符合Union 的要求后才能继续处理下去。
在改进的模型结构中,投影(Project)、连接(Join)、并(Union)等操作符都对应一个类(Class)。与此操作符相关的各种处理都封装在类的内部。工作流引擎通过工作流API接口来调用类内的相关函数,完成数据集成。下面是图4这个数据集成计划的XML文件格式,我们只关注定义活动的部分:
…
…
Ying Liu
</Activitylnvolve>
SELECT[reader]FROM tablenameWHERE.
…
</ActiVityInvolve>
<!- -活动的流向- ->
转向6</Choice>
转向7</Choice>
转向8</Choice>
结束</Choice>
</App rovalChoices>
</Activity>
…
<!- -活动之间的流向定义- ->
</FlowDirection>
其中是定义Union这个活动,包括活动的所有者,数据可能流向与条件等。是定义一个流向,即图中的一个箭头,标志了箭头的起始活动等。这个文件就可以把我们的计划保存下来,工作流引擎通过XP2DL解析器来解析这个文件,来获得最初用户制定的集成计划。
触发更新操作的时机。触发更新操作可以有多种方式:①可以由用户驱动,如用户发出命令来进行数据仓库的更新;②可以时间驱动,如规定在一天当中的某个时刻来更新数据仓库;③还可以用事件驱动,如数据源的日志发生改变后,启动更新操作。触发方式也保存在元数据库中,可以根据需求灵活地选择最佳方式。
6 结束语
数据仓库设计和运行过程中,数据抽取、转换和转载ETL是一个重要的问题,其中,数据更新又是一个关键点。本文讨论了在数据更新过程中,为捕获源数据库更新,提出了一种改进的数据仓库体系结构,它使数据的更新较传统结构更快速、便捷。并在提出的改进模型基础上,设计了在元数据库指导下,以工作流的方法来调度整个更新过程。