注册 | 登录 | 设为首页 | 加入收藏
您当前的位置:飞翔学院-IT中国 → 编程开发JSP → 文章内容

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

作者:佚名 来源:不详 发布时间:2007-11-29 23:54:53

  目前主流的企业应用大多数是基于以下的数据库开发的,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(毫秒)
更多内容请看PCdog.com--数据库相关文章专题

  • 打印文档
  • 推荐好友
  • 返回顶部
  • 增大字体
  • 减少字体
关于本站 | 工作机会 | 合作网站 | 广告服务 | 市场合作| 联系我们 | 抽奖活动
版权所有: 武汉威俊科技有限公司 Copyright 2005-2007 www.ITCNW.COM All rights reserved