`
wczwcg
  • 浏览: 7942 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多
一、问题分析
公司目前维护的一个系统,已经有超过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的内存就会溢出。而由于使用存储过程实现可以解决减少网络交互、实现分批取数等问题,似乎是最佳的解决方案。

欢迎大家讨论。
分享到:
评论
4 楼 movingboy 2008-07-03  
你提到查询过程性能问题严重,请问这种查询的结果是否还要做为业务处理的输入?还是只需要把结果给用户查看即可?
如果是后者,考虑一下Oracle的Data Guard的Logical Stand-by或Streams技术。例如使用数据库A进行业务处理,使用数据库B做查询,数据库A的数据使用Logical Stand-by或Streams技术同步/复制到数据库B。如果你们的查询条件是有规则的(比如通常按月查询而不是允许查询任意两天之间的数据),还可以考虑在数据库B把查询结果保存起来,下次查询就只需要读取已保存的结果即可
3 楼 wczwcg 2008-07-02  
Lucas Lee 写道
你的优化方法只是泛泛的方向,没有结合具体实际来考虑是否合适。
首先你得找到瓶颈。数据库执行SQL、转化XML、其它部分各占的时间百分比,然后针对大头部分优化。

我觉得你的使用存储过程的方法实现工作量、优化效果上均不会有很好的表现。
看起来你们没有将结果集分页?这个对性能影响是挺大的。
另外,你们的硬件似乎太老了点,8年没换过硬件吧?可以考虑一下--至少加个几G内存还可以吧。


实际上,我们尝试过2种使用SQL语句的方式。一种是把一部分数据的转换也用SQL实现;一种是只用SQL语句取出原始的数据,数据转换都在服务端进行。因为数据库设计得不合理,所以需要从多个表取数,且数据量较大,而基本上都需要将原始数据全部获取之后进行处理、转换,再考虑以分批的方式返回给客户端。这里面就有较大比重的网络传输时间。
我的考虑是:如果采用服务端的优化方式,因为不能用对象缓存,那么每次的查询都需要重新从数据库取数,性能就无法得到有效的提升。如果用存储过程,就没有了网络传输的开销,而且有些数据转换工作,比如行列转换,似乎通过SQL语句要快一些。但我始终认为,针对数据库的优化始终都是有限的,无法享受应用程序服务器的分布式处理。而且从代码的角度,存储过程的可读性、可扩展性、可维护性,相对Java代码来说都是较差的。

至于硬件,客户那里早就是使用比较高端的服务器了。通常都是2CPU,8G内存之类。
2 楼 feedss 2008-07-02  
升级硬件比动软件更划算
1 楼 LucasLee 2008-07-02  
你的优化方法只是泛泛的方向,没有结合具体实际来考虑是否合适。
首先你得找到瓶颈。数据库执行SQL、转化XML、其它部分各占的时间百分比,然后针对大头部分优化。

我觉得你的使用存储过程的方法实现工作量、优化效果上均不会有很好的表现。
看起来你们没有将结果集分页?这个对性能影响是挺大的。
另外,你们的硬件似乎太老了点,8年没换过硬件吧?可以考虑一下--至少加个几G内存还可以吧。

相关推荐

    ejb的一些配置步骤

    5. **提供部署文件**:EJB 3.0允许使用注解代替标准部署描述文件(`ejb-jar.xml`),但可能还需要编写一些系统优化所需的厂商特定部署描述文件。 6. **打包并部署**:将EJB组件及相关依赖打包成JAR文件,并部署到...

    Manning - Bitter EJB @2003.pdf

    每个版本都在试图解决前一版本中存在的问题,如性能、复杂性以及与现有开发模式的融合度。然而,EJB 2.0虽然引入了重要的改进,如容器管理的持久性(CMP)和容器管理的关系(CMR),但仍然无法完全摆脱其复杂性和...

    Manning EJB3.0 in action

    这一章节将提供一些技巧和策略,帮助开发者优化现有系统,使其更加易于管理和扩展。 ### 14. 迁移到EJB 3 对于那些已经使用早期版本EJB的开发者来说,迁移到EJB 3.0是一个不可避免的过程。这部分内容将指导他们...

    EJB使用注意事项

    EJB3.0(Enterprise JavaBeans 3.0)是EJB技术的一个重大更新,它引入了许多新的特性和改进,使得开发人员能够更加高效地构建企业级应用。下面将详细介绍EJB3.0的使用注意事项。 #### 一、EJB3.0的新特性与优势 1....

    Expert one on one J2EE development without EJB.pdf

    - **Spring框架**:Spring是一个开源的应用程序框架,它提供了一种替代EJB的轻量级方法,尤其在依赖注入(DI)和面向切面编程(AOP)方面表现出色。 - **Hibernate**:作为持久层解决方案,Hibernate简化了数据库...

    合同管理系统_技术方案.docx

    它详细介绍了系统的架构设计、功能模块、技术实现等方面,确保所有参与者都能对系统的整体架构有一个清晰的认识。 - **适用范围**:该文档覆盖了项目生命周期的各个阶段,对于设计人员、开发人员、测试人员以及维护...

    Expert-One-on-one+J2EE+Development+Without+EJB

    Spring框架提供了一个全面的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)解决方案,使得代码更易于测试和维护。而Hibernate作为流行的ORM(Object-Relational Mapping...

    航空订票管理系统开题报告

    - **系统解决方案**:采用JSF/Richfaces 作为UI层,EJB 作为业务层,JPA 用于数据持久化。这种架构能够满足系统的功能需求和性能要求。 - **关键技术难点**: - UI层设计:如何设计简洁高效的用户界面,提供良好的...

    weblogic性能调优

    WebLogic性能调优是一个涉及多个层面的复杂过程,需要从硬件资源、操作系统、网络环境、JVM配置以及WebLogic Server本身等多个维度进行全面考虑。通过对上述各项的综合调优,可以显著提升WebLogic系统的整体性能,...

    基于J2EE分布式架构的高性能电商交易接入平台研究与设计.pdf

    一个好的架构设计应考虑到系统的可扩展性、可维护性和性能优化等因素。例如,如何利用J2EE框架中的组件技术,如Servlet、EJB(Enterprise JavaBeans)等,来实现各个功能模块。 知识点六:性能压力测试 性能压力...

    电力整合CIM方案

    - **支持平台**:基于现有的组件技术如CORBA、EJB、DCOM等进行构建。 - **数据模型**:建立一套能够描述CIM的数据平台。 - **数据访问接口**:规定了访问数据模型中特定数据的方法,确保系统的开放性和互操作性。 #...

    基于J2EE的B2C电子商务系统开发(论文 系统 开题报告 文献综述 任务书 答辩PPT 中期报表 外文文献 说明书).rar

    论文还会讨论如何通过J2EE中的Servlet、JSP、EJB等组件实现这些功能,并可能涉及到性能优化、安全策略等高级话题。 开题报告是项目启动阶段的文档,会概述研究目标、研究方法、预期成果和时间规划。对于基于J2EE的...

    分布式定时任务调度系统技术选型指南.docx

    - **opencron**:一个基于Java开发的开源定时任务管理系统,提供Web界面操作,支持多任务并发执行,但可能在大规模分布式场景下表现一般。 - **antares**:相对较少提及,但也是一个分布式任务调度框架,可能在...

    基于连锁企业供应链管理系统分析.doc

    - J2EE对MVC的改进:利用J2EE的特性,如EJB(Enterprise JavaBeans)和Servlet,进一步优化了MVC模型,增强了系统的性能和稳定性。 综上所述,本文档深入分析了连锁企业SCM系统的现状和问题,并提出了基于J2EE技术...

    TongWeb应用移植指导方案

    5. Struts2.x的性能问题:Struts2.x在新平台下的性能可能会受到影响,可以考虑优化配置,或者更换更适合的新框架。 总的来说,TongWeb应用的移植是一项复杂但关键的任务,涉及到技术选型、代码调整、测试验证等多个...

    基于J2EE的B2C电子商务系统开发(LW+系统+开题报告+文献综述+任务书+答辩PPT+中期报表+外文文献+说明书).zip

    - **性能优化**:通过负载均衡、数据库优化、代码优化等方式提高系统性能。 这个压缩包提供的资源可以作为一个全面的学习材料,帮助读者理解如何从头开始构建一个完整的B2C电子商务系统,并了解J2EE开发在实际项目...

    JAVA报表解决方案源码

    Java报表解决方案源码是针对企业级应用中数据报表生成与展示的一个重要工具,它通常包含一系列的类库、API和示例代码,帮助开发者在Java平台上实现复杂的数据处理和报表设计。在J2EE环境中,这类解决方案对于数据...

    IBM 软件及方案演示 WebSphere3

    总的来说,IBM WebSphere不仅是一个强大的应用服务器,还是一个全面的企业级解决方案,为企业提供了一站式的应用开发、集成、管理和迁移服务。结合HATS,WebSphere能够帮助企业在保持与传统系统连接的同时,逐步迈向...

Global site tag (gtag.js) - Google Analytics