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

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

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

    大夢想家

    5年開發(fā)工程師,2年實施經(jīng)理,X年售前顧問,......
    數(shù)據(jù)加載中……
    Hibernate Iterator JCS分析

    JCS是一個對象Cache,它可以把Java對象緩存起來,提高那些訪問頻率很高的Java對象的存取效率。JCS是按照對象的唯一標示來存取對象的,比如說可以按照對象的hashCode來存取。

    對于Hibernate來說,可以利用JCS來緩存查詢結果,這樣當下次訪問同樣的數(shù)據(jù),就無須去數(shù)據(jù)庫取,直接從JCS中取出來,加快了查詢速度。

    當Hibernate使用List或者Iterator方式來第一次讀取數(shù)據(jù)的時候,JCS是空的,此時不管是List方式還是Iterator方式都會往JCS里面填充查詢出來的持久對象,例如:

    select c from Cat as c 

    select c.id, c.name  from Cat as c

    這種HQL語句不構造PO,因此不會去填充JCS。

    好了,現(xiàn)在JCS里面填好了數(shù)據(jù),但是該怎么取呢?上面我說過是按照對象的唯一標示來存取的,而對于PO持久對象來說,唯一標示就是主鍵,因此Hibernate首先必須獲得主鍵列表,然后根據(jù)主鍵列表挨個判斷,看這個持久對象究竟是在JCS里面還是在數(shù)據(jù)庫里面,如果在JCS里面,那么按照主鍵取,如果在數(shù)據(jù)庫,那么發(fā)送sql取。

    現(xiàn)在我們來分析為什么Iterator可以使用JCS,而List不能。上面說了,用JCS之前,要先獲得持久對象的主鍵,才能去JCS里面取持久對象,而我們怎么才能獲得主鍵列表呢?必須去數(shù)據(jù)庫中取得,這一步是沒有辦法緩沖的。

    Hibernate Iterator的查詢本身是分為兩步的:

    ==> select id from cat ==> select * from cat where id = ?==> select * from cat where id = ?...==> select * from cat where id = ?

    第一步,去數(shù)據(jù)庫中取主鍵列表,第二步,按照主鍵一個一個取數(shù)據(jù)。當然了,我們現(xiàn)在可以看出來,Iterator方式下如果不用JCS的話,那么從數(shù)據(jù)庫中取出n條記錄就需要n+1次sql查詢,這是非常可怕的事情,因此如果在沒有使用JCS的情況下,你又必須一次去取大量數(shù)據(jù),應該避免使用Iterator。

    而Iterator的第一次sql是取主鍵列表,這個時間消耗是非常少的,如果使用了JCS,那么每次查詢?nèi)匀灰豢杀苊獾娜グl(fā)送一次sql: select id from cat 去取主鍵列表,然后呢? 然后Iterator就不會那么傻了,他會先到JCS里面去看看,按照主鍵去找持久對象,如果有了,直接拿出來用,如果沒有,那么只好去數(shù)據(jù)庫中取得,然后再把它填到JCS里面去。

    因此可以看出來,JCS有點類似一個內(nèi)存中的簡單對象數(shù)據(jù)庫, Iterator的第一次sql取主鍵列表是必須要到數(shù)據(jù)庫里面取的,取得了主鍵這把鑰匙以后,Iterator會首先嘗試開JCS這把鎖,打得開就直接進去,如果打不開,就只好去開數(shù)據(jù)庫這把鎖了。

    而Hibernate List方式是JDBC的簡單封裝,一次sql就把所有的數(shù)據(jù)都取出來了,它不會像Iterator那樣先取主鍵,然后再取數(shù)據(jù),因此List無法利用JCS。不過List也可以把從數(shù)據(jù)庫中取出的數(shù)據(jù)填充到JCS里面去。

    最佳的方式:第一次訪問使用List,快速填充JCS,以后訪問采用Iterator,充分利用JCS。

    mikeho write:

    那JCS是如何和Database保持同步的?

    robbin write:

    jcs.default.elementattributes.MaxLifeSeconds=240(最大緩沖時間)

    超時做作廢,另外你在程序里面也可以clear JCS cache




    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=261240



    客戶虐我千百遍,我待客戶如初戀!

    posted on 2007-05-29 21:44 阿南 閱讀(403) 評論(0)  編輯  收藏 所屬分類: Cool文存檔


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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 亚洲偷自精品三十六区| 91嫩草私人成人亚洲影院| 亚洲精品无码av片| 91频在线观看免费大全| 亚洲国产成人91精品| 久视频精品免费观看99| 亚洲第一成年人网站| 57pao一国产成视频永久免费| 久久亚洲精品国产精品| 最近高清中文字幕免费| 亚洲一级免费视频| 99视频在线精品免费观看6| 亚洲成a人无码亚洲成www牛牛| 国产大片51精品免费观看| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 99久热只有精品视频免费看| 亚洲国产综合专区在线电影| 51在线视频免费观看视频| 91亚洲视频在线观看| 免费看的成人yellow视频| 苍井空亚洲精品AA片在线播放| www国产亚洲精品久久久| 一级毛片免费毛片毛片| 亚洲精品午夜国产VA久久成人| 国产精品99久久免费观看| 亚洲三级中文字幕| 日本免费网站在线观看| 成人福利在线观看免费视频| 久久精品国产亚洲麻豆| 和日本免费不卡在线v| 无码的免费不卡毛片视频| 亚洲av色福利天堂| 毛片免费全部播放无码| 亚洲av永久无码| 中文字幕精品亚洲无线码一区 | 久久久久亚洲精品无码网址| 免费在线中文日本| 亚洲欧美国产欧美色欲| 浮力影院亚洲国产第一页| av无码免费一区二区三区| 日本一区二区在线免费观看|