我们使用标准JDBC调用来构建我们的servlet,通过DB2 Information Integrator和本地客户端接口(无DB2 Information Integrator)访问数据。只要有可能,我们就使用DataSource连接(连接池),这样能够更有效的利用系统资源。更进一步,我们通过执行JNDI在每个servlet的init方法中查找DataSource,设法维护编码效率。
当我们通过DB2 Information Integrator访问远程数据的时候,我们的servlet发出针对别名或者跨多个别名的UNION ALL视图的查询。当直接访问远程数据的时候,我们的servlet发出针对每个数据源的查询。然后,我们必须确定如何整合返回的结果。
假如这听上去很含糊,那么让我们研究一个简单的例子。 想象我们需要构建一个servlet,不使用DB2 Information Integrator,报告一套零件的最低供给价格。 在与我们三个数据源中的每一个连接之后,我们的servlet将查询每一个数据源上PARTSUPP数据,来找到这些零件的最低供给价格。 (SQL语句可能看起来像Select MIN ( ps_supplycost) from PARTSUPP where ps_partkey IN ( list of ps_partkeys) group by ps_partkey。) servlet然后将把价格信息储存到一个本地临时表中,这个表两个列:ps_partkey和ps_supplycost。 最后,这个servlet可能发出一个针对本地表的查询,计算最小的ps_supplycost值,使用ps_partkey分组。
紧接着,是实现我们直接使用直接数据访问的servlet的基本程序逻辑。 当然,程序比仅仅编写一个简单的查询要更复杂,我们要编写当我们使用DB2 Information Integrator进行数据访问的时候,我们要做什么。但是到底有多复杂呢?请接着向下读。
现在,你可能对我们从我们的工作中了解到的东西感到好奇。 我们将在本文中总结我们的结论,然后在后续的文章中向你说明我们怎样得到这些结论。 但是归根到底还是那句话:我们发现,当我们使用DB2 Information Integrator的时候,构建servlet更为轻易。
因为我们的servlet是数据集中的,它们的代码大多数包括数据访问程序逻辑。 利用DB2 Information Integrator,我们的servlet连接到单一的基本数据服务器,发出单一查询,然后分布它们取得的资源集。 假如不使用DB2 Information Integrator,我们的servlet分别连接到每个数据源,每个数据源至少要发出一条查询,把从每个数据源中检索得到的数据放入至少一个本地临时辅助表中,付出用于辅助表的(最后)一个查询,清除辅助表的内容,发布它们取得的所有的本地的和远程的资源。
当然,这需要更多的编码要实现。 此外,假如没有DB2 Information Integrator,它会花费我们成倍的时间来实现我们的servlet,因其工作的复杂性。 并且这个复杂性的大部分是如何把每个查询都正确的分解为针对每种数据源。
我们构建需要整合来自多个数据源的数据的servlet。 一类使用DB2 Information Integrator,而另一类直接访问每个数据源。 我们的经验显示,当我们使用DB2 Information Integrator提供访问不同数据源的透明性的时候,设计、开发和维护工作明显减少。 在我们的例子中,我们减少了代码量达40%。 此外,我们不必进行试图确定如何有效地分配我们的查询到每个数据源,以最小化不必要的数据传送这个令人烦恼的、耗时的任务,同时仍然能够保持我们工作的完善性。 我们通过依靠DB2 Information Integrator固有的全局优化能力完成这个任务,它答应我们在保持性能的同时获得正确结果。(全文完)