分享
 
 
 

高性能Java设计与开发

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

——JDBC 篇(一)

驱动程序的选择

在企业级的java应用中,访问数据库是一个必备的环节。数据库作为数据资源的集散地,往往位于企业级软件体系的后方,供前方的应用程序访问。在Java技术的体系中,应用程序是通过JDBC(Java Database Connectivity)接口来访问数据库的,JDBC支持"建立连接、SQL语句查询、处理结果"等基本功能。在应用JDBC接口访问数据库的过程中,只要根据规范来操作,这些功能的实现不会出差错。但是,有些时候进行数据查询的效率着实让开发人员懊恼不已,明明根据规范编写的程序,却得不到预期的运行效果,造成了整个软件的执行效率不高。

访问数据库的性能主要有两个因素决定。一是数据库服务器本身的性能,如数据库治理系统、数据库结构的设计;其二就是与数据库相对独立的JDBC应用编程接口(API)的使用也很大程度上影响着JDBC程序的性能。前一点不属于我们讨论的范围,我们不做具体论述。

JDBC数据库访问机制:

图一

图二

· 图一左边的分支称为Type 1驱动模式,即通常由Sun公司提供的JDBC-ODBC桥,加上一个ODBC驱动,它提供了经由一种或多种ODBC驱动进行访问的JDBC接口。通常的DBMS都支持微软提出的ODBC规范,因此该模式可以普遍使用,非常灵活,具有很好的代码移植性。 但该模式不适用于high-transaction环境,也没有好的支持,并且功能有限。因为每次调用都要转换成ODBC调用,所以这种模式与其他模式相比性能最差。因而Type 1仅适用于下载和自动安装Java程序不重要、实验用途或者没有其它JDBC驱动可用的情况下,绝不推荐用于生产。

· 图一右边的分支成为Type 2驱动模式,类似于JDBC-ODBC桥接器,需要加载到客户机,却是一个部分用Java实现的驱动接口。使用本地API,它将JDBC调用转换为对数据库(Oracle、Sybase、Informix、DB2等)客户端接口的调用。

· 图二左边的分支称为Type 4驱动模式,它一般是数据库厂商才能实现的纯Java的基于本地协议的驱动,直接调用DBMS(数据库治理系统)使用的网络协议,对于企业内部互联网来说,是一个实用的解决方案。

· 图二右边的分支称为Type 3驱动模式,它同样是一个纯Java驱动,不同于Type 4驱动模式的是基于网络协议。它的机制是将JDBC调用转换为中间网络协议,然后转换为DBMS协议。中间网络协议层起到一个读取数据库的中间件的作用,能够连接许多类型的数据库,因而是最灵活的JDBC模式。

了解了现有的JDBC驱动类型以后,我们做一下综合分析:

Type1驱动支持多种数据库访问,理论上利用客户机本地代码库,可以加速数据访问的执行,但因为要做JDBC——ODBC转换,相应的开销绝对大于前者产生的性能提高,因此不可能有好的性能支持。由于多种原因,该类驱动得不到服务商的好的支持,使其无论性能还是功能都相对差劲,事实上该类驱动基本上得不到使用。

Type2驱动类似于Type1,利用了客户机本地代码,虽然不需要将数据库请求转换成ODBC调用,但有二进制代码客户端装载开销,不太可能有好的性能。另外,虽然其上层用Java实现,但因为与下层本地代码邦定紧密,无论是跨平台应用还是多数据库支持都很限制。因此不推荐该类型驱动。

Type3驱动是纯Java驱动,一般由应用服务器提供商集成到应用服务器中,为三层结构,能连接许多类型的数据库,非常灵活。看似中间多了一个环节,但应用服务器提供这种驱动程序的同时也提供了很多优化的功能,它们一般还会配套的提供连接池、数据缓冲区、负载均衡等,所以性能并不差。

Type4驱动也是纯Java驱动,但其直接访问数据库。一般说来,商业DBMS的提供者往往会为自己的数据库提供Type4的JDBC接口。这种模式的优势在于和数据库本身结合比较紧密,而且是纯Java的实现,在企业级的软件应用中,应该是首选。另外,第三方也给于大力支持。例如,对于Oracle数据库来说,有Oracle、SilverStream、DataDirect等公司提供这种类型的驱动,其性能往往被评价为最高效的、最可靠的驱动程序。但偶然也有比较麻烦的情况,例如微软就不会提供MS SQL的JDBC接口(至少目前笔者了解的情况是这样),这时就需要到Sun的网站(http://industry.java.sun.com/PRodUCts/jdbc/drivers)查找相关的模式4驱动,上面提到的DataDirect公司(http://www.datadirect-technologies.com/jdbc/jdbc.asp)就提供了支持MS SQL的Type4驱动,只是你需要支付$购买这个JDBC驱动。

Type3和Type4第三方驱动可能会提供比数据库商的驱动更好的性能, 并且能更好的执行,究其原因也是显而易见的,驱动商聚精会神于驱动,数据库商有更多其他的事情要考虑。

同样是纯Java实现的Type3,与Type4相比,优势在于对多种数据库的支持,体现了其灵活性。在大型的企业级的软件应用中,后台数据库往往不是一个,而且是由不同的厂商支持的。不过,Type3的JDBC驱动往往提供许多企业级的特征,例如SSL安全、支持分布式事务处理和集中治理等,因而会对你非凡的用途有很大的帮助。至于其性能,二者相当。如何选择,就看你应用的需要了。

综上所述,假如可能,Type1绝不要用,Type3和Type4由于众多厂商的支持,有连接池、数据缓冲等技术的使用,性能比Type2和Type1都要好,又都是纯Java的实现,属于首选。

另外普遍反映,对于Oracle数据库,尽管Oracle说OCI驱动为最佳的客户端访问驱动,但事实上Thin驱动程序可以获得更好的性能。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有