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