这几天由于工作的原因对以前开发的系统进行了测试这个系统主要作用就是传输数据将一个数据库的数据搬到另外一个数据库中期间可能需要通过Internet而目标的接收者也不一定再线的这么一个咚咚
测试了两种数据库分别对其进行数据转入转出处理常被人说你写的程序效率低不可用其实不然这次测试发现原来配置非常重要:
) 编码
由于程序使用Java写的又要兼容各个不同的数据库因而需要对字符串型的数据进行编码转换
String str = new String(rsgetString(i)getByte(databaseEncoding));
当数据量小的时候察觉不出来当数据量大时就发现这个消耗有些惊人
if(databaseEncodingequals(fileEncoding)){
return new String(rsgetString(i)getByte(databaseEncoding));
}
经过更改后当fileEncoding和databaseEncoding时数据处理效率提高倍以上
)硬盘
在做测试时当数据库与应用在同一台机器上时发现硬盘灯从来就没有熄灭过移开应用程序到另外一台机重现测试发现性能至少提高%这和我以前的经验相反经过分析发现原来我使用的是笔记本硬盘只有rpm当数据量大时硬盘根本应付不过来分开应用后JDBC写入数据的网络通信开销要小于硬盘资源争夺的开销速度当然提上去了
看来不同环境下同一应用做测试结论不一定都相同
)综合损耗
做测试时发现系统最优性能既不是数据较小时也不是数据最大时而是在一个中间值分析发现程序运行有一些综合损耗这些综合损耗不论你数据大或小都客观存在如取数据连接格式校验等当数据量小时这些损耗占的时间比重就多而当数据量大时虽然这些综合损耗占的比重少但是数据量大占的动态损耗就多了只有在中间某一个值时两种损耗都不是特别显现时系统运行的效率达到了最高值