IBM联邦技术的主要特征:透明性、异构性、高级功能、底层联邦数据源的自治、可扩展性、开放性和优化的性能。
IBM 的联邦技术是如何工作的
图 1显示了 IBM 联邦数据库的体系结构。应用程序可以使用任何受支持的接口(包括 ODBC、JDBC 或 Web 服务客户机)与联邦服务器交互。联邦服务器通过称为包装器的软件模块与数据源进行通信。
配置好联邦系统之后,应用程序可以向联邦服务器提交用 SQL 编写的查询。联邦服务器优化该查询,产生一个执行方案,其中这条查询被分解为可以在各个数据源上执行的片段。正如上面所提到的,对这条查询可能存在多种分解,优化器根据最少资源总耗估计值从多种可能中做出选择。一旦选定一个方案,联邦数据库就开始执行,调用包装器来执行分配给它们的片段。为了执行某个代码段,包装器会执行任何所需的数据源操作,这些操作也许是一系列函数调用,或者是提交给数据源用其本机查询语句执行的查询。生成的数据流被返回给联邦服务器,由联邦服务器来组合它们,执行任何其它的由数据源无法完成的处理,然后将最终结果返回给应用程序。
IBM 联邦查询处理方法的核心是,联邦服务器的优化器和包装器一起为执行某个查询而形成方案所采用的方式 [4]。优化器负责研究这些可能的查询方案的空间。在连接枚举中,动态编程是缺省方法,优化器首先生成单表访问的方案,然后生成双向连接等。在每一级别,优化器都会考虑各种连接顺序和连接方法,如果所有表都位于一个公共的数据源,则它认为执行这个连接可以在数据源中进行,也可以在联邦服务器上进行。 图 2 显示了这一过程。
图 2. 用于连接的查询方案
优化器的工作方式因使用关系和非关系包装器而有所不同。优化器详细地对关系数据源建模,建模所使用的信息由包装器提供,这些信息是用来生成执行计划,而这些计划表示优化器期望数据源如何执行。
然而,由于非关系数据源确实没有公共的操作集或公共的数据模型,因此对于这些数据源需要更灵活的安排。因而优化器这样使用非关系包装器:
1. 如果称为“请求”的候选查询段适用于单个数据源,则 IBM 联邦数据库向包装器提交该查询段。
2. 在非关系包装器接收到一个请求之后,它确定相应的查询段中哪部分(如果有的话)可以由数据源执行。
3. 包装器返回一个应答,其中描述了查询段已接受的部分。应答还包括对将要产生的行数的估计、对整个执行时间的估计以及包装器方案:包装器将需要知道所有内容的封装表示,才能执行查询段已接受的部分。
4. 联邦数据库优化器将这个应答合并到全局方案中,同时引入其它必要的运算符以弥补包装器不能接受的查询段部分。使用应答中的成本和基数信息来估计这个方案的总成本,从所有候选方案中选出总成本最低的方案。在选定方案之后,不需要立即执行该方案;可以将它存储在数据库目录中,在以后执行该查询时,一次或多次使用该方案。即使立即使用该方案,也不需要在创建该方案的同一过程中执行它,如 图 3所示。
图 3. 非关系数据源的编译和运行时
配置联邦系统
通过安装联邦引擎,然后配置它以与数据源通信,从而创建联邦系统。步骤具体如下:
l 必须安装用于数据源的包装器,
l 必须告诉IBM的联邦数据库在何处可找到包装器。通过CREATE WRAPPER 。
l 必须向系统标识每个单独的数据源。通过CREATE SERVER语句 。
l 根据联邦中间件的数据模型来描述位于远程数据源中的数据。由于这里所描述的联邦数据库支持对象关系数据模型,因此必须向联邦引擎描述来自外部数据源的每个数据集,并将其描述为具有相应类型列的表。建模为表的外部数据集称为别名(nickname),应用程序向联邦体提交的SQL中会用到这个表名和列名。通过CREATE NICKNAME语句来定义别名。
CREATE WRAPPER web_wrapper //定义wrapper
LIBRARY "/u/haas/wrappers/libweb.a" //定义wrapper位置
CREATE SERVER weather_server //定义数据源
WRAPPER web_wrapper OPTIONS (URL 'www.****.com') //定义web_wrapper相关联的服务器
CREATE NICKNAME weather //建立外部数据源的描述
(zone integer, climate varchar(10), yearly_rainfall float)
SERVER weather_server OPTIONS (QUERY_METHOD 'GET')
SELECT c.Name, c.Address
FROM customers c, stores s, weather w
WHERE temp_forecast(w.zone, :DATE) >= 85 ANDc.ShopsAt = s.id and s.location = w.zone
CREATE FUNCTION temp_forecast (integer, date) RETURNS float AS TEMPLATE
DETERMINISTIC NO EXTERNAL ACTION //CREATE FUNCTION语句告诉联邦数据库可以在SELECT语句中使用该函数
//AS TEMPLATE子句告诉联邦数据库这个函数没有本地实现。
CREATE FUNCTION MAPPING tf1 for temp_forecast SERVER weather_server
//CREATE FUNCTION MAPPING语句告诉联邦数据库哪个服务器可以对这个函数求值。
上面这些DDL语句会产生元数据,这个元数据描述了有关映射函数的别名和特征符的信息。联邦查询处理引擎要使用这个元数据,这个元数据存储在联邦数据库的全局目录中。