请教一个关于性能优化的问题

2023-10-28 06:38
文章标签 问题 优化 性能 请教

本文主要是介绍请教一个关于性能优化的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这段时间公司要我对以前一个老系统的一些模块的某些操作进行性能上的优化,但这方面没有什么经验,请教一下各位,问题是这样的:
系统中存在着一些这样的表:
如运营商表:包含主要字段有[运营商代码(carrier_cd),生效时间(eff_tm),失效时间(ex_tm).....](在这里只举一个表,还有其他类似这样的表)。
现在系统有两个这样的操作:查重,导出不连续;
1.查重:即找出(如上表)以运营商代码为分组并按生效时间排序条件的记录,在这一组记录中如果有两条或者两条以上记录的生效时间和失效时间是在同一区间内或者说前一条记录的失效时间点+1秒大于后一条记录的生效时间点。
2.导出不连续:跟查重操作差不多。这里就不描述了。

然后,现在的系统是这样的处理的,先用Sql找出运营商代码存在重复的记录,因为如果运营商代码不重复的话也就是只有一条记录也不存在重复,如下SQL:
select * from Carriers where carrier_cd in
(select carrier_cd from carriers group by carrier_cd having count(*) > 1)
order by carrier_cd,eff_tm
取出这些记录后在程序中再进行如下处理:
1.将记录进行分组:
也就是将取出来的记录如果carrier_cd相同的记录就放在同一个list中(即一个组),然后再这些分组后的数据放在一个总HashMap或者List(系统以前实现的得很乱)。
代码大概如下:
List<Carrier> list = getList()//根据上面SQL取出的记录
HashMap groupData = new HashMap();
for (Carrier car:list) {
String carrier_cd = car.getCarrierCd();
List groupList = null;
if (groupData.containKey(carrier_cd)) {
groupList = (List)groupData.get(carrier_cd);
} else {
groupList = new Arraylist();
groupData.put(carrier_cd,groupList);
}
groupList.add(car);
}
2.找到重复记录(这里用了两重的for)
迭代总的HashMap或者List,在每一组中通过比较找出重复的记录。
Set set = groupData.keySet();
List repatRecord = new ArrayList();
for (String key : set) {
List groupedList = groupData.get(key);
for (Carrier car : groupedList) {
//比较第一条失效时间+1秒是否大于下一条记录的生效时间
..........
}
}

上面的解决办法如果在数据不多的情况下是没有问题的,但是系统是老系统,也就是说有使用年代已久有很多记录,比如说运营商表(这是个大表)可能每个运营商都会有重复的情况,也就是说如上的解决方法,第一步从DB取出的记录就有几万条了,这样是肯定是不行的。
然后我想了几种方法(但只是想而已,不知道可不可行):
1。使用DB的存储过程来实现;
2。完全使用SQL来过滤;
3。还是按照上面的解决方法,但在SQL取数据时看能不能再滤一些,这样可以减少些系统的开销。

但是无论使用哪种方法都得取得一个平衡点,不让系统顾此失彼,所以在这里请各位高手提供一下你们的方案。

这篇关于请教一个关于性能优化的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/291377

相关文章

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Java死锁问题解决方案及示例详解

《Java死锁问题解决方案及示例详解》死锁是指两个或多个线程因争夺资源而相互等待,导致所有线程都无法继续执行的一种状态,本文给大家详细介绍了Java死锁问题解决方案详解及实践样例,需要的朋友可以参考下... 目录1、简述死锁的四个必要条件:2、死锁示例代码3、如何检测死锁?3.1 使用 jstack3.2

解决JSONField、JsonProperty不生效的问题

《解决JSONField、JsonProperty不生效的问题》:本文主要介绍解决JSONField、JsonProperty不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录jsONField、JsonProperty不生效javascript问题排查总结JSONField

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复