异构数据交换平台智能局部代理研究与实现,优秀专业论文(全文)
下面是小编为大家整理的异构数据交换平台智能局部代理研究与实现,优秀专业论文(全文),供大家参考。
异构数据交换平台智能局部代理的研究与实现 摘 摘
要 要:异构数据交换是指异构数据处理环境下不同数据源之间的互操作,本文针对传统数据交换平台中实时性差的缺点,对异构数据交换平台进行扩展,采用主动数据库技术在局部数据源端开发智能局部代理,捕获数据源的更新,从而实现实时的异构数据交换。文中对智能局部代理的设计进行了详细的阐述,并对其主要功能进行了实现,最后将其应用到某纺织企业的异构数据交换平台中,事实证明该智能局部代理可以有效的满足企业对实时数据交换的需求。
关键词:数据交换,智能代理,主动数据库 中图分类号:TP311
文献标识码:A Research and Realization of Heterogeneous Data Exchange Platform Intelligence Agent Abstract: Heterogeneous data exchange refers to the interoperability between different data sources under the heterogeneous data processing environment.This article expands the heterogeneous data exchange platform aiming to the bad real-time property of the traditional data exchange platform. It develops the intelligent local agent in the local data source through active database technology to capture the updates of data sources, so as to realize the real-time exchange of the heterogeneous data.The article describes the design of intelligent local agent in detail, and applies the main functions to the heterogeneous data exchange platform of a textile enterprise, which proves that the intelligent agent can effectively meet the real-time data exchange requirements of enterprise. Key words: Data Exchange, Intelligence Agent, Active Database 0 引言 随着企业信息化建设的逐渐深入,企业内部信息系统之间的实时的数据交换需求也进一步得到了提高,然而由于目前大多企业信息系统都是以非主动数据源为基础进行建立的,传统的数据交换平台也仅支持被动的数据交换。但对于制造企业,需要获取生产过程中产生的实时数据,这就需要异构数据交换平台能够提供主动的数据交换机制,当源数据源得到更新后,数据交换平台应该能够按照预先定义好的数据交换规则,将更新的数据及时加载到目标数据源中。
由于 XML 具有跨平台和内容与结构相分离的特性,已经成为数据交换领域用来表示中间数据的事实上的标准,语义网中的本体作为共享模型的明确的形式化规范说明 [1] ,对消除异构系统间的语义异构问题提供了一个很好的解决方案。文献[2]和[3]提出了一种基于本体和 XML 的异构数据交换模型,而本文则针对棉纺制造业对实时数据交换的需求对基于本体的异构数据交换模型进行扩充,通过开发基于主动数据库技术的智能局部代理,使局部数据源具有主动服务的功能,从而实现异构数据源间实时的数据交换。
1 主动数据库技术 主动数据库技术是使数据库系统具有主动服务功能的技术,它能够主动监视数据库事件 、根 据预 先定义 的规 则触 发相 应动作 。通 常情 况下 ,主动 数据 库技 术采 用ECA(Event-Condition-Action,事件-条件-动作)模型进行实现。
要实现主动数据库的功能通常有三种方法 [4] :(1)在原有的数据库系统基础之上进行改造。该方法通过增加一个外部事件监视器监控数据库事件的发生,并执行相应的预定义动作。(2)将一般程序设计语言改造为主动程序设计语言。(3)重新设计一种主动数据库程序设计语
言。上述方法中第一种方法比较容易实现,第二种方法在一定程度上可提高系统的运行效率,第三种方法最为彻底,但是实现上比较困难。
目前主流的数据库系统(例如 SQL Server、Oracle 等)都提供了触发器机制用来实现主动数据库功能,触发器是一种特殊类型的存储过程,触发器在发生 INSERT、UPDATE 和DELETE 事件时触发,触发器中是用户希望在数据表发生变化时所执行的一些 SQL 语句。它可用于对约束、默认值和规则的完整性检查。根据触发器触发的事件不同,触发器可分为插入触发器、更新触发器和删除触发器。根据触发器发生的时间不同,可将触发器分为AFTER 触发器和 INSTEAD OF 触发器,AFTER 触发器在数据变动完成之后触发,而INSTEAD OF 触发器则在数据变动之前触发。
本文利用原有的数据库技术对局部异构数据源建立基于表的各种触发器,实时的捕获局部数据源的数据更新,然后通过监听程序将捕获到的数据转换成 XML 格式并调用数据交换引擎将更新的数据加载到目标数据源。
2 异构数据交换平台模型体系结构 经过扩展的异构数据交换平台模型体系结构如图 1 所示,该模型使用混合本体的方法解决异构数据库的语义异构问题。XML 作为数据交换平台的中间数据表示形式消除了异构数据源间的结构异构。数据交换平台采用 SOA 的架构,将局部数据源的包装器,局部智能代理以及数据交换模块等都封装成 Web 服务的形式,使得跨网络的数据交换成为可能。智能局部代理使用触发器机制感知局部数据源的变化,一旦发现需交换的数据得到更新,就调用数据交换服务,实现数据的同步更新。
Web客户端SQLServerOraclePostgreSQL智能局部代理应用1适配器智能局部代理适配器智能局部代理适配器应用2应用3数据源层UDDIPKI安全设施安全管理用户管理日志管理本体库管理模式库管理数据交换层应用层SOAP/HTTPSOAP/HTTPSOAP/HTTPSOAP/HTTPSOAP/HTTPSOAP/HTTPHTTP本体库全局本体局部本体领域本体库局部数据源模式库模式1模式N本体映射器数据交换中心转换方案生成器数据转换器 图 1 异构数据交换平台体系结构图 3 异构数据交换平台智能局部代理设计 智能局部代理基于主动数据库机制,其通过感知数据库变化事件触发相应的处理机制,从而达到数据库的实时更新。局部智能代理主要采用数据库中的触发器技术对数据库变化事件进行检测,捕获数据库变化事件的类型和变化的数据,然后将变化的数据转换成 XML 格式与事件类型一起通过调用数据交换中心的数据交换服务传送到数据交换中心。智能局部代理的结构及进行数据交换的过程如图 2 所示。
智能局部代理源数据库更新/插入触发器自动数据交换规则配置器监控器数据抽取器数据交换服务器端数据交换数据源端数据交换服务SOAP/HTTPXML数据监控线程数据交换中心调用触发器生成器自动创建目标数据库适配器服务数据加载XML解析器XML加载器SOAP/HTTP数据库连接配置文件XML数据智能代理数据库Hibernate图 2 智能局部代理数据交换过程 智能局部代理通过更新/插入触发器将捕获到的更新数据存储到临时数据缓冲区中,监控器每隔固定的时间对缓冲区,扫描到更新的数据后使用数据抽取器将缓冲区中的数据转换成 XML 格式并清空缓冲区,通过数据交换服务将待交换的数据传递到数据交换中心。数据交换服务通过局部本体和全局本体间的映射得到两个局部数据源间的映射关系,从而生成XSLT 转换文档,将源 XML 文档转换成符合目标数据库结构的目标 XML 文档后调用目标数据库的适配器服务将目标 XML 文档解析并加载到目标数据库中。由图 2 可知,智能局部代理主要由数据更新触发器、自动数据交换规则配置器和监控器组成。
数据更新/插入触发器主要用到 AFTER 触发器,即在数据源更新完成之后触发。触发器触发的事件主要包括有更新和插入操作。在局部数据源端为每个数据表定义一个触发器,触发器的名称为表名加 trigger,例如表名为 chemical_fiber_test 的表所对应的触发器名称为chemical_fiber_test_trigger。触发器由触发器生成器根据触发器和数据表的映射关系自动进行创建。触发器将捕获到的更新数据存储到临时数据缓冲区中,该缓冲区是一个和原数据表结构相同的用于存储临时数据的表,表名通过事先设置好的映射得到,用于存储触发器和表的映射关系的数据表结构如表 1 所示:
表 1 触发器和数据表的映射关系表 字段名称 中文含义 数据类型 备注 trigger_name 触发器名称 varchar(30) 主键 table_name 数据表名称 varchar(30)
temp_table_name 缓冲区表名称 varchar(30)
is_on 触发器是否开启 int
触发器和数据表的映射关系表中所描述的数据表存储了一个触发器所对应的数据表和用于存储临时数据的表的名称,还使用 is_on 字段存储了当前触发器的状态,它用来判断触发器是否开启,0 代表触发器关闭,1 代表触发器开启。
下 面分别以 SQL Server 和 Oracle 数据库为例 , SQL Server 中 创建 数据表chemical_fiber_test 的插入触发器的 Transact-SQL 语句为:
CREATE TRIGGER
chemical_fiber_test_trigger
ON
chemical_fiber_test
FOR INSERT AS
BEGIN
IF object_id("chemical_fiber_test_temp","u") is not null--
判断缓冲区表是否存在
INSERT into chemical_fiber_test_temp select * from INSERTED
ELSE
SELECT * into chemical_fiber_test_temp from INSERTED END 创建 Oracle 行级插入触发器的 PL/SQL 语句为:
CREATE OR REPLACE TRIGGER chemical_fiber_test_trigger AFTER INSERT ON chemical_fiber_test FOR EACH ROW BEGIN SELECT count(0) into num
FROM user_tables WHERE table_name=" CHEMICAL_FIBER_TEST_TEMP’; IF num> 0 THEN--判断缓冲区表是否存在
INSERT into chemical_fiber_test_temp select * from :new;
ELSE
SELECT * into chemical_fiber_test_temp from :new;
END IF; END; 上述创建触发器的语句中先判断用于存储临时更新数据的缓冲区表是否已经存在,如果已经存在,则执行 INSERT INTO SELECT 语句,将 INSERTED 表中存储的新插入的数据复制到缓冲区表中,SQL Server 将被 INSERT 和 UPDATE 语句影响的新的数据行存储到INSERTED 表中,INSERTED 表是一个存储在内存中的临时表,通过查询 INSERTED 表可以得到新插入的数据行,Oracle 使用临时表 new 实现与 INSERTED 表同样的功能。如果缓冲区表不存在,则执行 SELECT INTO 语句。INSERT INTO SELECT 和 SELECT INTO 语句是分别用于目标表已存在和目标表不存在情况下的表复制语句。
自动数据交换规则配置器是一个用于设置自动数据交换的 Web 服务,数据交换中心通过调用该配置器实现自动数据交换的开启和关闭操作。
ALTER TABLE
tableName ENABLE TRIGGER triggerName--开启触发器 ALTER TABLE
tableName DISABLE TRIGGER triggerName--关闭触发器 在开启或关闭触发器的同时,数据交换规则配置器还需要将表 1 中所描述的表中触发器的状态设置为开启或者关闭状态。
监控器由负责监控数据是否更新的监控线程和数据抽取器组成,监控线程每隔一定的时间对触发器处于开启状态的数据表所对应的缓冲区进行扫描,检查缓冲区中是否有新的数据行,如果有新的数据行,则将调用数据抽取器抽取更新数据并调用数据交换服务,然后清空数据缓冲区。如果数据交换成功,完成此次数据交换任务,否则数据交换中心将该次的数据交换失败信息记录到系统日志中,供管理员进行处理。如果没有数据更新则继续进行扫描。监控器在进行数据抽取的同时将每次数据抽取的详细信息以日志的方式进行记录,方便在发生错误时进行数据的修复。日志中主要记录了抽取的数据表名、数据数量、抽取时间等信息。为了提高智能局部代理的可移植性,它通过使用 Hibernate 访问用于保存监控日志和触发器与数据表映射关系数据库。
4 智能局部代 理的实现
下面以某棉纺制造企业数据交换平台为应用背景对智能局部代理进行实现。该棉纺企业在信息化建设过程中相继建立了原料质量管理、生产计划管理、配棉管理、财务管理、设备管理、供应链管理、成本控制管理等信息系统,这些系统由于建立时间和开发技术的不同导致了信息孤岛的存在,系统间的数据共享问题成了制约企业发展的瓶颈。并且由于企业分部需要及时的将产品的生产和销售数据汇总到总部,以便总部进行统计和决策支持,我们通过将智能局部代理应用到数据交换平台中实现该企业实时的数据交换。
智能局部代理主要包括有四个主要功能,分别为监控程序管理、触发器初始化管理、触发器状态管理以及数据抽取日志管理。这里仅列出监控器的主要实现代码:
public class Monitor { public static Timer timer; … public void startMonitor(int seconds){
if (timer == null) {
timer = new Timer();
//启动监控线程
timer.scheduleAtFixedRate(new MonitorTask(), new Date(),seconds * 1000);
} } public void terminateMonitor(){
timer.cancel();//结束监控线程 } class MonitorTask extends TimerTask {//内部类,用于执行数据抽取任务
public void run() {
String xmlData =””;
try {
xmlData = extractXML();//检测是否有数据更新,有则抽取数据
transferXML(xmlData);//将抽取到的数据传输到数据交换中心
} catch (Exception e) {
e.printStackTrace();
}
}
} public void transferXML(String xmlData){//调用数据交换引擎服务
String endpoint =
"http://localhost:8080/dataexchangeplantform/DataTransform...
推荐访问:异构数据交换平台智能局部代理研究与实现 优秀专业论文 局部 数据交换 优秀