分析Hibernate插入操作
创始人
2024-06-07 22:20:47
0

Hibernate还是比较常用的,于是我研究了一下Hibernate插入操作,在这里拿出来和大家分享一下,希望对大家有用。

在项目的开发过程之中,由于项目需求,我们常常需要把大批量的数据插入到数据库。数量级有万级、十万级、百万级、甚至千万级别的。如此数量级别的数据用Hibernate插入操作,就可能会发生异常,常见的异常是OutOfMemoryError(内存溢出异常)。

首先,我们简单来回顾一下Hibernate插入操作的机制。Hibernate要对它内部缓存进行维护,当我们执行Hibernate插入操作时,就会把要操作的对象全部放到自身的内部缓存来进行管理。

谈到Hibernate的缓存,Hibernate有内部缓存与二级缓存之说。由于Hibernate对这两种缓存有着不同的管理机制,对于二级缓存,我们可以对它的大小进行相关配置,而对于内部缓存,Hibernate就采取了“放任自流”的态度了,对它的容量并没有限制。现在症结找到了,我们做海量数据插入的时候,生成这么多的对象就会被纳入内部缓存(内部缓存是在内存中做缓存的),这样你的系统内存就会一点一点的被蚕食,如果最后系统被挤“炸”了,也就在情理之中了。

我们想想如何较好的处理这个问题呢?有的开发条件又必须使用Hibernate来处理,当然有的项目比较灵活,可以去寻求其他的方法。

笔者在这里推荐两种方法:
1.优化Hibernate,程序上采用分段插入及时清除缓存的方法。
2.绕过Hibernate API ,直接通过 JDBC API 来做批量插入,这个方法性能上是最 好的,也是最快的。

对于上述中的方法1,其基本是思路为:优化Hibernate,在配置文件中设置Hibernate.jdbc.batch_size参数,来指定每次提交SQL的数量;程序上采用分段插入及时清除缓存的方法(Session实现了异步write-behind,它允许Hibernate显式地写操作的批处理),也就是每插入一定量的数据后及时的把它们从内部缓存中清除掉,释放占用的内存。

设置Hibernate.jdbc.batch_size参数,可参考如下配置。

  1.   
  2. ……  
  3.  name=“ hibernate.jdbc.batch_size”>50 
  4. ……  
  5.   

配置Hibernate.jdbc.batch_size参数的原因就是尽量少读数据库,Hibernate.jdbc.batch_size参数值越大,读数据库的次数越少,速度越快。从上面的配置可以看出,Hibernate是等到程序积累到了50个SQL之后再批量提交。

笔者也在想,Hibernate.jdbc.batch_size参数值也可能不是设置得越大越好,从性能角度上讲还有待商榷。这要考虑实际情况,酌情设置,一般情形设置30、50就可以满足需求了。

程序实现方面,笔者以插入10000条数据为例子,如

  1. Session session=HibernateUtil.currentSession();  
  2. Transatcion tx=session.beginTransaction();  
  3. for(int i=0;i<10000;i++)  
  4. {  
  5. Student st=new Student();  
  6. st.setName(“feifei”);  
  7. session.save(st);  
  8. if(i%50==0) 
  9. //以每50个数据作为一个处理单元  
  10. {  
  11. session.flush();   
  12. //保持与数据库数据的同步  
  13. session.clear();   
  14. //清除内部缓存的全部数据,及时释放出占用的内存  
  15. }  
  16. }  
  17. tx.commit();  
  18. …… 

【编辑推荐】

  1. Hibernate连接配置方法剖析
  2. Hibernate Session实例剖析
  3. 浅析Hibernate Callback接口
  4. Hibernate Session缓存概述
  5. Hibernate修改addMate方法

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...