一.主配置
◆查詢快取,同下面講的快取不太一樣,它是針對HQL語句的快取,即完全一樣的語句再次執行時可以利用快取資料。但是,查詢快取在一個交易系統(資料變更頻繁,查詢條件相同的機率並不大)中可能會起反作用:它會白白耗費大量的系統資源但卻難以派上用場。
◆fetch_size,同JDBC的相關引數作用類似,引數並不是越大越好,而應根據業務特徵去設定
◆batch_size同上。
◆生產系統中,切記要關掉SQL語句列印。
二.Hibernate Session快取
1.資料庫級快取:這級快取是最高效和安全的,但不同的資料庫可管理的層次並不一樣,比如,在ORACLE中,可以在建表時指定將整個表置於快取當中。
2.Session快取:在一個Hibernate Session有效,這級快取的可干預性不強,大多於Hibernate自動管理,但它提供清除快取的方法,這在大批次增加/更新操作是有效的。比如,同時增加十萬條記錄,按常規方式進行,很可能會發現OutofMemeroy的異常,這時可能需要手動清除這一級快取:Session.evict以及 Session.clear
3.應用快取:在一個SessionFACTORY中有效,因此也是最佳化的重中之重,因此,各類策略也考慮的較多,在將資料放入這一級快取之前,需要考慮一些前提條件:
◆資料不會被第三方修改(比如,是否有另一個應用也在修改這些資料?)
◆資料不會太大
◆資料不會頻繁更新(否則使用CACHE可能適得其反)
◆資料會被頻繁查詢
◆資料不是關鍵資料(如涉及錢,安全等方面的問題)。
Hibernate Session快取有幾種形式,可以在對映檔案中配置:read-only(只讀,適用於很少變更的靜態資料/歷史資料),nonstrict-read- write,read-write(比較普遍的形式,效率一般),transactional(JTA中,且支援的快取產品較少)
4.分散式快取:同3)的配置一樣,只是快取產品的選用不同,在目前的Hibernate中可供選擇的不多,oscache, jboss cache,目前的大多數專案,對它們的用於叢集的使用(特別是關鍵交易系統)都持保守態度。在叢集環境中,只利用資料庫級的快取是最安全的。
三.延遲載入
◆實體延遲載入:透過使用動態代理實現
◆集合延遲載入:透過實現自有的SET/LIST,Hibernate提供了這方面的支援
一.主配置
◆查詢快取,同下面講的快取不太一樣,它是針對HQL語句的快取,即完全一樣的語句再次執行時可以利用快取資料。但是,查詢快取在一個交易系統(資料變更頻繁,查詢條件相同的機率並不大)中可能會起反作用:它會白白耗費大量的系統資源但卻難以派上用場。
◆fetch_size,同JDBC的相關引數作用類似,引數並不是越大越好,而應根據業務特徵去設定
◆batch_size同上。
◆生產系統中,切記要關掉SQL語句列印。
二.Hibernate Session快取
1.資料庫級快取:這級快取是最高效和安全的,但不同的資料庫可管理的層次並不一樣,比如,在ORACLE中,可以在建表時指定將整個表置於快取當中。
2.Session快取:在一個Hibernate Session有效,這級快取的可干預性不強,大多於Hibernate自動管理,但它提供清除快取的方法,這在大批次增加/更新操作是有效的。比如,同時增加十萬條記錄,按常規方式進行,很可能會發現OutofMemeroy的異常,這時可能需要手動清除這一級快取:Session.evict以及 Session.clear
3.應用快取:在一個SessionFACTORY中有效,因此也是最佳化的重中之重,因此,各類策略也考慮的較多,在將資料放入這一級快取之前,需要考慮一些前提條件:
◆資料不會被第三方修改(比如,是否有另一個應用也在修改這些資料?)
◆資料不會太大
◆資料不會頻繁更新(否則使用CACHE可能適得其反)
◆資料會被頻繁查詢
◆資料不是關鍵資料(如涉及錢,安全等方面的問題)。
Hibernate Session快取有幾種形式,可以在對映檔案中配置:read-only(只讀,適用於很少變更的靜態資料/歷史資料),nonstrict-read- write,read-write(比較普遍的形式,效率一般),transactional(JTA中,且支援的快取產品較少)
4.分散式快取:同3)的配置一樣,只是快取產品的選用不同,在目前的Hibernate中可供選擇的不多,oscache, jboss cache,目前的大多數專案,對它們的用於叢集的使用(特別是關鍵交易系統)都持保守態度。在叢集環境中,只利用資料庫級的快取是最安全的。
三.延遲載入
◆實體延遲載入:透過使用動態代理實現
◆集合延遲載入:透過實現自有的SET/LIST,Hibernate提供了這方面的支援