1 背景
企业在信息化过程中遗留下来大量基于各种业务流程和异构数据源的应用系统.这些系统满足了企业某一特定的业务需求,数据有自身的特点,其它子系统很难使用别的子系统的数据,
在企业内部产生了信息“孤岛”阻碍了企业信息化进程.
|
1>异构性:多数据源系统最大的障碍是如何解决各个数据源的异构性.该异构性又分为平台异构性,数据库系统异构性,语义异构性;
2>透明性:数据源异构程度越大透明性的要求就越高.透明性主要包括:平台透明性,数据源透明性和语义透明性;
3>自制性:每个局部数据库具有对自身完全的控制能力,同时能够决定是否提供和提供多少它的功能和资源服务于其它成员系统.
本文针对上面三方面难题提出了一种基于WEB服务的异构数据库集成中间件解决方案.
2 相关技术简介
2.1 WEB服务
WEB服务(WEB SERVICE)是由W3C(WORLD WIDE WEB CONSORTIUM)组织发起和定义的,目前比较流行的定义为:WEB服务是一个可以用URI来标志的软件系统,它采用
XML格式的信息来定义和描述对外的公共接口和绑定.WEB服务可被其它软件系统发现,并通过使用基于XML的消息借助
IntelNet协议,依照WEB服务中定义描述的方式实现交互.
WEB服务具备以下特性:
1>完好的封装性:对外部使用者而言,他能且仅能看到该WEB服务对象提供的功能列表.
2>松散耦合:WEB服务内部实现的任何变更对外部调用者来说都是透明的.
3>使用协议的规范性
4>高度可集成能力:WEB服务完全屏蔽了不同软件平台的差异,各个平台都可以通过标准协议进行互操作.
2.2 XML技术
XML 是由SGML (Standard Generalized Markup ,标准化通用标记语言) 发展而来,它以一种开放的自我描述方式定义数据结构,在描述数据内容的同时能突出对结构的描述,从而体现出数据之间的关系.XML 的主要特点如下:
1> 可扩展性:组织、个人可建立适合自己需要的置标集合根据需求参数化和语义化相应的数据。
2> 结构性:数据存储格式不受显示格式的制约。
3> 平台独立性:XML 文档是纯文本,独立于平台和应用。
3 集成中间件方案
中间件的以WEB服务的方式对外提供交互,WEB应用客户端和其它应用程序客户端从不同的平台,不同的软件开发环境调用该中间件的WEB服务接口,从而获得来自不同数据源的数据,实现数据的透明访问.下面结合中间件的框架图详细说明其中的核心模块.
3.1 核心模块描述
3.1.1中间件配置模块
1>配置当前中间件和异构数据库的连接信息:包括数据库地址,登陆用户名,密码,数据库名.完成此项配置后当前中间件能够使用本地子查询模块获得经过配置数据库中的数据.
2>配置当前中间件和其它中间件的连接信息:包括连接其它中间件的用户名,密码.完成此项配置可以使中间件实现互连,构成数据共享网络.
3.1.2查询路由模块
路由模块分析用户提交的查询语句从中找出该查询需要路由的中间件,然后到本地中间件配置信息中查找其它中间件的路由信息,即连接信息,把子查询发送到对应的中间件,完成路由.
3.1.3本地子查询执行模块/查询结果重组模块
本地子查询执行模块将利用OLE DB技术实现.传统的数据库集成处理方式都需要针对不同的数据库实现相应的包装器,完成查询操作.本地子查询模块根据不同的数据库类型, 加载对应的OLE DB
PROVIDER,实现对多个不同数据库的查询操作.
查询结果重组模块收集本地子查询和非本地子查询的结果,这些结果以DataSet的形式存在的,然后合并为一个大的DataSet作为最终的结果.在返回结果给客户端时根据DataSet生成一个结果XML文件给客户端,完成整个查询流程.
3.1.4安全控制模块
中间件配置后加入到由其它中间件构成的数据共享网络,通过安全控制模快配置中间件在数据共享网络中共享自身的哪些数据信息,及数据共享到怎样的程度,网络中哪些中间件能够访问自身等等.
3.1.5查询分解模块
为实现查询的高效分解,我们为中间件定义了新的查询语法,如下:
1> 用关键字DEFINE,以数据表为单位定义查询源数据单元,并以[]作为数据单元的分割符.
例:DEFINE [server1.db1.table1=a] [server2.db2.table2=b]
解释:中间件server1上的数据库db1中的数据表table1为变量a
中间件server2上的数据库db2中的数据表table2为变量b
2> 用关键字SELECT指点结果集单元,以[]作为单元分割符.
例:SELECT[a.*][b.id].
3> 用关键字FROM指定结果集来自的数据单元, 并以[]作为数据单元的分割符.
例:FROM [a][b]
4> 用关键字WHERE AND OR 指定查询条件, 并以[]作为条件单元的分割符.
例:WHERE [a.id=b.id]AND[a.age>b.age]
5> 用关键字ADDITION指定数据单元使用的属性/数据库函数/存储过程, 并以[]作为单元分割符.
例:ADDITION [a.id=GROUP BY][b.age=ORDER BY DESC][a.age=DISTINCT]
[a.age=MAX]
含义:查询过程中以a.id进行分组;以b.age进行降序排列结果;结果中a.age唯一对a.age求和 等等.
用户提交查询请求后,查询分解模块依照上面的规则对查询请求的有效性,语法检查.
检查成功则开始分解.查询分解按照以下原则进行:
1> 独立查询分裂:以所需连接中间件为单位,将查询分解为一组子查询,每一组子查询都对应一个单独的数据源.
2> 依照相关性进行多库查询分裂:两个中间件数据需要进行匹配的查询首先分解为对其中单一中间件的独立子查询,取出该独立子查询的结果数据生成匹配另一个中间件数据的子查询,从而实现两个中间件所连接数据需要匹配的查询操作.
分解实例:
DEFINE[server1.db1.table1=a][server2.db2.table2=b][server3.db3.table3=c]
SELECT [a.*][b.*]
FROM[a][b]
WHERE[a.begintime>'2004-9-8'][a.id>c.id][a.id=b.id] ADDITION[a.di=DISTINCT]
依据分解原则分解过程如下:
1>分解出独立子查询,并记为新的查询单元变量
DEFINE[ SELECT[a.*]FROM[a]WHERE[a.begintime>'2004-9-8']
ADDITION[a.di=DISTINCT] = d ]
2>在独立子查询的基础上进行多库查询分裂,每次查询记为新的查询单元变量
DEFINE[ SELECT[d.*]FROM[d]WHERE[d.id>c.id] = e]
DEFINE[ SELECT[e.*][b.*]FROM[e][b]WHERE[e.id=b.id] = f]
查询结束,f记录查询结果.
3.2应用描述
国内各航空公司都研发自身的航空信息系统,利用基于WEB服务的异构数据库集成中间件综合各大航空公司的数据信息为用户提供查询服务.描述如下:
1>首航,东航,南航,川航分别安装集成中间件,进行本地配置,分别连接到自身的航空信息数据库,同时配置和其它集成中间件的连接,从而构成一个航空信息共享网络.
2>客户透过其中任意一个中间件提供的WEB服务接口,提交查询,查询经过分解,路由到网络上的其它中间件,执行,最终返回结果给客户端.
查询实例:用户查询2004-9-7从四川和海南发往北京的航班,且到达时间从四川出发的航班比从海南出发的航班早
约定用户提交的查询如下:
Define [server1.db1.info=a][server2.db2.infomation=b]
Select [a.*][b.*] from [a][b]
Where [a.destination=北京] And [a.begintime=2004-9-7]
And [b.destination=北京] And [b.begintime=2004-9-7]
And [a.endtime
说明:server1.db1.info=a 川航中间件所连接的数据
server2.db2.infomation=b南航中间件所连接的数据
该查询被分解为
1> Define [ Select a.* from [server1.db1.info=a]
Where [a.destination=北京] And [a.begintime=2004-9-7]
=c]
2> Define [ Select b.* from [server2.db2.info=b]
Where [b.destination=北京] And [b.begintime=2004-9-7]
=d]
3> 取1中的数据和2中的数据进行匹配子查询
Select [c.*][d.*] from[c][d] where [c.endtime
由中间件构成了数据共享网络具有极高的灵活性,其它航空公司只需安装集成中间件,配置和共享网络的连接就可以很方便的扩充数据共享网络.
4 结束语
数据的集成对于实现EAI,进行企业内部整合具有极其重要的意义,本文提出了一种基于WEB服务的异构数据库集成中间件解决方案.该中间件解决方案具有一定的可行性,和实用性,能够胜任异构数据库的集成工作.