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

一、问题分析

公司目前维护的一个系统,已经有超过8年的历史。现在遇到严重的性能问题,尤其是查询方面。系统简单介绍如下:

1.架构:客户端(windows程序)+服务端(J2EE,EJB,WebService)+数据库(oracle);

2.技术特点:

客户端和服务端通过WebService进行数据传输;

服务端为传统的EJB;

服务端数据采用自行开发的DataSet进行封装,以XML格式返回给客户端;

无DAO对象与领域对象;

无数据缓存机制;

数据库设计严重违背第三范式。

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

二、数据库和应用程序服务器的比较

下面列出了本人所了解到的二者分别可以采用的优化方法:

1.数据库

使用存储过程实现查询逻辑,以减少网络交互;

升级数据库服务器硬件。

2.应用程序服务器

使用缓存;

使用分布式、集群应用服务器;

升级应用程序服务器硬件

三、结论

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

欢迎大家讨论。

相关推荐