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

我公司是做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 会不会性能有所提升?但这样的话就要建立临时表去存放本地的数据给远程用... 

望高手能给予解答,谢谢

哔哔one
浏览 194回答 2
2回答

桃花长相依

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

largeQ

看了这个应该可以使用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处理不过来。
打开App,查看更多内容
随时随地看视频慕课网APP