成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分析Hibernate插入操作

開發(fā) 后端
首先回顧一下Hibernate插入操作的機(jī)制。Hibernate要對它內(nèi)部緩存進(jìn)行維護(hù),當(dāng)我們執(zhí)行Hibernate插入操作時(shí),就會把要操作的對象全部放到自身的內(nèi)部緩存來進(jìn)行管理。

Hibernate還是比較常用的,于是我研究了一下Hibernate插入操作,在這里拿出來和大家分享一下,希望對大家有用。

在項(xiàng)目的開發(fā)過程之中,由于項(xiàng)目需求,我們常常需要把大批量的數(shù)據(jù)插入到數(shù)據(jù)庫。數(shù)量級有萬級、十萬級、百萬級、甚至千萬級別的。如此數(shù)量級別的數(shù)據(jù)用Hibernate插入操作,就可能會發(fā)生異常,常見的異常是OutOfMemoryError(內(nèi)存溢出異常)。

首先,我們簡單來回顧一下Hibernate插入操作的機(jī)制。Hibernate要對它內(nèi)部緩存進(jìn)行維護(hù),當(dāng)我們執(zhí)行Hibernate插入操作時(shí),就會把要操作的對象全部放到自身的內(nèi)部緩存來進(jìn)行管理。

談到Hibernate的緩存,Hibernate有內(nèi)部緩存與二級緩存之說。由于Hibernate對這兩種緩存有著不同的管理機(jī)制,對于二級緩存,我們可以對它的大小進(jìn)行相關(guān)配置,而對于內(nèi)部緩存,Hibernate就采取了“放任自流”的態(tài)度了,對它的容量并沒有限制。現(xiàn)在癥結(jié)找到了,我們做海量數(shù)據(jù)插入的時(shí)候,生成這么多的對象就會被納入內(nèi)部緩存(內(nèi)部緩存是在內(nèi)存中做緩存的),這樣你的系統(tǒng)內(nèi)存就會一點(diǎn)一點(diǎn)的被蠶食,如果最后系統(tǒng)被擠“炸”了,也就在情理之中了。

我們想想如何較好的處理這個(gè)問題呢?有的開發(fā)條件又必須使用Hibernate來處理,當(dāng)然有的項(xiàng)目比較靈活,可以去尋求其他的方法。

筆者在這里推薦兩種方法:
1.優(yōu)化Hibernate,程序上采用分段插入及時(shí)清除緩存的方法。
2.繞過Hibernate API ,直接通過 JDBC API 來做批量插入,這個(gè)方法性能上是最 好的,也是最快的。

對于上述中的方法1,其基本是思路為:優(yōu)化Hibernate,在配置文件中設(shè)置Hibernate.jdbc.batch_size參數(shù),來指定每次提交SQL的數(shù)量;程序上采用分段插入及時(shí)清除緩存的方法(Session實(shí)現(xiàn)了異步write-behind,它允許Hibernate顯式地寫操作的批處理),也就是每插入一定量的數(shù)據(jù)后及時(shí)的把它們從內(nèi)部緩存中清除掉,釋放占用的內(nèi)存。

設(shè)置Hibernate.jdbc.batch_size參數(shù),可參考如下配置。

  1. <hibernate-configuration> <session-factory> 
  2. ……  
  3. <property name=“ hibernate.jdbc.batch_size”>50</property> 
  4. ……  
  5. <session-factory> <hibernate-configuration> 

配置Hibernate.jdbc.batch_size參數(shù)的原因就是盡量少讀數(shù)據(jù)庫,Hibernate.jdbc.batch_size參數(shù)值越大,讀數(shù)據(jù)庫的次數(shù)越少,速度越快。從上面的配置可以看出,Hibernate是等到程序積累到了50個(gè)SQL之后再批量提交。

筆者也在想,Hibernate.jdbc.batch_size參數(shù)值也可能不是設(shè)置得越大越好,從性能角度上講還有待商榷。這要考慮實(shí)際情況,酌情設(shè)置,一般情形設(shè)置30、50就可以滿足需求了。

程序?qū)崿F(xiàn)方面,筆者以插入10000條數(shù)據(jù)為例子,如

  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個(gè)數(shù)據(jù)作為一個(gè)處理單元  
  10. {  
  11. session.flush();   
  12. //保持與數(shù)據(jù)庫數(shù)據(jù)的同步  
  13. session.clear();   
  14. //清除內(nèi)部緩存的全部數(shù)據(jù),及時(shí)釋放出占用的內(nèi)存  
  15. }  
  16. }  
  17. tx.commit();  
  18. …… 

【編輯推薦】

  1. Hibernate連接配置方法剖析
  2. Hibernate Session實(shí)例剖析
  3. 淺析Hibernate Callback接口
  4. Hibernate Session緩存概述
  5. Hibernate修改addMate方法
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-09-23 16:39:51

Hibernate s

2009-09-23 13:33:51

Hibernate屬性

2009-09-28 15:38:12

Hibernate P

2009-09-21 18:00:49

Hibernate X

2009-09-22 14:23:37

Hibernate S

2009-09-23 10:28:16

Hibernate映像

2009-09-22 11:30:57

2009-09-22 17:47:03

Hibernate s

2009-06-12 15:13:12

Hibernate學(xué)習(xí)

2009-09-27 10:10:47

Hibernate處理

2009-09-27 14:33:01

Hibernate批量

2009-09-22 11:24:07

Hibernate查詢

2009-09-24 13:49:31

Hibernate自增

2009-09-29 10:40:26

Hibernate業(yè)務(wù)

2009-09-25 14:04:12

Hibernate讀取

2009-09-21 14:24:08

Hibernate3.

2009-09-24 13:12:20

Hibernate原生

2009-09-25 10:47:25

Hibernate延遲

2009-07-06 18:29:55

2009-09-29 13:55:23

Hibernate設(shè)置
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美日韩一区精品 | 男女羞羞的网站 | 在线观看视频一区 | 一级免费a| 亚洲精品欧美精品 | 国产精品免费一区二区三区 | 欧美激情一区二区三级高清视频 | 国产91在线 | 亚洲 | 精精国产xxxx视频在线播放 | 爱高潮www亚洲精品 中文字幕免费视频 | 一区二区三区免费 | 久久综合av | 九九久久久 | 色欧美片视频在线观看 | 午夜电影福利 | 亚洲精品一区在线 | 美女视频h | 91精品国产日韩91久久久久久 | 二区久久| 欧美亚洲在线 | 一区二区免费高清视频 | 夜久久 | 成人福利在线观看 | 久久精品国产一区二区电影 | 欧美日产国产成人免费图片 | 久久久妇女国产精品影视 | 午夜精品一区 | 婷婷五月色综合香五月 | 欧美日本韩国一区二区 | 亚洲精品一区二区网址 | 久久久久一区二区 | 精品国产成人 | 国产综合av | 免费一区 | 亚洲视频三区 | 久久免费高清视频 | 久久高清国产 | 亚洲久草| 国产精品美女在线观看 | 久久久爽爽爽美女图片 | 成人在线视频观看 |