<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    pingpang

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      21 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

           第一次去面試的時候人家人如何在SSH框架下,如何進行Hibernate的優(yōu)化,當時自己只是看到這些根本就沒有系統(tǒng)的總結(jié)這些東西,今天終于找到一個時間來解決一下自己面試的這個問題了。

    Hibernate自述

               我天生效率比較低,在普遍情況下,需要將執(zhí)行轉(zhuǎn)換為SQL語句的Hibernate低于直接JDBC存取。但是在經(jīng)過比較好的性能優(yōu)化之后,我的性能還是讓人相當滿意的,特別是應(yīng)用二級緩存之后,甚至可以獲得比較不使用緩存的JDBC更好的性能。

    優(yōu)化總結(jié)

               要想優(yōu)化Hibernate,我們必須知道應(yīng)該從什么地方進行優(yōu)化,從什么地方入手。Hibernate的優(yōu)化方向:數(shù)據(jù)庫設(shè)計、HQL優(yōu)化、緩存、主配置、延遲加載、方法選用、集合選用、事物控制、批量操作

     

    具體分析

    第一點:數(shù)據(jù)庫設(shè)計

           前邊博客介紹過 數(shù)據(jù)庫設(shè)計,今天我們還從這開始,表的設(shè)計就是建樓的基礎(chǔ),如何讓基礎(chǔ)簡潔而結(jié)實這是最重要的。

    優(yōu)化策略:

    1.   建索引

    2.   減少表之間的關(guān)聯(lián)

    3.   簡化查詢字段,沒用的字段不要,已經(jīng)對返回結(jié)果的控制,盡量返回少量數(shù)據(jù)

    4.   適當?shù)娜哂鄶?shù)據(jù),不過分最求高范式

    第二點:HQL優(yōu)化


                                                (HQL知識圖)

         假如想好好了解一下的建議看一下這篇博客HQL詳細使用,我個人認為寫的還可以,知識總結(jié)的很細致。

    總結(jié):

    1.   實體查詢:可以使用sql語句查詢

    2.   實體的更新和刪除:hibernate3中直接提供更加靈活更加效率的解決方法

    3.   屬性查詢:動態(tài)構(gòu)造實例對象,對結(jié)果集進行封裝

    4.   分組與排序:

    A.   Order by子句

    B.   Group by子句與統(tǒng)計查詢

    C.   優(yōu)化統(tǒng)計查詢:內(nèi)連接,外連接

    5.   參數(shù)綁定:和jdbc一樣,對hibernate的參數(shù)綁定提供了豐富的支持。

    第三點:緩存

    運行機制:

    介于應(yīng)用程序和物理數(shù)據(jù)源之間,其作用是為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的頻數(shù),從而提高運行性能。

    緩存被廣泛應(yīng)用的用于優(yōu)化數(shù)據(jù)庫。當一些數(shù)據(jù)被從數(shù)據(jù)庫中讀取出來的時候,我們可以把它們放到緩存里。這樣我們可以再次使用的時候直接從緩存中取出來,這樣我們的效率就提高了很多。

    控制范圍:

    一級緩存是session對象的生命周期通常對應(yīng)的一個數(shù)據(jù)庫事務(wù)或者一個應(yīng)用事務(wù),它是事務(wù)范圍內(nèi)的緩存

    二級緩存是一個可插拔的緩存插件,它是由SessionFactory負責管理。由于SessionFactory對象的生命周期和應(yīng)用程序的整個過程對應(yīng),所以二級緩存是進城范圍或者集群范圍內(nèi)的緩存。用于初始化很少更改的數(shù)據(jù)、不重要的數(shù)據(jù),不會并發(fā)訪問的數(shù)據(jù)。

     

    Hibernate緩存的一些問題和建議:hibernate的緩存

    第四點:捉取策略

    1.  捉取優(yōu)化:Hibernate在關(guān)聯(lián)關(guān)系之間進行導航,充分利用Hibernate提供的技術(shù)

    2.  如何捉取

    立即捉取:當捉取宿主對象時,同時捉取其相關(guān)對象和關(guān)聯(lián)集以及屬性

    延遲加載:當捉宿主對象時,并不捉取其關(guān)聯(lián)對象,而是當對其對象進行調(diào)用時才加載。

    3.  捉取粒度:設(shè)置捉取個數(shù)

    第五點:批量數(shù)據(jù)處理(修改和刪除)

    在Hibernate2中,如果需要對任何數(shù)據(jù)進行修改和刪除操作都需要先執(zhí)行查詢操作,在得到數(shù)據(jù)后才進行修改和刪除。

    1.  不適用Hibernate API而是直接使用JDBC  API來做原生態(tài)SQL語句進行查詢,這種方法比較好,相對來說較快。

    2.  運用存儲過程

    3.  一定量范圍內(nèi)可以使用hibernate API,但是特大數(shù)據(jù)量不行。

    第六點:結(jié)果集的使用:

         結(jié)果集的使用:list()和iterator()區(qū)別

    查詢方式:

    list只能利用查詢緩存(但在交易系統(tǒng)中查詢緩存作用不大),無法利用二級緩存中的單個實體,但是list查出的對象會寫入二級緩存,但它一般只生成較少的sql語句,很多情況就是一條。

    iterator則利用二級緩存,對于一條查詢語句,它會先從數(shù)據(jù)庫中找到所有符合條件的記錄的ID,在通過ID去緩存找,對于緩存中沒有的記錄,在構(gòu)造語句從數(shù)據(jù)庫查出,第一次的執(zhí)行會產(chǎn)生N+1條SQL語句。

    產(chǎn)生結(jié)果:

    用list可能會溢出

    通過Iterator,配合緩存管理API,在海量數(shù)據(jù)查詢中可以很好的解決內(nèi)存問題。

    綜合考慮

    一般List會填充二級緩存,卻不能利用二級緩存,而Iterator可以讀二級緩存,然而無法命中的話,效率很低效。一般處理方法,就是第一次查詢使用list,隨后使用iterator查詢。

    總結(jié)

     

    Hibernate優(yōu)化總結(jié)還有主配置、方法選用、事物控制沒有涉及到,因為它們相對來說這些方面比較簡單,但是還是很重要的。

    在實施一個項目的時候我們沒有必要想這些問題,做項目的時候第一步運行起來,第二步優(yōu)化一下。在很多小型項目中第二步一般都不會去做,所以說我們做工程的時候還是要牢記運行出來,假如自己作為研究或者這個問題比較嚴重的話我們才考慮優(yōu)化。

    Hibernate調(diào)優(yōu)方面沒有最有只有更優(yōu),讓我們不斷積極找到優(yōu)化的方法,來優(yōu)化我們的程序,來優(yōu)化我們自己。

    關(guān)于Hibernate優(yōu)化方面,希望大家留下寶貴的意見,多對交流!

    posted on 2012-07-15 18:04 往事隨風 閱讀(885) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 免费观看日本污污ww网站一区| 免费的一级片网站| 亚洲情XO亚洲色XO无码| 免费精品国产自产拍在线观看| 成年人视频在线观看免费| 国产精品亚洲自在线播放页码| 99在线视频免费观看视频 | 99久久99这里只有免费费精品| 久久精品国产亚洲AV无码麻豆| 69免费视频大片| 亚洲国产日韩在线成人蜜芽| 成年在线观看网站免费| 亚洲中文精品久久久久久不卡| 免费黄网在线观看| 一级做a爰性色毛片免费| 久久99国产亚洲高清观看首页| 久久免费动漫品精老司机| 亚洲精品国产手机| 性感美女视频在线观看免费精品| 男男gvh肉在线观看免费| 国产亚洲精品无码拍拍拍色欲| 日本免费高清视频| 亚洲国产精品久久久久秋霞影院| 久久电影网午夜鲁丝片免费| 免费无毒a网站在线观看| 亚洲精品国产品国语在线| 久久国产乱子伦免费精品| 亚洲无人区码一二三码区别图片| 免费少妇a级毛片人成网| 日本卡1卡2卡三卡免费| 亚洲一区AV无码少妇电影| 亚洲伊人久久综合影院| 91成人在线免费视频| 国产亚洲漂亮白嫩美女在线| 亚洲综合精品香蕉久久网| h视频在线观看免费完整版| 欧美亚洲精品一区二区| 亚洲AV无码国产精品麻豆天美| 成年丰满熟妇午夜免费视频| 黄桃AV无码免费一区二区三区| 亚洲日日做天天做日日谢|