JiveJdon Community Forums
在线293人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » 项目工程开发经验谈
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 1 回复 / 1
 发表新帖子   回复该主题贴
sam888

悄悄话
发表文章: 5
注册时间: 2007年03月28日 22:29
请教一个关于性能优化的问题 2007年06月08日 14:20 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 性能调优(31)     
这段时间公司要我对以前一个老系统的一些模块的某些操作进行性能上的优化,但这方面没有什么经验,请教一下各位,问题是这样的:
系统中存在着一些这样的表:
如运营商表:包含主要字段有[运营商代码(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取数据时看能不能再滤一些,这样可以减少些系统的开销。

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




banq

悄悄话
发表文章: 9528
注册时间: 2002年08月03日 17:08
回复:请教一个关于性能优化的问题 2007年06月13日 09:49 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
不是很明白你的平衡策略。

依据我在数据库时代终结一文的观点,数据库SQL优化只是一种“苟延残喘”的做法,花10倍力气产生1的效率,重点还是对象化设计和资源控制和优化(cache等)。
这个主题有 1 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  每2分种自动备份发贴内容Ctrl-V粘贴取出,提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam