隨筆-124  評論-194  文章-0  trackbacks-0
          這里有個帖子論證HIBERNATE在批量插入時性能下降,以及一些解決方式。

          其核心在于批量插入時,積攢一定量后就寫庫,并清除SESSION里的第一級緩存,以免后續插入操作受緩存查找而影響效率:

          if ( j % batchNum2 == 0 ) {//執行物理批量插入
                                             session.flush();
                                   session.clear();            

          }


          基于JPA的事務操作,SESSION不可見,此時,需要直接調用EntityManager的flush和clear。
          但EntityManager也是被封裝入JpaDaoSupport,實際的EntityManager對象也不容易取得。
          此時可以用其JpaTemplate成員的execute方法來實現這兩個操作:

                  getJpaTemplate().execute(new JpaCallback() {
                      
          public Object doInJpa(EntityManager em) throws PersistenceException {
                          em.flush();
                          em.clear();
                          
          return null;
                      }
                  }, 
          true);

          在我這里測試結果:
          沒有定期調用以上方法時,插入50個記錄要2秒,并且隨著記錄增多,時間越來越長。
          每插入50個調用以上方法后,插入50個記錄小于300毫秒,且不隨記錄個數線性增長。
          posted on 2009-07-16 21:20 我愛佳娃 閱讀(6726) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 镇坪县| 泗水县| 磐安县| 四平市| 惠州市| 旅游| 西和县| 象山县| 河北区| 古田县| 铜陵市| 哈尔滨市| 威信县| 巴林左旗| 合川市| 达拉特旗| 鹿泉市| 海林市| 高安市| 阳信县| 旌德县| 常德市| 肥城市| 东丽区| 四会市| 辽源市| 教育| 井陉县| 邓州市| 穆棱市| 剑阁县| 河北省| 全椒县| 肃宁县| 平乡县| 临泉县| 双峰县| 贺兰县| 海伦市| 双辽市| 望城县|