87497318 2008-07-01
一、问题分析
公司目前维护的一个系统,已经有超过8年的历史。现在遇到严重的性能问题,尤其是查询方面。系统简单介绍如下:
1.架构:客户端(windows程序)+服务端(J2EE,EJB,WebService)+数据库(oracle);
2.技术特点:
客户端和服务端通过WebService进行数据传输;
服务端为传统的EJB;
服务端数据采用自行开发的DataSet进行封装,以XML格式返回给客户端;
无DAO对象与领域对象;
无数据缓存机制;
数据库设计严重违背第三范式。
查询经常要从好几个表取数,而且需要将表数据经过复杂的转换(如行列转换)才能得到目标结果,数据量较大,超过5万行。由此产生严重的性能问题,特别是并发访问的情况下。
二、数据库和应用程序服务器的比较
下面列出了本人所了解到的二者分别可以采用的优化方法:
1.数据库
使用存储过程实现查询逻辑,以减少网络交互;
升级数据库服务器硬件。
2.应用程序服务器
使用缓存;
使用分布式、集群应用服务器;
升级应用程序服务器硬件
三、结论
如果系统是按照OO的方式设计,则应用程序服务器上的优化方法自然为首选。但系统没有领域对象,没有DAO对象,全部都采用直接生成SQL语句到数据库取数的方式,数据都用DataSet来封装处理。而DataSet由于实现方式的限制,最多只能包含1万行记录,否则1G的内存就会溢出。而由于使用存储过程实现可以解决减少网络交互、实现分批取数等问题,似乎是最佳的解决方案。
欢迎大家讨论。