为了账号安全,请及时绑定邮箱和手机立即绑定

频繁的操作数据库是不是导致性能低下的原因呢?

频繁的操作数据库是不是导致性能低下的原因呢?

哔哔one 2023-04-09 13:09:25
我公司是做erp系统的,现在要求做一个款号转数的task,由于每天款号转数的数据量比较大,而且款号涉及的一些关联要也要进行转数,所以有时候会导致out of momery ,要进行修改! 原代码是用hibernate实现的, list = gzBma00160pDAO.getTransferData(Bma00160p.class,object); if(list!=null){ for(Iterator it = list.iterator();it.hasNext();){ Bma00160p newBma00160p = new Bma00160p(); BeanUtils.copyProperties(it.next(), newBma00160p); try{ Bma00160p bma00160p = bma00160pDAO.getBma00160p(newBma00160p.getBma00160pPK()); if(bma00160p!=null){ newBma00160p.setState(BaseObject.UPDATEMODE_MODIFY); }else{ newBma00160p.setState(BaseObject.UPDATEMODE_INSERT); } newBma00160p.setDlastmodifytime(nowtime); bma00160pDAO.saveObject(newBma00160p); }catch(Exception e){ ERPTaskErrorMailListener.addMessage("BMA00160P出错,代号: " + newBma00160p.getBma00160pPK()); LogUtils.warn("bma00160p error : " + newBma00160p); e.printStackTrace(); } } list.clear(); } 每个表查询转数的代码如上,每次都通过本地的对象get远程的对象,看有没有存在,有则update否则insert,这样如果数据量大,频繁的操作数据库是不是导致性能低下的原因呢?如果我换成jdbc,写sql语句一次性update 或 insert 会不会性能有所提升?但这样的话就要建立临时表去存放本地的数据给远程用... 望高手能给予解答,谢谢
查看完整描述

2 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

感觉 化整为零 分批次 一股脑 转换 数据量大的化 肯定报溢出 以前导出Excel 就是数据量大 最后通过 改jvm大小 再分sheet 我想转换原理差不多 分批次

查看完整回答
反对 回复 2023-04-12
?
largeQ

TA贡献2039条经验 获得超7个赞

看了这个应该可以使用sql直接完成吧。 
不同库可以使用远程datalink也可以实现 

update bma00160p.Bma00160p t set state=BaseObject.UPDATEMODE_MODIFY  

where t.pk in (select pk from gzBma00160p.Bma00160p where ....)    

insert into bma00160p.Bma00160p () values   

select ..., BaseObject.UPDATEMODE_INSERT as state from gzBma00160p.Bma00160p where ....  


呵呵,你这个地方的list多大,我处理过一个表30W的记录也没见内存暴的情况,当然不是hibernate了,hibernate处理不过来。


查看完整回答
反对 回复 2023-04-12
  • 2 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信