Ⅰ 求助大神 什麼叫資料庫的臟數據
LRU(LeastRecentlyUsed)演算法—最近最少使用原則。ORACLE採用LRU保持內存中的數據塊是最近使用的,使盡可能減少I/O,提高資料庫的性能;
LRU列表(LRUList)—是數據緩沖區的管理列表區。登記了數據緩沖區空閑塊和保持塊的地址和狀態標識(Free自由、Pinned保持、Drity臟);
臟列表(DIRTYList)—數據緩存區中被修改過的數據塊地址列表區。當數據緩沖區中的塊被修改,則被標志為「臟」塊。DBWR的主要任務是把「臟」數據緩沖塊寫入磁碟,使緩沖區保持「干凈」。
Ⅱ hibernate中什麼叫做臟數據
Hibernate臟數據檢查
何謂臟數據(Dirty Data)?
這里的"臟"可能有些誤解,臟數據並不是說非廢棄或者無用的數據,而是指一個數據對象所攜帶的信息發生了改變之後的狀態. 事務提交時,HIbernate會對Session中的PO進行檢測,判斷那些發生了變化,並裝發生變化的數據更新到資料庫中.
Hibernate臟數據的檢查一般策略大致有下面兩種:
數據對象監控
數據對象監控的實現方式,大體上是通過攔截器對數據對象的設值方法(setter)進行攔截,攔截器的實現可以藉助Dynamic Proxy或者CGlib實現.一旦數據對象的設置方法被調用(通常這也意味著數據對象的內容發生變化),則將其標志為"待更新"狀態,之後在資料庫操作時將其更新到對應的庫表.
數據版本比較
在持久層框架中維持數據對象的最近讀取版本,當數據提交時數據與些版本進行比對 時,如果發生變化則將期同步到資料庫相應的庫Hibernate採取的是第二種檢查策略
Hibernate數據緩存
Hibernate數據緩存是資料庫數據在內存中的臨時容器,它包含了庫表數據在內存中的臨時拷貝,位於資料庫與數據訪問層之間,緩存(Cache)往往是提升系統性能的關鍵因素.
數據緩存策略
ORM數據緩存應包含以下幾個層次的內容:
◆事務級緩存(Transaction Layer Cache)
◆應用級/進程級緩存(Application/Process Layer Cache)
◆分布式緩存(Cluster Layer Cache)
事務級緩存
這里的事務可能是一個資料庫事務,也可能是某個應用級事務.對於Hibernate而言,事務級緩存是基於Session生命周期實現的.每個Session會在內部維持一個數據緩存,此緩存隨著Session的創建(銷毀)而存在(消亡),因此也叫Session Level Cache(也稱內部緩存)
應用級緩存
此緩存可由多個事務(數據事務或者應用級事務)共享,事務之間的緩存共享策略與應用的事務隔離機制密切相關.在Hibernate中,應用級緩存在SessionFactory層實現,所有由此SessionFactory創建的Session實例共享此緩存,因此也稱為SessionFactory Level Cache.
分布式緩存
分布式緩存由多個應用級緩存實例組成集群,通過某種遠程機制(如RMI或JMS)實現各個緩存實例間的數據同步,任何一個實例的數據修改操作,將導致整個集群間的數據狀態同步.
需要注意的是,如果當前的應用與其他應用共享資料庫,也就是說,在當前應用過程中,其他應用可能同時更新資料庫,那麼緩存策略的制定就需要格外小心了,這種情況下,一般採取一些保守策略可能會更加穩妥.
Hibernate數據緩存
以Hibernate主義加以區分,Hibernate數據緩存可分為以下兩個層次:
◆內部緩存(Session Level,也稱一級緩存)
◆二級緩存(SessionFactory Level,也稱為二級緩存)
Hibernate中,緩存將在以下情況中發揮作用:
通過主鍵id載入數據.這包括根據id查詢數據的Session.load方法,以及Session.iterate等 批量查詢方法(Session.iterate進行查詢時,也是根據id在緩存 中查找數據,類似一個Session.load循環).
延遲載入
Session在內部維護了一個Map數據類型,些數據類型中保持了所有與當前Session相關聯對象. 內部緩存正常情況下由Hibernate自動維護,如果需要手動干預,我們可以通過以下方法完成:
◆Session.evict,將某個特定的對象從內部緩存中清除
◆Session.clear,清空內部緩存
二級緩存
在引入二級緩存時,應該考慮以下問題:
◆資料庫是否與其他應用共享
◆應用是否需要部署在集群環境中.
如果滿足以下條件,將納入緩存管理:
◆數據不會被第三方應用修改
◆數據大小(Data Size)在可接受的范圍之內.
◆數據更新頻率較低
◆同一數據可能會被系統頻繁引用.
◆非關鍵數據(關鍵數據,如金融帳戶數據)。
第三方緩存實現
Hibernate本身並未提供二級緩存的產品化實現,而是為眾多的第三方緩存組件提供了接入介面,較常用的第三方組件有:
1. JCS2. EHCache3. OSCache4. JBossCache5. SwarmCacheHibernate中啟用二級緩存,需要在hibernate.cfg.xml配置hibernate.cache.provider_class參數,之後,需要在映射文件中指定各個映射實體(以及collection)的緩存同步策略。Hibernate提供了一下4種內置的緩存同步策略:1. read-only只讀。對於不會發生改變的數據,可使用只讀型緩存。
2. nonstrict-read-write如果程序對並發訪問下的數據同步要求不是非常嚴格,且數據更新操作頻率較低,可以採用本選項,獲得較好的性能。
3. read-write嚴格可讀寫緩存。基於時間戳判定機制,實現了「read committed」事務隔離等級。可用於對數據同步要求嚴格的情況,但不支持分布式緩存。這也是實際應用中使用最多的同步策略。
別人的 希望對你有幫助
Ⅲ oracle中臟數據是什麼意思怎麼產生的
臟數據就是已經寫入到內存里,但是還沒有寫入到硬碟上的數據。一般當事物沒有提交的時候會產生,當事物提交以後,臟數據就會被寫進硬碟的數據塊,這時他就不叫臟數據了。
Ⅳ 在資料庫技術中,臟數據是什麼
臟數據在臨時更新(臟讀)中產生。事務A更新了某個數據項X,但是由於某種原因,事務A出現了問題,於是要把A回滾。但是在回滾之前,另一個事務B讀取了數據項X的值(A更新後),A回滾了事務,數據項恢復了原值。事務B讀取的就是數據項X的就是一個「臨時」的值,就是臟數據。
Ⅳ oracle中臟數據以及臟塊是怎麼來的,有啥區別
一,臟數據:
1,臟數據就是讀到database buffer cache做了修改但還沒有寫到datafile裡面的數據,只要沒有寫入數據文件,不管是否提交,都可以稱為臟數據。
2,另外一個表的外鍵,由於某些原因,這個外鍵關聯失效了,但是這個外鍵列沒有刪除,那麼這一列數據也可以稱為臟數據,就是沒有意思的或者冗餘的數據都可以叫做臟數據。
二,臟塊
存放臟數據的數據塊(data block)就可以稱為臟塊。
Ⅵ SQL中臟數據是啥意思
臟讀:一個用戶對一個資源做了修改,此時另外一個用戶正好讀取了這條被修改的記錄,然後,第一個用戶放棄修改,數據回到修改之前,這兩個不同的結果就是臟讀。
Ⅶ Hibernate的臟數據和臟對象是什麼(請詳細闡述)
臟數據並非廢棄或者無用的數據,而是指一個數據對象所攜帶的信息發生了改變之後的狀態,臟對象是屬性被修改了的對象。
一下樓上的!差不多就這個意思,導致臟數據呢其實就是 當一個數據正在被修改的時候,而另一個地方又來調用該數據,這個時候拿到的數據就是錯誤的,也就是臟數據,臟對象也是差不多同樣的意思!
Ⅷ 資料庫的數據臟讀是什麼意思,怎樣有效的避免數組臟讀,博客
臟讀就是指當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到資料庫中,這時,另外一個事務也訪問這個數據,然後使用了這個數據。因為這個數據是還沒有提交的數據,那麼另外一個事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。
1、如果都未更新你就讀取了,或者都更新完才讀取,這都不是臟讀,因為得到的是更新前的有效值,或完全更新後的值。
2、如果那個用戶更新一半你就讀取了,也就是說更新了A,正打算要更新B但尚未更新時,就讀取了,此時得到的就是臟數據。
避免臟讀的辦法就是採取事務,使得用戶正在更新時鎖定資料庫,阻止你讀取,直至全部完成才讓讀取。
(8)什麼是臟數據擴展閱讀:
在資料庫技術中,臟數據在臨時更新(臟讀)中產生。事務A更新了某個數據項X,但是由於某種原因,事務A出現了問題,於是要把A回滾。但是在回滾之前,另一個事務B讀取了數據項X的值(A更新後),A回滾了事務,數據項恢復了原值。事務B讀取的就是數據項X的就是一個「臨時」的值,就是臟數據。
Ⅸ 請問java中的臟數據是指什麼
「臟數據 」在很多地方都有出現比如:資料庫,MFC的文檔設置中。通常臟數據是表示一個數據已經被修改,但是還沒有保存或進一步的處理。比如在MFC的文檔中當你把一個文檔設置成由臟數據時假如你退出程序,就會提示你是否保存修改當數據。
臟數據 一般就是一個標志,數據被修改了。
Ⅹ 臟數據是什麼
臟數據(Dirty Read)是指源系統中的數據不在給定的范圍內或對於實際業務毫無意義,或是數據格式非法,以及在源系統中存在不規范的編碼和含糊的業務邏輯。
通俗的講,當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到資料庫中,這時,另外一個事務也訪問這個數據,然後使用了這個數據。
因為這個數據是還沒有提交的數據,那麼另外一個事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。
臟數據產生的影響:
1、丟失的修改:一個事物的更新覆蓋了另一個事物的更新。例如:事物A和B讀入同一數據並修改,B提交的結果破壞了A提交的結果,導致A的修改被丟失。
2、不可重復讀:一個事物兩次讀取同一個數據,兩次讀取的數據不一致。不可重復讀是指事物A讀取數據後,事物B執行更新操作,事務A 無法再現前一次讀取結果。
(1)事物A讀取某一數據後,事物B對其作了修改,當事物A再次讀取數據時,得到與前一次不同的值。
(2)事物A按一定的條件從資料庫中讀取了某些數據後,事物B刪除了其中部分記錄,當A再次以相同條件讀取時,發現某些記錄消失了。
3、臟讀:一個事物讀取了另一個事物未提交的數據。讀「臟」數據是指事物A修改某一數據,並將其寫回磁碟,事物B讀取同一數據後,A由於某種原因被撤銷,這時A已修改過的數據恢復原值,B讀到的數據就與資料庫中的數據不一致,則B讀到的數據為「臟」數據,即不正確的數據。
4、幻讀:一個事務按相同的查詢條件重新讀取以前檢索過的數據,卻發現其他事務插入了滿足其查詢條件的新數據,這種現象就稱為「幻讀」。