0 0

Java批量数据库操作,如何性能优化?5

List<Student> list = new ArrayList<Student>();

for(int i=0;i<list.size();i++){
Student st = (Student)list.get(i);

Object o = getHibernateTemplate().get(Student.class, st.getStudentId());


if(null == o){
...

Address addr = new Address();
...

getHibernateTemplate().saveOrUpdate(addr);

getHibernateTemplate().saveOrUpdate(o);

getSession().flush();
getSession().evict(addr);
getSession().evict(o);
} else {
...
Address addr = methodForFindAddr(o);
...
getHibernateTemplate().saveOrUpdate(hql);

getHibernateTemplate().saveOrUpdate(o);

getSession().flush();
getSession().evict(addr);
getSession().evict(o);
}

}

现在实现如上面代码所示,如果list数据量比较小的话,还可勉强凑合,若超过数万条数据,需耗费大量时间,有什么好的建议对此进行优化?

我曾试两种方法:1.过线程池的方式,可方法methodForFindAddr可能会出现同步问题,线程之间数据串了。
2.将所有saveOrUpdate的对象抽取出来,循环批量保存,每循环50次,flush一次。可是两个循环耗费的时间仍然很长。
2014年6月03日 09:11

1个答案 按时间排序 按投票排序

0 0

http://greemranqq.iteye.com/blog/1830212  有个批量操作,看能不能给你点提示。

在hibernate 或者 spring 中,也提供了批量的方法,你可以查一下API

2014年6月03日 09:39

相关推荐

Global site tag (gtag.js) - Google Analytics