跨多个数据源的J2EE开发: 细节探讨 - 编程入门网
-
// select for query #3
query3[1]= "SELECT SUM(o_totalprice) AS total_ordered, COUNT(*) AS
num_orders, c_custkey, c_name " +
"FROM tpcd.customer, tpcd.orders " +
"WHERE o_custkey = c_custkey " +
"AND o_orderdate >= ? " +
"AND o_orderdate < ? " +
"GROUP BY c_custkey, c_name";
// ------------------------ Oracle remote -------------------------
// select for query #3
query3[2]= "SELECT c_custkey, c_name, SUM(o_totalprice) AS total_ordered,
COUNT(*) AS num_orders " +
"FROM customer, orders " +
"WHERE o_custkey = c_custkey " +
"AND o_orderdate >= ? " +
"AND o_orderdate < ? " +
"GROUP BY c_custkey, c_name";
// ------------------------ Excel local ---------------------------
// select for query #3
query3[3]= "SELECT c_custkey, c_name, SUM(o_totalprice) AS total_ordered,
COUNT(*) AS num_orders " +
"FROM [customer$], [orders$] " +
"WHERE o_custkey = c_custkey " +
"AND o_orderdate >= ? " +
"AND o_orderdate < ? " +
"GROUP BY c_custkey, c_name ";
// insert statement for intermediate data for query #3
temp_insert[3]= "INSERT INTO temp_query3(c_custkey, c_name, total_ordered,
num_orders) " +
"VALUES(?, ?, ?, ?)";
// final statement for query #3
temp_select[3]= "SELECT c_custkey, c_name, SUM(total_ordered) AS
total_ordered, SUM(num_orders) AS num_orders " +
"FROM temp_query3 " +
"GROUP BY c_custkey, c_name " +
"ORDER BY total_ordered DESC " +
"FETCH FIRST 10 ROWS ONLY";
// delete statements for temporary tables
temp_delete[3] = "DELETE FROM temp_query3";
跨多个数据源的J2EE开发: 细节探讨(9)时间:2011-04-11 IBM C. M. Saracco查询 4 和 5 与前三个查询在某些重要的方面是不同的。前三个查询只对三个数据源的 数据的昵称的 UNION ALL 视图进行操作。查询 4 执行跨地点连接;也就是说,它处理由 远程 DB2 UDB 系统管理的某些数据和远程 Oracle 系统管理的某些数据。它不使用 UNION ALL 视图。查询 5 使用了这样的一个视图,但是将该视图和特定于某个数据源的数据相连 接。这些查询的性质迫使我们修改我们的 servlet 逻辑。 我们将查询 4 分成两段:一段包含特定于远程 DB2 服务器的所有搜索谓词,另外一段 包含特定于远程 Oracle 服务器的所有搜索谓词。我们为每段构造 SELECT 语句,对远程 DB2 UDB 和 Oracle 数据库执行这些语句,并将结果插入我们本地 DB2 系统的辅助表。然 后我们发出最后的 SELECT 语句,该语句连接需要满足我们原始查询的辅助表。 如果您做过很多的 DBMS 应用程序编程工作,那么您知道这是我们能编写 servlet 逻 辑的唯一方法。我们考虑过其它可选的方法,例如在我们的 servlet 中编写等效的嵌套循 环,但是我们不信这里面有全胜的赢家。如果我们预先知道 DB2 UDB 或 Oracle 查询都将 返回一个很小的结果集,那么我们可以推断,如果我们使用这些结果进一步限制其它数据 源返回满足条件的行的数目,那么将改善性能。 但是我们无法知道这些。我们无法访问全局统计信息,而且我们不能假定 J2EE 开发者 熟 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |