简介
也许,当今企业信息管理的最大挑战就是数据源的多重性、异构性和地理位置上的分散性。有很多因素可以导致公司中的这种数据复杂性 —— 例如,将具有不同 IT 基础设施的组织组合起来的合并和收购,从本地公司到跨国公司的业务增长,不同时期采用的不同的用于构建信息系统的不同技术,等等。不管这个问题有多么困难,同步和管理不同数据源仍是使企业保持竞争力的关键需求。
通过无缝地将多个数据源放入到一个联邦系统,IBM WebSphere Information Integrator 提供了取得以下目标的能力:
透明性: 就像数据处于同一个数据库中一样来编写和使用应用程序。
异构性: 容纳企业中不同的数据需求和数据源。
自治性: 不对远程数据源施加限制,允许远程数据源自治。
高功能性: 应用程序不仅可以利用联邦系统提供的高功能性(请参阅 参考资料 了解更多信息),而且还可以利用一些数据源独有的特殊功能。
可扩展性和开放性: 能够无缝地添加新数据源到企业信息系统中。
优化的性能: 为联邦系统开发的应用程序可以取得强大的性能,并且不需要实施特殊的策略来计算查询。
WebSphere Information Integrator 基于 IBM DB2® Universal Database™ for Linux、UNIX®, and Windows®,它在已经可用的数据联邦技术中添加了很多新的特性。DB2 Universal Database 为访问和组合来自不同关系数据源的信息提供了强大的工具(参阅 参考资料)。DB2 Universal Database 中特有的数据联邦功能建立在来自 IBM DB2 DataJoiner® 的最优供给(best-of-breed)技术的基础上,并增加了 IBM 的 Garlic 研究项目中用于可扩展性和性能的高级特性(要了解关于 DataJoiner 或 Garlic 的更多信息,请参阅 参考资料)。
本文是一个系列中的第一篇文章,这个系列将展示如何使用 WebSphere Information Integrator 中的技术。对于那些拥有 SQL 方面的基础以及正在使用和管理诸如 DB2 之类关系数据库的读者,本文提供了关于建立和配置 WebSphere Information Integrator 联邦数据库系统的全面指南。第二篇文章将着重于用法示例和性能调优。
一个电子商务场景
图 1 描述了一个电子商务场景,在这个场景中,客户在线提交订单。这些 XML 文档格式的订单被路由到全局仓库,而客户信息则是维护在一个名为 CUSTOMERS 的本地数据库表中。
图 1. 客户下订单场景
通过使用 WebSphere Information Integrator 中的联邦技术,全局仓库被连接到位于美国和加拿大的两个地区仓库。在每个仓库中,关于商品和供应商的信息存储在表 ITEMS 和 SUPPLIERS 中。此外,对应于每种商品的商品 ID 和供应商 ID 存储在表 ITEM_SUPPLIED 中。美国仓库基于 DB2 for z/OS 和 OS/390 系统,而加拿大仓库在一个 Oracle 系统中。另一个名为 Credit Checking 服务器的 Oracle 实例跟踪具有不良信用历史的客户,这个实例可以从联邦系统中访问到。
设计联邦系统
WebSphere Information Integrator 联邦系统的核心由一个 DB2 实例组成,该实例用作联邦服务器。其他组成部分包括一个充当联邦数据库的数据库,一个或多个数据源,以及访问数据库和数据源的客户机(用户和应用程序)。有了联邦系统,便可以使用一条 SQL 语句将分布式请求发送到多个数据源。在联邦系统上注册远程数据集之后,可以像引用本地表那样引用这些数据集。应用程序通过一个受支持的编程接口与联邦服务器通信。由于联邦系统包括一个 DB2 数据库,所以还可以将本地数据存储在这个数据库中,也可以存储来自本地表和远程表的组合信息。
对于电子商务的例子,下面的 图 2 描述了将被查询的现有表的列定义。
图 2 展示了 图 1 中引用的表的实体关系图。表 ITEMS 和 SUPPLIERS 分别在列 item_id 和 suppl_id 上定义了检查约束。这些约束规定了数据的范围。
图 2. 表的实体关系图
现在可以建立联邦系统,以便注册这些远程表。全文提供了示例 DDL (数据定义语言)语句。要获得详细的用法描述,请参阅 IBM DB2 Information Integrator Data Source Configuration Guide,以及 DB2 UDB SQL Reference 的卷 1 和卷 2(见 参考资料)。另一种注册方法是使用增强的 DB2 Control Center 图形界面注册远程对象。Control Center 提供了远程对象发现功能,它能够自动发现可以被包括在联邦中的数据源和对象。
配置联邦系统
首先通过安装联邦引擎来创建一个联邦系统,然后配置该联邦系统,以便与数据源通信。有四种基本的联邦对象:
联邦服务器通过名为 包装器(wrappers) 的软件模块与数据源通信。
每个数据源必须被系统识别为服务器(server)。
如果数据源要求认证,那么可以在联邦系统中将远程认证信息注册为用户映射(user mapping)。
将要访问的远程数据集标识为 昵称(nicknames)。 现在便可以在应用程序中引用这个昵称,就像它是一个本地表一样。
接下来的几个小节逐个研究这些联邦对象。
包装器
包装器模块提供用于方便以下事情的逻辑:
联邦对象注册: 包装器封装了来自联邦引擎的数据源特征。它知道为了注册各种类型的数据源需要什么样的信息。
与数据源通信: 通信包括建立和终止与数据源的连接,并且在可能的情况下在应用程序中各语句之间维护连接。
服务和操作: 每个包装器支持不同的操作,这取决于包装器要访问的数据源的能力。这些操作可以包括发送一条查询来获取结果,更新远程数据,支持事务,操纵大型对象,绑定输入值,等等。
数据建模: 包装器负责将远程查询结果的数据表示映射为联邦引擎所要求的表格式。
WebSphere Information Integrator 为不同类型的数据源提供了一组包装器。您可以使用该产品中包含的包装器开发工具箱来编写一个定制的包装器库,这样便可以访问现有包装器不支持的数据源。欲知 WebSphere Information Integrator 所支持的数据源的列表,请参阅 IBM DB2 Information Integrator Data Source Configuration Guide(见 参考资料)。
当使用包装器来访问数据时,如果包装器是以数据源的本地 API 实现的,那么通常可以获得最佳性能。例如,虽然 ODBC 包装器也可以提供那样的访问,您很可能会选择 NET8 包装器来访问 Oracle 数据源。
为了访问包装器支持的所有数据源,只需注册一个包装器。例如,如果您需要访问 XML 文件,那么需要注册一个 XML 包装器。
包装器模块可以在 DB2 引擎内执行,这被称为受信任(trusted)模式。如果在 DB2 引擎外的一个单独的进程中运行包装器模块,则称为隔离(fenced)模式。通常,如果联邦数据库不是分区的,受信任模式可以提供更好的性能。然而,包装器模块的健壮性可能直接影响 DB2 引擎。如果联邦服务器是一个分区数据库,那么隔离模式可以更好地利用并行。您可以通过将 DB2_FENCED 包装器选项设置成“Y”来指定是否以隔离模式执行包装器(该选项的默认设置是“N”,即受信任模式)。S. Harris 撰写的文章“Parallelism in WebSphere Information Integrator V8.2”(见 参考资料)对此进行了详细的讨论。
在在线购物的场景中,需要三个包装器:用于两个 Oracle 系统的一个 NET8 包装器,用于 DB2 for z/OS 和 OS/390 系统的一个 DRDA 包装器,以及用于从 XML 文档访问在线订单的一个 XML 包装器。为了将包装器注册到联邦系统,使用以下 SQL 语句:
CREATE WRAPPER net8;
CREATE WRAPPER drda;
CREATE WRAPPER xml_wrapper LIBRARY ?libdb2lsxml.a?;
图 3 展示了遵循这个步骤的联邦系统配置。三个包装器提供了对四种数据源的访问(包括包含 Web 订单的 XML 文件)。对于这里使用的包装器,需要一些客户机库。例如,对于 NET8 包装器需要 Oracle NET8 客户机软件。图 3 中没有显示这些客户机库。
图 3. 联邦系统
服务器
在将包装器库注册到联邦系统之后,将每个数据源注册为一个服务器。对于关系数据库管理系统,一个服务器通常代表一个远程数据库。如果数据源是一个远程 DB2 Universal Database 实例,那么可以将那个实例上的每个数据库注册为一个服务器。通过将每个数据库注册为一个服务器,可以使这些远程数据库上的数据能够从联邦系统访问到。
有些关系数据库管理系统不允许每个实例注册多个数据库。相反,每个实例代表一个服务器。例如,在 Oracle 系统上,每个实例服务器 ID(SID)代表一个服务器。
在我们的在线商店中,需要定义 4 个服务器。DB2 for z/OS 和 OS/390 源可能需要编目附加的节点和数据库条目。使用下面的命令完成这一任务:
CATALOG TCPIP NODE mvsnode REMOTE hostname SERVER servicename;
CATALOG DB mvsdb2 AS mvsdb2 AT NODE mvsnode AUTHENTICATION SERVER;
CREATE