新聞中心
Hibernate性能優(yōu)化有很多方面,在此我們總結(jié)了Hibernate性能優(yōu)化的一些要點,如下:

創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站建設、做網(wǎng)站、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務廬陽,10年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:13518219792
1.盡量使用many-to-one,避免使用單項one-to-many
2.靈活使用單向one-to-many
3.不用一對一,使用多對一代替一對一
4.配置對象緩存,不使用集合緩存
5.一對多使用Bag 多對一使用Set
6.繼承使用顯示多態(tài) HQL:from object polymorphism="exlicit" 避免查處所有對象
7.消除大表,使用二級緩存對于上面這些,我們進行了詳細的講解。
one-to-many:使用inverse=false(default),對象的關(guān)聯(lián)關(guān)系是由parent對象來維護的,而inverse=true的情況下,一般用戶雙向多對多關(guān)聯(lián),由子對象維護關(guān)聯(lián)關(guān)系,增加子對象的時候需要顯示:child.setParent(child)為了提高性能,應該盡量使用雙向one-to-many inverse=true,在MVC結(jié)構(gòu)中的DAO接口中應該直接用Session持久化對象,避免通過關(guān)聯(lián)關(guān)系(這句話有點不理解),而在單項關(guān)系中正確使用二級緩存,則可以大幅提高以查詢?yōu)橹鞯膽谩?/p>
多對一性能問題比較少,但是要避免經(jīng)典N+1問題。
通過主鍵進行關(guān)聯(lián),相當于大表拆分小表。(這個是區(qū)分面向?qū)ο笤O計和面向過程設計的一個關(guān)鍵點)
list、bag、set的正確運用one-to-many:
◆使用list 需要維護Index Column字段,不能被用于雙向關(guān)聯(lián),而且必須使用inverse=false,需要謹慎使用在某些稀有場合(基本上是不予考慮使用)
◆bag/set在one-to-many中語義基本相同,推薦使用bag many-to-one:
◆bag和set不同,bag允許重復插入,建議使用set在龐大的集合分頁中應該使用session.createFilter session.createFilter(parent.getChildren(),""),setFirstResult(0),setMaxResult(10))避免N+1 參考(http://www.javaeye.com/post/266972)
在多對一的情況下,查詢child對象,當在頁面上顯示每個子類的父類對象的時候會導致N+1次查詢,需要采用下面的方法避免:many-to-one fetch="join|select"(該方法可能有問題)
inverse=true 無法維護集合緩存(還不是很理解集合緩存和對象緩存)
OLTP類型的web應用,可以群集水平擴展,不可避免的出現(xiàn)數(shù)據(jù)庫瓶頸框架能降低訪問數(shù)據(jù)庫的壓力,采用緩存是衡量一個框架是否優(yōu)秀的重要標準,從緩存方面看Hibernate
◆對象緩存,細顆粒度,是針對表的級別,透明化訪問,因為有不改變代碼的好處,所以是ORM提高性能的法寶
◆Hibernate是目前ORM框架中緩存性能***的框架
◆查詢緩存
***Robbin還針對大家經(jīng)常出現(xiàn)的Hibernate vs iBatis的討論進行了一個總結(jié):
對于OLTP應用,使用ORM框架 而OLEB應用(不確定是什么應用)***采用JDBC或者其他方法處理Hibernate傾向于細顆粒度設計,面向?qū)ο?,將大表拆分為多個小表,消除冗余字段,通過二級緩存提升性能。
iBatis傾向于粗顆粒度設計,面向關(guān)系,盡量把表合并,通過Column冗余,消除關(guān)聯(lián)關(guān)系,但是iBatis沒有有效的緩存手段。
可以說我們的Hibernate性能優(yōu)化總結(jié)對于使用Hibernate的開發(fā)人員有著很重要的點撥作用。
文章名稱:淺述Hibernate性能優(yōu)化
URL網(wǎng)址:http://m.fisionsoft.com.cn/article/cdcdiso.html


咨詢
建站咨詢
