首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>java教程>资讯:浅析Hibernate下数据批量处理方法

浅析Hibernate下数据批量处理方法

www.jz123.cn  2009-08-20   来源:   中国建站    责任编辑(袁袁)    我要投递新闻

  很多人都对Java在批量数据的处理方面是否是其合适的场所持有怀疑的念头,由此延伸,那么就会认为ORM可能也不是非凡适合数据的批量处理。其实,我想假如我们应用得当的话,完全可以消除ORM批量处理性能问题这方面的顾虑。下面以Hibernate为例来做为说明,假如我们真的不得不在 Java中使用Hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据,用Hibernate可能像这样:

  
      Session session = sessionFactory.openSession();

  Transaction tx = session.beginTransaction();

  for ( int i=0; i<100000; i++ ) {

  Customer customer = new Customer(.....);

  session.save(customer); }

  tx.commit();

  session.close();

  大概在运行到第50 000条的时候,就会出现内存溢出而失败。这是Hibernate把最近插入的Customer都以session-level cache在内存做缓存,我们不要忘记Hiberante并没有限制first-level cache 的缓存大小。

  ◆持久对象实例被治理在事务结束时,此时Hibernate与数据库同步任何已经发生变 化的被治理的的对象。

  ◆Session实现了异步write-behind,它答应Hibernate显式地写操作的批处理。 这里,我给出Hibernate如何实现批量插入的方法:

  首先,我们设置一个合理的JDBC批处理大小,hibernate.jdbc.batch_size 20。 然后在一定间隔对Session进行flush()和clear()。

  

      Session session = sessionFactory.openSession();

  Transaction tx = session.beginTransaction();

  for ( int i=0; i<100000; i++ ) {

  Customer customer = new Customer(.....);

  session.save(customer);

  if ( i % 20 == 0 ) {

  //flush 插入数据和释放内存:

  session.flush(); session.clear(); }

  }

  tx.commit();

  session.close();

上一篇:运用Spring AOP验证用户权限实例 下一篇:网友经验分享:学好java开发的关键7步

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图