DB2 J2EE开发成本收益分析(二) |
时间:2014-05-04 10:31:30 来源:JSP天空网 作者:未知 |
探究一下使用联合数据库管理系统技术开发需要整合来自不同数据源的servlet的优点和缺 点。实际上必须做的就是设计、编码并测试一系列的servlet,这些servlet需要在有联合数据库 管理系统或者没有的情况下执行相同的功能。
环境建立
构建几个servlet,使用下面的软件工作:
? WebSphere Studio, 包括一个WebSphere Application Server 5测试环境在内
? Oracle数据库管理系统和相关的客户软件
? DB2数据库管理系统和相关的客户软件
? Microsoft Excel电子表格
? Sun微系统JDBC/ODBC驱动程序(用于Java访问Excel)
? DB2 Information Integrator(早期发行版本)和相关的客户软件
图1图解了我们全部的软件体系结构。你可以看到,WebSphere Studio平台被配置来与DB2 Information Integrator一起工作,DB2 Information Integrator也已被配置来访问DB2 Universal Database ( UDB)、Oracle和Excel数据源。这个配置描述了本地数据访问环境。
screen.width-333)this.width=screen.width-333;"> 图1、用于工程的软件体系结构
应用程序方案
用于工作的业务方案包括了多个虚构的销售公司的兼并案例。假定新的统一公司需要开发它 的关键的业务数据的一个整合形式,这些数据以不同的格式保存在不同的系统上。此外,因为应 用程序应该比兼并先期开发并需要支持,所以把数据留在本地平台这很重要。 这个业务需要使得 一个好的案例能够反映支持需要跨这些不同的数据源的新应用程序的联合数据库管理系统技术的 价值。
数据
使用TPC-H数据的子集用于工作和分布在多个数据源上的数据,来模拟一种多个零件分销商组 成一个单一的公司的情况。在我们的实例中,这些数据源包含DB2 UDB和Oracle数据库管理系统, 以及Excel电子表格。指定的TPC-H表是PART、PARTSUPP、SUPPLIER、NATION、CUSTOMER、 ORDERS。对于不熟悉TPC-H数据库的读者,图二中给出这些表的结构以及它们彼此之间如何关 联。 要获取详细信息,请参阅 http://www.tpc.org .
screen.width-333)this.width=screen.width-333;">
图2我们用于我们工程的TPC-H数据库模式子集。星号("*")指主键。
分布数据以便跨不同的数据源使用众多的零件、供应商和客户数据。我们这么做的原因是不 同的分销商可能共享相同的客户、供应者和产品报价。比如说,虽然某个业务合作者可能从多于 一个的分销商处订购零件,但是公司不会把相同的定单发到每个分销商处。 这样,虽然一些 CUSTOMER信息在不同的数据源间是重复的,还是要指定用于这些客户的ORDERS为not。
注意,虽然我们使用TPC-H模式的一部分用于我们的工作,但是我们不尝试实现任何TPC标准 检查程序。我们选择实现我们认为能够反映我们工作的查询。在下一节我们将详细讨论这个问 题。 查询
要决定实现几个查询,其中一些和网络商务或者决策支持环境中执行的查询相似。我们所有 的查询都是基于前面提到的表工作的。最后,我们让我们的查询模拟两个典型的业务方案:在线 检索和业务分析。
第一类查询,查询1-3,支持在线目录检索。这些查询使一个用户或业务合伙人找到带有某些 特征的零件,然后找到最便宜的供货商。最后一个查询判断用户是否使指定时期的前10位客户, 因为这种情况他可能会获得免运费或者打折等优惠。
第二类查询,查询4-5,支持前面的兼并业务方案中的业务分析工作被保证。这些查询试图识 别两个或更多新合并公司的共同的客户,这些公司有某些有趣的共性--也许它们属于某个目标人 口分布,存在于高度竞争的地域等等。
下面是目标查询,包含了样本检索谓词。与servlet中的实际查询略有不同。比如,使用参数 标记,以便查询更加灵活,并且还要更进一步修改某些查询,特别是直接访问三个数据源中的每 一个。 你将有机会在后续的文章中看到最后几个查询。现在,重要的是要了解需要实现的查询的 特性。
在这里,在阅读查询的时候,你应该假定这些对象在FROM子句中引用,这个FROM子句使用所 有数据源中的数据,除非指定数据源。例如,我们使用"part"来指定合并后的公司的所有零件数 据,不管它可能保存在什么地方。我们使用"db2_customer"来表明客户数据在指定的某家公司的 数据库中(在这种情况下,一个公司使用DB2作为它的数据库管理系统)。
Query 1: 查找一个感兴趣的零件关键字:
select p_name, p_mfgr, p_type, p_partkey from part where p_type like ´´%BURNISHED%´´ andp_name like ´´%lavender%´´order by p_partkey fetch first 20 rows only;
Query 2: 在某个国家中(本例中是德国)搜索特定零件(本例中是28)最便宜的供应商:
select ps_partkey, s_name, s_suppkey, min(ps_supplycost) from partsupp, supplier, nation whereps_partkey = 28 andps_suppkey = s_suppkey ands_nationkey = n_nationkey andn_name = ´´GERMANY´´group by ps_partkey,s_name, s_suppkey;
Query 3: 答谢在某个特定时期大量订购的客户:
select sum(o_totalprice)as totalordered, count(*) as num_orders, c_custkey, c_namefrom customer, orders where o_custkey = c_custkey and O_ORDERDATE >= DATE (´´1997-10-01´´) and O_ORDERDATE < DATE(´´1998-10-01´´) group by c_custkey, c_name order by totalordered desc fetch first 10 rows only;
Query 4: 找出某个部门的指定的几个国家的客户,同时这些客户又从另一个部门大量的定 货。在本例中,客户和国家的信息存放在一个DB2数据库管理系统中,虽然它们从另一个部门的定 货信息可能存放在Oracle数据库中。
select c_custkey, c_name, o_totalprice, n_name from db2_customer, ora_orders, db2_nation wherec_nationkey = n_nationkey andc_custkey = o_custkey and o_totalprice > 450000 and n_name in (´´JAPAN´´, ´´CHINA´´, ´´VIETNAM´´, ´´INDIA´´);
Query 5: 在整个公司(合并后)中,查找某个部门的认证客户定单的平均代价。认证客户是 那些存在于指定国家(本例中为日本),属于某个市场区隔(HOUSEHOLD)并有很少的帐目余存的客 户。本例中,关于认证客户和国家的信息存放在一个DB2数据库管理系统中。
select avg(o_totalprice) as avg_order, c_name, c_custkey, c_acctbal from db2_customer, orders, db2_nation wherec_custkey = o_custkey andc_nationkey = n_nationkey andn_name = ´´JAPAN´´ and c_mktsegment = ´´HOUSEHOLD´´ and c_acctbal >= 0 and c_acctbal <= 1000 group by c_custkey, c_name, c_acctbal order by avg_order desc;
联合数据库对象
在定义了软件体系结构和应用程序对象之后,需要设计联合数据库。创建能够促进到的DB2 UDB、Oracle和Excel数据的透明的访问的对象。这些对象包括了用于每个数据源管理的TPC-H数 据的别名,并且基于这些别名的UNION ALL视图。 例如,为了支持查询1,我们在我们的DB2 Information Integrator服务器上定义了三个别名来表示我们的三个数据源中每一个数据源中存 放的PART数据。然后定义一个UNION ALL视图,包含这三个别名中的所有的数据栏。使用这种办 法,DB2、Oracle和Excel上的PART数据就可以作为保存在我们的联合数据库中的一个逻辑表被查 看。
严格来说,一个UNION ALL视图并不是对于我们的查询的每一个都是必需的;比如说,查询1 可以只使用一个UNION视图执行,而不会破坏我们工作的完整性。 实际上,我们原来打算使用一 个UNION视图编写查询1;如果你仔细看我们前面的例子,你会发现我们没有包含一个UNION视图不 必用到的DISTINCT子句。
最后我们还是决定在所有的工作中都使用UNION ALL视图。这能使我们保持一致的视图定义,用于查询所需的统一数据。 |
|
|
|