`
sam1982
  • 浏览: 10016 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多
这段时间公司要我对以前一个老系统的一些模块的某些操作进行性能上的优化,但这方面没有什么经验,请教一下各位,问题是这样的:
系统中存在着一些这样的表:
如运营商表:包含主要字段有[运营商代码(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取数据时看能不能再滤一些,这样可以减少些系统的开销。

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




分享到:
评论
5 楼 windshome 2013-07-21  
一定是存储过程了
4 楼 sam1982 2007-07-13  
qinysong 写道
sam1982 写道
1.查重:即找出(如上表)以运营商代码为分组并按生效时间排序条件的记录,在这一组记录中如果有两条或者两条以上记录的生效时间和失效时间是在同一区间内或者说前一条记录的失效时间点+1秒大于后一条记录的生效时间点。

这里描述好像不清楚,如果后面只有条件没有,没有目的。
另外“生效时间和失效时间是在同一区间内”这句话怎么理解,是两个时间相等还是有其他条件,相等的话是精确在秒数量级吗

这操作在什么时候用,频度是多大,数据库中的数据目前变动率有多大

这些最好说明白,这样才好针对目标进行解决


是这样的,重复的条件就是:
比如表中有 effc_time,expire_time,carrier等字段
然后有如下记录:
effc_time            expire_time           carrier    
2007/07/01 00:00:00  2009/01/01 23:59:59    a         
2008/01/01 00:00:00  2010/01/01 23:59:59    a
2010/01/01 23:59:59  2017/01/01 23:59:59    a
2007/07/01 00:00:00  2009/01/01 23:59:59    b
2007/07/01 00:00:00  2009/01/01 23:59:59    c

在carrier 相同的情况下,第一条记录的effc_time+1秒>第二记录的expire_time即为重复的记录.而第一条记录的expire_time+1秒<>第二条记录的effc_time即为不连续.所以不连续应该是包括了重复的记录只是判断标准不一样.还有时间的计算是以秒级的
所以如前面给出记录中
重复记录为:
effc_time            expire_time           carrier    
2007/07/01 00:00:00  2009/01/01 23:59:59    a         
2008/01/01 00:00:00  2010/01/01 23:59:59    a
不连续记录为:
effc_time            expire_time           carrier    
2007/07/01 00:00:00  2009/01/01 23:59:59    a         
2008/01/01 00:00:00  2010/01/01 23:59:59    a
2010/01/01 23:59:59  2017/01/01 23:59:59    a

这两个操作在什么时候用?
这个很难说,基本上每个基础信息表和一些运营配置信息表的前台维护界面都会有操作,很难去捕捉用户什么时候会用.但是应该说用的机率不是很高吧.但之前的这个算法太慢了,现在是要优化它.

频度多大?
什么意思呢?使用的频度吗?

数据库中的数据目前变动率有多大?
这个跟数据库的变动率应该没有什么牵连的影响的,因为前面很多运营配置信息表都会有此操作的,而关于查重和导出不连续所涉及到的字段基本上是不会变的.....

不知道我这样说您清楚了吗?




  

3 楼 qinysong 2007-06-15  
sam1982 写道
1.查重:即找出(如上表)以运营商代码为分组并按生效时间排序条件的记录,在这一组记录中如果有两条或者两条以上记录的生效时间和失效时间是在同一区间内或者说前一条记录的失效时间点+1秒大于后一条记录的生效时间点。

这里描述好像不清楚,如果后面只有条件没有,没有目的。
另外“生效时间和失效时间是在同一区间内”这句话怎么理解,是两个时间相等还是有其他条件,相等的话是精确在秒数量级吗

这操作在什么时候用,频度是多大,数据库中的数据目前变动率有多大

这些最好说明白,这样才好针对目标进行解决
2 楼 sam1982 2007-06-12  
rtdb 写道
存储过程当然是首选
除了存储过程就没有别的方法了吗?用SQL能不能实现呢?
1 楼 rtdb 2007-06-08  
存储过程当然是首选

相关推荐

    问题请教工程,问题请教工程

    例如,如果问题是关于数据库查询慢,可能需要从SQL优化、索引设计、硬件性能等多方面进行分析。 在与他人交流问题时,保持谦逊和开放的态度很重要。接受不同的观点和建议,即使它们可能与自己的直觉相反。同时,...

    java弹幕小游戏源码(同时请教,如何优化算法让它内存需求减少)

    在这个项目中,开发者分享了源代码并提出了一个优化问题,即如何减少游戏的内存需求。 源码分析: 1. **数据结构与算法优化**:游戏中的敌人资源存储在`a.json`文件中,这可能是一个JSON格式的文件,用于描述敌人...

    如何实时获取系统每个进程占用的CPU?--讨论及请教

    这一问题在IT领域尤其是系统管理和监控方面极为关键,因为它有助于优化资源分配、性能调优以及故障排查。 ### 实时获取系统进程CPU占用率的方法 在深入探讨之前,我们先理解几个基础概念: - **进程**:计算机系统...

    学习计算机BIOS知识,高手请教

    总之,掌握BIOS知识对于电脑用户来说是非常有用的技能,不仅可以帮助诊断和解决问题,还能优化硬件性能和提升系统稳定性。通过学习BIOS的工作原理和功能,以及如何正确地使用和更新BIOS,你将成为一个更资深的电脑...

    Oracle疑难解答集

    8. **一个UPDATE语句,请教SQL编写高手** UPDATE语句的编写需要考虑到并发控制、数据一致性和性能。在大型数据库中,一个简单的UPDATE可能带来意想不到的复杂性,因此寻求专家建议是非常有价值的。 9. **新建 文本...

    DSP汇编伪指令汇总

    - 作用:汇编到一个以绝对地址为起始的段中。 - 说明:与`.sect`类似,增加了绝对地址定位功能。现代编程中更倾向于使用命令文件来进行地址定位,因此该伪指令使用较少。 - **.bss** 符号,字数[,块标号] - 作用...

    AlbumModule.rar_ALBUMMODULE_TEACH

    5. **性能优化**:如果系统响应慢,可能是数据库查询效率低、服务器负载高或前端渲染问题。可以通过优化SQL、调整服务器配置、使用缓存策略等方式提升性能。 三、教学与学习资源 对于初学者或希望提高技术的人来说...

    Android漂亮的Listview完整版本

    从提供的文件信息来看,文件标题为“Android漂亮的...综上所述,文件中涵盖了ListView的基础使用、布局设计、代码实现、性能优化及分享精神等多个知识点,这些都是Android应用开发中关于ListView控件的重要组成部分。

    ORACLE数据库理论及应用.pptx

    Oracle数据库理论及应用主要涵盖了数据库的基础架构、管理、备份恢复、性能优化等多个方面。 首先,Oracle数据库的基本架构包括了数据库实例(Database Instance)和物理存储结构。数据库实例是内存结构和后台进程...

    Mysql根据时间查询日期的优化技巧

    在MySQL数据库中,查询日期和时间...如果在实践中遇到任何问题,不要犹豫向他人请教,或者在专业论坛寻求帮助。持续学习和实践,你将成为数据库优化的专家。感谢你对我们的支持,我们将继续提供有价值的IT知识和技巧。

    A Short Introduction to Boosting.pdf

    假设一个赌徒希望借助电脑程序来预测赛马结果,他请教了一位经验丰富的专家。专家无法给出一套完整的选马规则,但在特定赛马数据面前,他能提出粗糙但有时有效的“经验法则”。这些规则虽然独立来看并不精确,但比...

    雷の龙邮件列表

    "雷の龙邮件列表"可能是一个专注于讨论与开发技术相关的电子邮件通信平台,它可能是开发者们交流、分享技术问题和解决方案的社区。邮件列表是互联网早期非常流行的一种协作和讨论方式,用户可以通过发送电子邮件到...

    基于B2C的网上拍卖系统——秒杀与竞价中期检查表.doc

    《基于B2C的网上拍卖系统——秒杀与竞价》是一项以Java技术为核心的毕业设计项目,旨在构建一个结合了秒杀和竞拍机制的电子商务平台。在这个系统中,用户能够进行注册、登录、购买商品、下订单等一系列操作,同时...

    Java Learning Path process外文文献.doc

    最后,持续关注Java技术的最新发展,如Java的新版本特性、性能优化技巧等,保持学习的热情和好奇心,不断提升自己的技术水平。 总之,学习Java是一个循序渐进的过程,需要不断实践和探索。从基础语法到面向对象,再...

    数据库系统概论试卷及部分答案

    关系数据库是基于关系数据模型的,由一个或多个表格组成,每个表格由一系列列(属性)和行(记录)构成。在关系数据库中,SQL(Structured Query Language)是用于操作和查询数据的标准语言,包括数据的增删改查...

    学习软件编程的学习心得精选.doc

    通过实际的网盘开发,开发者可能认识到团队协作、技术选型、性能优化等方面的重要性,并在实践中不断提升自己的技能和解决问题的能力。 八、网盘工程开发体会: 在网盘工程开发中,可能深感数据安全、存储效率、...

    通信工程专业毕业实习报告.docx

    中国移动是一家基于 GSM 和 TD-SCDMA 制式网络的移动通信运营商,其建成了一个覆盖范围广、通信质量高、业务品种丰富、服务水平一流的移动通信网络。 四、EPON 接入网技术 EPON(无源光网络)是一种新型接入网技术,...

    自己刚学Vc不久,用VC做了一个虚拟示波器,大家多指教

    当虚拟示波器处理的数据量增加时,性能优化就显得尤为重要。可以通过减少不必要的计算、利用多线程并行处理、优化数据结构等方式提高程序运行速度。 8. **版本控制与代码管理** 对于任何项目,版本控制都是必要的...

    计算机毕业实习周记.doc

    例如,一个简单的算法在书本上看起来容易,但在实际编程中可能会遇到性能优化、错误调试等问题。这就需要实习生不断实践,通过编写代码、运行测试来巩固和深化理解。 实习期间,沟通与合作也至关重要。在团队中,每...

Global site tag (gtag.js) - Google Analytics