1. 程式人生 > >Hibernate 效能優化

Hibernate 效能優化

Session: 一級快取

sessionFactory: 二級快取

查詢快取:  三級快取

一級快取快取實體物件

Iterator 和 list的區別

       Iterator剛開始取主鍵,任何時候用到才取出來,所以Iterator利用快取,不會發出查詢實體的sql(from)

List不會利用快取,每次用到都會發出sql

Session消亡的時候,快取消亡

查詢快取Query.setCacheable(true).list()

EhCache 配置檔案hibernate-distribution-3.3.2.GA\project\etc\ehcache.xml

              <defaultCache

       maxElementsInMemory="10000" //最多多少個物件

       eternal="false"      //記憶體物件的永久性

       timeToIdleSeconds="120" //期限(物件不活動的期限)

       timeToLiveSeconds="120" //生存期

       overflowToDisk="true" />  // 快取滿時,放到硬碟<diskStorepath="java.io.tmpdir"/>

EhCache.jar

              hibernate-distribution-3.3.2.GA\lib\optional\ehcache

XML:<property name=” hibernate.cache.use_second_level_cache”>true </property>

        <property name=” hibernate.cache.provider_class”> org.hibernate.cache.EhCacheProvider </property>

Annotation: 在class設定@Cache(usage= CacheConcurrencyStrategy.READ_WRITE )

快取演算法

l        最佳(optimal)置換演算法: 選擇那些永不使用的,或者是在最長時間內不再被訪問的頁面置換出去.即要確定哪一個頁面是未來最長時間內不再被訪問

l        先進先出(FIFO): 利用佇列,先進先出

l        最近最久未使用置換演算法LRU (Least Recently Used): 系統在每個頁面設定一個訪問欄位,用以記錄這個頁面自上次被訪問以來所經歷的時間T,重複訪問時重新設為0,選擇T最大的頁面淘汰。利用棧實現,棧底的T最大.

l        最近未用置換NUR(Not UsedRecently): 為每個頁面置一個訪問位,將記憶體中的所有頁面都通過連結指標鏈成一個迴圈佇列。當某頁被訪問的時,若為‘1’,暫不換出此頁,置為‘0’。如果是‘0’則淘汰。