`

性能调优

阅读更多
   最近又修改了一个有关性能的BUG。

   虽然在一般情况下,效率不是什么大问题,只要程序结构良好,在测试期间发现有性能瓶颈在做相应的性能调优是可行的。但是,不要忽视一点,能够在数据库中完成的操作,尽量不要放在程序中进行处理;能够用一条SQL语句完成的操作,尽量不要用多条SQL语句去完成。毕竟数据库系统已经发展了很多年,非常成熟,性能也是非常高。
  
   最近修改的几个BUG,都是与数据访问相关的。
  
   这个BUG是因为非常低效率的使用数据库,将大量可以放在数据库中完成的计算逻辑拿到应用程序中来完成所造成的。
   我们的数据访问底层采用的是HIBERNATE, 在原来的实体工具上进行了一点封装,使得可以使用hql来操作数据库。这比原来的实体工具性能和功能上都更进一步。

   取解决BUG的总时间的逻辑是:对于一个BUG,找到它所有相关的BUG_HISTORY,根据BUG_HISTORY中Action是5(解决)或者10(修改解决方案),找到所有的BUG_FIELD_HISTORY,找到其中FIELD是12的域,取出NEW_VALUE和OLD_VALUE,计算差值,然后求和,得到所有BUG的总解决时间

   BUG -> BUG_HISTORY -> BUG_FIELD_HISTORY
   1         N     1            N

   采用hql来写的话,也就是
String hql1="select bfh.newValue, bfh.oldValue from BugFieldHistory as bfh, BugHistory as bh, Bug as b " +
				"where bfh.field=12 and bfh.bugHistoryId = bh.id and (bh.action =5 or bh.action = 10) and bh.bugId = b.bugId and b.testReportId = "+
				report.getTestReportId();

这样就可以了。

   本来可以更近一步的,直接取sum(bfh.newValue-bfh.oldValue),但是由于newValue和oldValue对应的数据库字段类型是text,直接做减法,然后sum,在有些数据库中不支持。

   因此,这次优化只能达到这个地步。如果是只支持mysql系统的话,那么就采用上述方法,直接就求到了结果。目前,为了支持多数据源,只好牺牲一下效率了,把结果放到JAVA代码中实现。
   for (Iterator iter = resultList.iterator(); iter.hasNext();) {
				Object[] element = (Object[]) iter.next();
				Float newValue = new Float((String)element[0]);
				if(null==element[1]){
					result += newValue;
				}else{
					Float oldValue = new Float((String)element[1]);
					result += (newValue-oldValue);						
				}
			}


    遍历得到的列表,然后执行求和操作。因为要遍历列表,采用iterator的方式去遍历,性能应该不低。

    还有另外一类BUG: 需求是要计算按照某种分类条件的BUG数目。

    原来的实现方式是对于每一种分类,将符合条件的记录都选出来,取list的长度。其实这明显是一个典型的分组统计,直接使用group by分组统计就可以了。当然,group by的时候,count为0的记录不会输出。那么,对于这种情况,需要程序另外处理。
   
    String hql = "select count(b.bugId), b.bugClass from Bug as b where b.testReportId = " + reportId
    	+" group by b.bugClass"; 
     

然后,我们把列表中的元素取出来,构造hashmap,然后取每一种bugClass所对于的统计值,如果没有,那自然就是0:)

    这样子,通过一条语句,就完成了需要N条语句才能完成的工作。

    最后,在需要统计数字的时候,我们可以直接count(*)就能够知道统计结果。不需要select * ,然后再去取list的值。没有必要,这种数据库能做的事情都让数据库做了就OK了。

    一定要充分发挥数据库的性能优势。

    
   
分享到:
评论

相关推荐

    阿里巴巴Java性能调优实战(2021华山版)

    阿里巴巴Java性能调优实战(2021华山版) 本资源摘要信息来自阿里巴巴Java性能调优实战(2021华山版),旨在帮助Java开发者掌握性能调优的实战经验和技术。 性能调优的重要性 性能调优是软件开发中一个非常重要的...

    SAP ABAP程序性能调优介绍.pptx

    SAP ABAP 程序性能调优介绍 SAP ABAP 程序性能调优是指通过对程序的优化来提高 SAP 系统的性能。性能调优是 SAP 系统管理员和开发人员的重要任务之一,因为它可以直接影响到用户的体验和业务的效率。 用户交互过程...

    360°全方面性能调优.pdf

    《360°全方面性能调优.pdf》这份文档是一份针对Android平台进行性能调优的详细指南。文档中包含了从设计思想、代码质量优化到程序性能优化,再到开发效率优化的全面内容。 在设计思想与代码质量优化方面,文档详细...

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    阿里巴巴Java性能调优华山版是一套系统性能调优教程,!通过这份笔记的学习,你将会有一个系统的调优头脑和策略!快了何止100%?需要的朋友可下载试试! 众所周知性能调优可以使系统稳定,用户体验更佳,甚至在...

    DB2 SQL性能调优秘笈

    ### DB2 SQL性能调优秘笈 在数据库领域,IBM DB2因其稳定性和高效性而备受推崇,尤其是在大型企业级应用中。对于DB2数据库管理员(DBA)来说,掌握有效的SQL性能调优技巧至关重要。这不仅能提升系统的响应速度,还...

    MySQL性能调优与架构设计.pdf

    "MySQL性能调优与架构设计.pdf" 本资源摘要信息是关于 MySQL 数据库软件的性能调优和架构设计的知识点。MySQL 是一个流行的开源数据库管理系统,具有简单高效可靠的特点,广泛应用于各个行业。以下是从给定的文件中...

    linux性能调优.pdf

    Linux性能调优是系统管理员和开发人员优化Linux系统性能的重要技能。它涉及对系统资源和应用程序的分析、监控、和调整,以实现更高的效率和响应速度。本篇学习笔记详细介绍了性能分析的步骤、优化工具、性能指标的...

    ORACLE DBA工作笔记 运维数据迁移与性能调优

    标题中提到的“ORACLE DBA工作笔记 运维数据迁移与性能调优”揭示了这本书籍主要围绕着Oracle数据库管理员(DBA)在日常工作中经常需要进行的两项关键任务:数据迁移和性能调优。作为一名Oracle DBA,不仅要负责...

    JVM系列之性能调优参考手册(实践篇).pdf

    标题《JVM系列之性能调优参考手册(实践篇)》涉及的知识点主要集中在Java虚拟机(JVM)性能调优的实践操作。JVM作为Java程序运行的基础环境,对程序性能有着决定性影响。本手册的目的是指导开发者如何对JVM进行性能...

    MySQL分布式数据库中间件Mycat性能调优指南

    在实际应用中,Mycat的性能调优对于系统的整体效率至关重要。本指南将深入探讨Mycat性能优化的各个方面,帮助你更好地理解和掌握其关键技巧。 1. **Mycat架构理解**:Mycat的核心功能包括路由分片、数据切分、读写...

    Oracle 性能调优的基本方案

    Oracle 性能调优的基本方案 Oracle 性能调优是数据库管理员和开发者非常关心的问题。为了确保数据库的高效运行,需要对 Oracle 性能进行调优。本文将对 Oracle 性能调优的基本方案进行概述,并介绍了该方案的八个...

    MySQL性能调优与架构设计(pdf高清)

    MySQL性能调优与架构设计MySQL性能调优与架构设计MySQL性能调优与架构设计MySQL性能调优与架构设计MySQL性能调优与架构设计MySQL性能调优与架构设计MySQL性能调优与架构设计MySQL性能调优与架构设计

    阿里巴巴Java性能调优实战(2021华山版).pdf

    阿里巴巴Java性能调优实战

    DB2SQL性能调优秘笈

    资源名称:DB2 SQL性能调优秘笈资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    阿里+Java+开发手册、阿里巴巴Java性能调优实战

    《阿里+Java+开发手册、阿里巴巴Java性能调优实战》是两本专注于Java开发和性能优化的专业书籍,分别以嵩山版和华山版的形式呈现,由阿里巴巴集团编写。这两本书籍结合了阿里巴巴在实际业务场景中的丰富经验,旨在...

    android-360°全方面性能调优.pdf

    在Android开发中,性能调优是一项至关重要的任务,它直接影响到应用的用户体验和系统的稳定性。本教程《android-360°全方面性能调优》深入探讨了Android应用性能优化的各个方面,旨在帮助开发者提升应用的运行效率...

    Java性能调优 6步实现项目性能全面升级+面试高频性能问题讲解.rar

    Java性能调优 6步实现项目性能全面升级+面试高频性能问题讲解视频教程分享,性能优化的N种企业级解决方案,囊括了【数据库优化】、【Tomcat优化】、【JVM优化】、【垃圾回收】、【Netty优化】、【Nginx优化】、...

    WebLogic Server性能调优

    性能调优对于确保WebLogic Server上运行的应用程序能够高效、稳定地运行至关重要。性能调优主要涉及对应用程序、服务器和底层硬件资源的优化,以此提升系统性能和响应能力。 文档首先提出了在J2EE应用程序体系结构...

Global site tag (gtag.js) - Google Analytics