免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
hibernate 臟數(shù)據(jù)與緩存 延遲加載
    本文向您介紹Hibernate臟數(shù)據(jù)及其檢查方式,并對Hibernate數(shù)據(jù)緩存及緩存的實(shí)現(xiàn)方式做出介紹。

    Hibernate臟數(shù)據(jù)檢查

    何謂臟數(shù)據(jù)(Dirty Data)?

    這里的"臟"可能有些誤解,臟數(shù)據(jù)并不是說非廢棄或者無用的數(shù)據(jù),而是指一個(gè)數(shù)據(jù)對象所攜帶的信息發(fā)生了改變之后的狀態(tài). 事務(wù)提交時(shí),HIbernate會對Session中的PO進(jìn)行檢測,判斷那些發(fā)生了變化,并裝發(fā)生變化的數(shù)據(jù)更新到數(shù)據(jù)庫中.

    Hibernate臟數(shù)據(jù)的檢查一般策略大致有下面兩種:

    數(shù)據(jù)對象監(jiān)控

    數(shù)據(jù)對象監(jiān)控的實(shí)現(xiàn)方式,大體上是通過攔截器對數(shù)據(jù)對象的設(shè)值方法(setter)進(jìn)行攔截,攔截器的實(shí)現(xiàn)可以借助Dynamic Proxy或者CGlib實(shí)現(xiàn).一旦數(shù)據(jù)對象的設(shè)置方法被調(diào)用(通常這也意味著數(shù)據(jù)對象的內(nèi)容發(fā)生變化),則將其標(biāo)志為"待更新"狀態(tài),之后在數(shù)據(jù)庫操作時(shí)將其更新到對應(yīng)的庫表.

    數(shù)據(jù)版本比較

    在持久層框架中維持?jǐn)?shù)據(jù)對象的最近讀取版本,當(dāng)數(shù)據(jù)提交時(shí)數(shù)據(jù)與些版本進(jìn)行比對 時(shí),如果發(fā)生變化則將期同步到數(shù)據(jù)庫相應(yīng)的庫Hibernate采取的是第二種檢查策略

    Hibernate數(shù)據(jù)緩存

    Hibernate數(shù)據(jù)緩存是數(shù)據(jù)庫數(shù)據(jù)在內(nèi)存中的臨時(shí)容器,它包含了庫表數(shù)據(jù)在內(nèi)存中的臨時(shí)拷貝,位于數(shù)據(jù)庫與數(shù)據(jù)訪問層之間,緩存(Cache)往往是提升系統(tǒng)性能的關(guān)鍵因素.

    數(shù)據(jù)緩存策略

    ORM數(shù)據(jù)緩存應(yīng)包含以下幾個(gè)層次的內(nèi)容:

    ◆事務(wù)級緩存(Transaction Layer Cache)

    ◆應(yīng)用級/進(jìn)程級緩存(Application/Process Layer Cache)

    ◆分布式緩存(Cluster Layer Cache)

    事務(wù)級緩存

    這里的事務(wù)可能是一個(gè)數(shù)據(jù)庫事務(wù),也可能是某個(gè)應(yīng)用級事務(wù).對于Hibernate而言,事務(wù)級緩存是基于Session生命周期實(shí)現(xiàn)的.每個(gè)Session會在內(nèi)部維持一個(gè)數(shù)據(jù)緩存,此緩存隨著Session的創(chuàng)建(銷毀)而存在(消亡),因此也叫Session Level Cache(也稱內(nèi)部緩存)

    應(yīng)用級緩存

    此緩存可由多個(gè)事務(wù)(數(shù)據(jù)事務(wù)或者應(yīng)用級事務(wù))共享,事務(wù)之間的緩存共享策略與應(yīng)用的事務(wù)隔離機(jī)制密切相關(guān).在Hibernate中,應(yīng)用級緩存在SessionFactory層實(shí)現(xiàn),所有由此SessionFactory創(chuàng)建的Session實(shí)例共享此緩存,因此也稱為SessionFactory Level Cache.

    分布式緩存

    分布式緩存由多個(gè)應(yīng)用級緩存實(shí)例組成集群,通過某種遠(yuǎn)程機(jī)制(如RMI或JMS)實(shí)現(xiàn)各個(gè)緩存實(shí)例間的數(shù)據(jù)同步,任何一個(gè)實(shí)例的數(shù)據(jù)修改操作,將導(dǎo)致整個(gè)集群間的數(shù)據(jù)狀態(tài)同步.

    需要注意的是,如果當(dāng)前的應(yīng)用與其他應(yīng)用共享數(shù)據(jù)庫,也就是說,在當(dāng)前應(yīng)用過程中,其他應(yīng)用可能同時(shí)更新數(shù)據(jù)庫,那么緩存策略的制定就需要格外小心了,這種情況下,一般采取一些保守策略可能會更加穩(wěn)妥.

    Hibernate數(shù)據(jù)緩存

    以Hibernate主義加以區(qū)分,Hibernate數(shù)據(jù)緩存可分為以下兩個(gè)層次:

    ◆內(nèi)部緩存(Session Level,也稱一級緩存)

    ◆二級緩存(SessionFactory Level,也稱為二級緩存)

    Hibernate中,緩存將在以下情況中發(fā)揮作用:

    通過主鍵id加載數(shù)據(jù).這包括根據(jù)id查詢數(shù)據(jù)的Session.load方法,以及Session.iterate等 批量查詢方法(Session.iterate進(jìn)行查詢時(shí),也是根據(jù)id在緩存 中查找數(shù)據(jù),類似一個(gè)Session.load循環(huán)).

    延遲加載

    Session在內(nèi)部維護(hù)了一個(gè)Map數(shù)據(jù)類型,些數(shù)據(jù)類型中保持了所有與當(dāng)前Session相關(guān)聯(lián)對象. 內(nèi)部緩存正常情況下由Hibernate自動維護(hù),如果需要手動干預(yù),我們可以通過以下方法完成:

    ◆Session.evict,將某個(gè)特定的對象從內(nèi)部緩存中清除

    ◆Session.clear,清空內(nèi)部緩存

    二級緩存

    在引入二級緩存時(shí),應(yīng)該考慮以下問題:

    ◆數(shù)據(jù)庫是否與其他應(yīng)用共享

    ◆應(yīng)用是否需要部署在集群環(huán)境中.

    如果滿足以下條件,將納入緩存管理:

    ◆數(shù)據(jù)不會被第三方應(yīng)用修改

    ◆數(shù)據(jù)大小(Data Size)在可接受的范圍之內(nèi).

    ◆數(shù)據(jù)更新頻率較低

    ◆同一數(shù)據(jù)可能會被系統(tǒng)頻繁引用.

    ◆非關(guān)鍵數(shù)據(jù)(關(guān)鍵數(shù)據(jù),如金融帳戶數(shù)據(jù))。

    第三方緩存實(shí)現(xiàn)

    Hibernate本身并未提供二級緩存的產(chǎn)品化實(shí)現(xiàn),而是為眾多的第三方緩存組件提供了接入接口,較常用的第三方組件有:

    1. JCS2. EHCache3. OSCache4. JBossCache5. SwarmCacheHibernate中啟用二級緩存,需要在hibernate.cfg.xml配置hibernate.cache.provider_class參數(shù),之后,需要在映射文件中指定各個(gè)映射實(shí)體(以及collection)的緩存同步策略。Hibernate提供了一下4種內(nèi)置的緩存同步策略:1. read-only只讀。對于不會發(fā)生改變的數(shù)據(jù),可使用只讀型緩存。

    2. nonstrict-read-write如果程序?qū)Σl(fā)訪問下的數(shù)據(jù)同步要求不是非常嚴(yán)格,且數(shù)據(jù)更新操作頻率較低,可以采用本選項(xiàng),獲得較好的性能。

    3. read-write嚴(yán)格可讀寫緩存?;跁r(shí)間戳判定機(jī)制,實(shí)現(xiàn)了“read committed”事務(wù)隔離等級??捎糜趯?shù)據(jù)同步要求嚴(yán)格的情況,但不支持分布式緩存。這也是實(shí)際應(yīng)用中使用最多的同步策略。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
hibernate的工作原理以及為什么要使用hibernate
Java教程分享Java面試題之Hibernate
Hibernate緩存機(jī)制(十)
hibernate3入門
培訓(xùn)項(xiàng)目總結(jié)java框架
Hibernate的緩存機(jī)制介紹
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服