一个现有EJB系统的性能优化方案

08-07-02 wczwcg
              

一、问题分析
公司目前维护的一个系统,已经有超过8年的历史。现在遇到严重的性能问题,尤其是查询方面。系统简单介绍如下:
1. 架构:客户端(windows程序)+服务端(J2EE,EJB,Web Service)+数据库(oracle);
2. 技术特点:
客户端和服务端通过Web Service进行数据传输;
服务端为传统的EJB;
服务端数据采用自行开发的DataSet进行封装,以XML格式返回给客户端;
无DAO对象与领域对象;
无数据缓存机制;
数据库设计严重违背第三范式。

查询经常要从好几个表取数,而且需要将表数据经过复杂的转换(如行列转换)才能得到目标结果,数据量较大,超过5万行。由此产生严重的性能问题,特别是并发访问的情况下。

二、数据库和应用程序服务器的比较
下面列出了本人所了解到的二者分别可以采用的优化方法:
1.数据库
使用存储过程实现查询逻辑,以减少网络交互;
升级数据库服务器硬件。

2.应用程序服务器
使用缓存;
使用分布式、集群应用服务器;
升级应用程序服务器硬件

三、结论
如果系统是按照OO的方式设计,则应用程序服务器上的优化方法自然为首选。但系统没有领域对象,没有DAO对象,全部都采用直接生成SQL语句到数据库取数的方式,数据都用DataSet来封装处理。而DataSet由于实现方式的限制,最多只能包含1万行记录,否则1G的内存就会溢出。而由于使用存储过程实现可以解决减少网络交互、实现分批取数等问题,似乎是最佳的解决方案。

欢迎大家讨论。

              

banq
2008-07-02 18:55

>由于使用存储过程实现可以解决减少网络交互、实现分批取数等问题,似乎是最佳的解决方案
因为原来实际就是一个DB系统,所以只能从DB方面解决了,是目前最佳方案,尽管你用了很多很炫的技术武装了,骨子里还是DB。