国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

淺析Hibernate下數據批量處理方法

2024-07-14 08:44:00
字體:
來源:轉載
供稿:網友

  很多人都對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();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 常熟市| 桐城市| 阿瓦提县| 西乡县| 安丘市| 台中县| 调兵山市| 武陟县| 沙洋县| 临澧县| 金堂县| 宁南县| 凤翔县| 灵寿县| 宾川县| 大埔县| 汾西县| 定结县| 华阴市| 波密县| 肥乡县| 靖安县| 琼结县| 明光市| 璧山县| 牡丹江市| 双柏县| 青田县| 芜湖县| 永川市| 黔南| 兰西县| 八宿县| 全椒县| 育儿| 开远市| 阿瓦提县| 旬阳县| 洛隆县| 黔西县| 昌邑市|