Hibernate是對JDBC的輕量級封裝因此在很多情況下Hibernate的性能比直接使用JDBC存取數據庫要低然而通過正確的方法和策略在使用Hibernate的時候還是可以非常接近直接使用JDBC時的效率的並且在有些情況下還有可能高於使用JDBC時的執行效率
在進行Hibernate性能優化時需要從以下幾個方面進行考慮
數據庫設計調整
HQL優化
API的正確使用(如根據不同的業務類型選用不同的集合及查詢API)
主配置參數(日志查詢緩存fetch_sizebatch_size等)
映射文件優化(ID生成策略二級緩存延遲加載關聯優化)
一級緩存的管理
針對二級緩存還有許多特有的策略
事務控制策略
數據的查詢性能往往是影響一個應用系統性能的主要因素對查詢性能的影響會涉及到系統軟件開發的各個階段例如良好的設計正確的查詢方法適當的緩存都有利於系統性能的提升
系統性能的提升設計到系統中的各個方面是一個相互平衡的過程需要在應用的各個階段都要考慮並且在開發運行的過程中要不斷地調整和優化才能逐步提升系統的性能
設計階段的考慮問題
一個良好的數據庫結構有利於系統性能的提升這裡所說的良好結構的數據庫並不單純是指滿足數據庫設計范式的數據庫結構這是因為按照數據庫范式所設計的數據庫只能說在結構上是最優的沒有冗余數據等問題但在生產過程中並不一定能獲得最佳的性能有時候適當地增加一些數據的冗余雖然增加了數據維護的難度但可以極大地簡化業務的查詢提高數據檢索的效率
在使用Java訪問數據庫的時候還存在另外一個問題就是面向對象的Java語言與關系型數據庫之間的矛盾在這兩者之間必然要涉及到一個相互轉化的問題對於這個問題是否能夠正確的處理也是影響系統性能的一個重要因素
綜合以上提出的各種問題在數據庫設計階段要綜合考慮以下三個方面的因素
Java建模
在建立Java對象模型的時候要考慮數據庫持久化的方便性所建立的Java對象模型應該可以很容易地被數據所存儲並且數據庫中表的結構也是越簡單越好
數據庫結構
在設計數據庫結構的時候也要考慮到是否可以很容易地用Java對象去表示這裡並不是簡單的一個表對應一個對象的直接轉換更重要的是轉換後的Java對象應該能夠描述出數據間的關系
所以在設計階段對於Java對象和數據庫結構要進行綜合考慮也就是可以從兩個方向進行考慮畢竟兩者之間不是一個時代的產物設計的結果應該在兩者之間達到一個平衡雖然不能每一方都達到最優但也不能造成有一方結構很差的情況就像裝水的木桶最矮的板子決定水桶的容量
業務需求
前面兩個因素都是純技術方面的考慮在設計的過程中更重要的是要緊扣業務需求這是因為任何的軟件系統都是以業務為中心的那麼對於系統的設計也不例外在設計的階段就應該考慮業務實現的方便性以及執行的效率一個良好的結構設計不但使業務功能的實現變得非常容易並且可以避免很多復雜的操作還可以達到提升系統性能的目的
設計階段是整個應用系統開發中的根基其對軟件的影響僅次於對系統需求的把握所以在設計階段應該對整個軟件系統有一個整體的考慮這裡所說的具體設計也只是設計階段中的很少的一部分綜合考慮多方面的因素才能達到更佳的性能
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29203.html