Hibernate學(xué)習(xí)心得--性能優(yōu)化
作者:Flyingis
在使用Hibernate進(jìn)行查詢的時(shí)候大家都會(huì)用到Hibernate緩存,其中Session緩存即一塊內(nèi)存空間,存放了相互關(guān)聯(lián)的Java對(duì)象,這些位于Session緩存中的對(duì)象就是持久化對(duì)象,Session根據(jù)持久化對(duì)象的狀態(tài)變化來(lái)同步更新數(shù)據(jù)庫(kù)。這個(gè)Session緩存是Hibernate的一級(jí)緩存。此外,SessionFactory有一個(gè)內(nèi)置緩存和一個(gè)外置緩存,即Hibernate的第二級(jí)緩存。而Hibernate正是由于這些緩存的存在,才使得其數(shù)據(jù)庫(kù)操作效率提高,就是說,在提供了方便易操作的操作數(shù)據(jù)庫(kù)數(shù)據(jù)的方式的同時(shí)保證了工作效率,但是不能因此而免去后顧之憂,需要在設(shè)計(jì)業(yè)務(wù)邏輯層的時(shí)候考慮使用最優(yōu)的架構(gòu),節(jié)省有效的系統(tǒng)資源。在查詢方面,Hibernate主要從以下幾個(gè)方面來(lái)優(yōu)化查詢性能:
1.降低訪問數(shù)據(jù)庫(kù)的頻率,減少select語(yǔ)句的數(shù)目。實(shí)現(xiàn)手段包括:
使用迫切左外連接或迫切內(nèi)連接檢索策略。
對(duì)延遲檢索或立即檢索策略設(shè)置批量檢索數(shù)目。
使用查詢緩存。
2.避免多余加載程序不需要訪問的數(shù)據(jù)。實(shí)現(xiàn)手段包括:
使用延遲檢索策略。
使用集合過濾。
3.避免報(bào)表查詢數(shù)據(jù)占用緩存。實(shí)現(xiàn)手段為利用投影查詢功能,查詢出實(shí)體的部分屬性。
4.減少select語(yǔ)句中的字段,從而降低訪問數(shù)據(jù)庫(kù)的數(shù)據(jù)量。實(shí)現(xiàn)手段為利用Query的iterate()方法。
在插入和更新數(shù)據(jù)時(shí),要控制insert和update語(yǔ)句,合理設(shè)置映射屬性來(lái)保證插入更新的性能,例如,當(dāng)表中包含許多字段時(shí),建議把dynamic-update屬性和dynamic-update屬性都設(shè)為true,這樣在insert和update語(yǔ)句中就只包含需要插入或更新的字段,這可以節(jié)省數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句的時(shí)間,從而提高應(yīng)用的運(yùn)行性能。
在使用Hibernate進(jìn)行查詢的時(shí)候大家都會(huì)用到Hibernate緩存,其中Session緩存即一塊內(nèi)存空間,存放了相互關(guān)聯(lián)的Java對(duì)象,這些位于Session緩存中的對(duì)象就是持久化對(duì)象,Session根據(jù)持久化對(duì)象的狀態(tài)變化來(lái)同步更新數(shù)據(jù)庫(kù)。這個(gè)Session緩存是Hibernate的一級(jí)緩存。此外,SessionFactory有一個(gè)內(nèi)置緩存和一個(gè)外置緩存,即Hibernate的第二級(jí)緩存。而Hibernate正是由于這些緩存的存在,才使得其數(shù)據(jù)庫(kù)操作效率提高,就是說,在提供了方便易操作的操作數(shù)據(jù)庫(kù)數(shù)據(jù)的方式的同時(shí)保證了工作效率,但是不能因此而免去后顧之憂,需要在設(shè)計(jì)業(yè)務(wù)邏輯層的時(shí)候考慮使用最優(yōu)的架構(gòu),節(jié)省有效的系統(tǒng)資源。在查詢方面,Hibernate主要從以下幾個(gè)方面來(lái)優(yōu)化查詢性能:
1.降低訪問數(shù)據(jù)庫(kù)的頻率,減少select語(yǔ)句的數(shù)目。實(shí)現(xiàn)手段包括:
使用迫切左外連接或迫切內(nèi)連接檢索策略。
對(duì)延遲檢索或立即檢索策略設(shè)置批量檢索數(shù)目。
使用查詢緩存。
2.避免多余加載程序不需要訪問的數(shù)據(jù)。實(shí)現(xiàn)手段包括:
使用延遲檢索策略。
使用集合過濾。
3.避免報(bào)表查詢數(shù)據(jù)占用緩存。實(shí)現(xiàn)手段為利用投影查詢功能,查詢出實(shí)體的部分屬性。
4.減少select語(yǔ)句中的字段,從而降低訪問數(shù)據(jù)庫(kù)的數(shù)據(jù)量。實(shí)現(xiàn)手段為利用Query的iterate()方法。
在插入和更新數(shù)據(jù)時(shí),要控制insert和update語(yǔ)句,合理設(shè)置映射屬性來(lái)保證插入更新的性能,例如,當(dāng)表中包含許多字段時(shí),建議把dynamic-update屬性和dynamic-update屬性都設(shè)為true,這樣在insert和update語(yǔ)句中就只包含需要插入或更新的字段,這可以節(jié)省數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句的時(shí)間,從而提高應(yīng)用的運(yùn)行性能。
還有什么其它的提升性能的方式希望和大家一起討論。
posted on 2005-11-15 10:22 Flyingis 閱讀(6179) 評(píng)論(3) 編輯 收藏 所屬分類: Hibernate