使用特定的包在Java中高效处理日志记录

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

这几天,由于工作的原因对以前开发的系统进行了测试。这个系统主要作用就是传输数据,将一个数据库的数据搬到另外一个数据库中,期间可能需要通过Internet,而目标的接收者也不一定再线的这么一个咚咚。

测试了两种数据库,分别对其进行数据转入转出处理。常被人说你写的程序效率低,不可用。其实不然,这次测试发现原来配置非常重要:

1) 编码

由于程序使用Java写的,又要兼容各个不同的数据库,因而需要对字符串型的数据进行编码转换。

String str = new String(rs.getString(i).getByte(databaseEncoding));

当数据量小的时候,察觉不出来,当数据量大时就发现这个消耗有些惊人。

if(databaseEncoding.equals(fileEncoding)){

return new String(rs.getString(i).getByte(databaseEncoding));

}

经过更改后,当fileEncoding和databaseEncoding时,数据处理效率提高5倍以上。

2)硬盘

在做测试时,当数据库与应用在同一台机器上时,发现硬盘灯从来就没有熄灭过。移开应用程序到另外一台机,重现测试,发现性能至少提高50%。这和我以前的经验相反。经过分析发现,原来我使用的是笔记本,硬盘只有4200rpm。当数据量大时,硬盘根本应付不过来。分开应用后,JDBC写入数据的网络通信开销要小于硬盘资源争夺的开销,速度当然提上去了。

看来不同环境下同一应用,做测试结论不一定都相同。

3)综合损耗

做测试时,发现系统最优性能既不是数据较小时,也不是数据最大时,而是在一个中间值。分析发现,程序运行有一些“综合损耗”,这些综合损耗不论你数据大或小都客观存在,如取数据连接、格式校验等。当数据量小时,这些损耗占的时间比重就多,而当数据量大时,虽然这些综合损耗占的比重少,但是数据量大占的“动态损耗就多了”。只有在中间某一个值时,两种损耗都不是特别显现时,系统运行的效率达到了最高值。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航