日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Hibernate臟數(shù)據(jù)與數(shù)據(jù)緩存

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

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

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

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

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

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

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

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

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

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

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

ORM數(shù)據(jù)緩存應包含以下幾個層次的內容:

◆事務級緩存(Transaction Layer Cache)

◆應用級/進程級緩存(Application/Process Layer Cache)

◆分布式緩存(Cluster Layer Cache)

事務級緩存

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

應用級緩存

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

分布式緩存

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

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

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

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

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

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

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

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

延遲加載

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

◆Session.evict,將某個特定的對象從內部緩存中清除

◆Session.clear,清空內部緩存

二級緩存

在引入二級緩存時,應該考慮以下問題:

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

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

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

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

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

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

◆同一數(shù)據(jù)可能會被系統(tǒng)頻繁引用.
 
◆非關鍵數(shù)據(jù)(關鍵數(shù)據(jù),如金融帳戶數(shù)據(jù))。

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

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

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

2. nonstrict-read-write如果程序對并發(fā)訪問下的數(shù)據(jù)同步要求不是非常嚴格,且數(shù)據(jù)更新操作頻率較低,可以采用本選項,獲得較好的性能。

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


本文名稱:Hibernate臟數(shù)據(jù)與數(shù)據(jù)緩存
網(wǎng)站地址:http://m.5511xx.com/article/ccepdpp.html