JSP虚拟主机,jsp空间,java空间,java虚拟空间JSP虚拟主机,jsp空间,java空间,java虚拟空间

降低多数据库支持成本的技术



作者:    文章来源:
发布日期:2007年01月16日
目前主流的企业应用大多数是基于以下的数据库开发的,Microsoft SQL Server、IBM DB 2、Oracle、Sybase。作为软件开发商,其软件需要支持不同的数据库,但是公司缺乏精通 多种数据库的人才。就算有精通不同数据库的人才,开发不同的Data Access模块业导致工 作量增加,程序难以维护。

但是你到sourceforge.net上,你会发现其实很多项目的做法,是只用了非常非常有限的工作,只用了这些数据库之间的公共功能的子集。当然也有的项目为不同的数据库编写不同的DAL(数据库访问层)

我的一种解决方案是提供一套自定义的SQL文法,在开发应用程序的时候,翻译为不同的数据的SQL。

使用“递归下降”的文法分析技术,并且经过针对性的优化处理,效率极高,普通的SQL通常在0.1~0.2毫秒就能翻译完成。在使用的过程中,可以完全忽略其所占用的执行时间。

如果对此技术感兴趣,可以致信:c_sql@163.net ,索要试用版本和相关文档。

下面是例子:

例一

翻译如下的SQL语句:

select top 10 * from t where a>b order by a, b asc, c desc

测试结果是:

Oracle :

SELECT * FROM (SELECT * FROM t WHERE (a > b) ORDER BY a ASC, b ASC, c DESC) WH

ERE ROWNUM <= 10

翻译1000次共耗时 : 120 (毫秒), 平均每次0.12(毫秒)



MS SQL Server :

SELECT TOP 10 * FROM t WHERE (a > b) ORDER BY a ASC, b ASC, c DESC

翻译1000次共耗时 : 140 (毫秒), 平均每次0.14(毫秒)



DB2 :

SELECT * FROM t WHERE (a > b) ORDER BY a ASC, b ASC, c DESC FETCH FIRST 10 ROW

S ONLY

翻译1000次共耗时 : 130 (毫秒), 平均每次0.13(毫秒)



Sybase :

SELECT TOP 10 * FROM t WHERE (a > b) ORDER BY a ASC, b ASC, c DESC

翻译1000次共耗时 : 151 (毫秒), 平均每次0.151(毫秒)



例二

翻译如下的SQL语句



Oracle :

SELECT * FROM T1 A, T2 B WHERE A.FId = B.FId

翻译1000次共耗时 : 80 (毫秒), 平均每次0.08(毫秒)

select * from T1 A inner join T2 B on A.FId = B.Fid



MS SQL Server :

SELECT * FROM T1 A INNER JOIN T2 B ON A.FId = B.FId

翻译1000次共耗时 : 90 (毫秒), 平均每次0.09(毫秒)



DB2 :

SELECT * FROM T1 A INNER JOIN T2 B ON A.FId = B.FId

翻译1000次共耗时 : 90 (毫秒), 平均每次0.09(毫秒)



Sybase :

SELECT * FROM T1 A INNER JOIN T2 B ON A.FId = B.FId

翻译1000次共耗时 : 100 (毫秒), 平均每次0.1(毫秒)

Copyright © 2002-2012 JSPCN.net. All rights reserved.
JSP中文网    备案号:粤ICP备09171188号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号