A. 什麼是資料庫一致性
資料庫一致性(Database
Consistency)
是指事務執行的結果必須是使資料庫從一個一致性狀態變到另一個一致性狀態。
保證資料庫一致性是指當事務完成時,必須使所有數據都具有一致的狀態。在關系型資料庫中,所有的規則必須應用到事務的修改上,以便維護所有數據的完整性。
保證資料庫的一致性是資料庫管理系統的一項功能.比如有兩個表(員工\職位),員工表中有員工代碼、姓名、職位代碼等屬性,職位表中有職位代碼、職位名稱、職位等級等屬性。你在其中員工表中進行了插入操作,你插入了一個新員工的信息,而這個新員工的職位是公司新創建的一個職位。如果沒有一致性的保證,就會出現有這么一個員工,但是不知道他到底擔當什麼職責!這個只是它的一個小小方面。
讀一致性也是資料庫一致性的一個重要方面,在實際中,我們會遇到這種情況:我們對一個表中的某些數據進行了更新操作,,但是還沒有進行提交,這時另外一個用戶讀取表中數據.這個時候就出現了讀一致性的問題:到底是讀什麼時候的數據呢?是更新前的還是更新後的?在DBMS中設有臨時表,它用來保存修改前的值,在沒有進行提交前讀取數據,會讀取臨時表中的數據,這樣一來就保證了數據是一致的.(當前用戶看到的是更新後的值)
但是還有一種情況:用戶user1對表進行了更新操作,用戶user2在user1還沒有進行提交前讀表中數據,而且是大批量的讀取(打個比方:耗時3分鍾)而在這3分鍾內user1進行了提交操作,那又會產生什麼影響呢?這個時候怎麼保證讀寫一致性呢?這個時候DBMS就要保證有足夠大的臨時表來存放修改前的數值,,以保證user2讀取的數據是修改前的一致數據.然後下次再讀取時候就是更新後的數據了.
B. 如何保持資料庫的並發性和一致性
其實你這個題目真的很大,都可以做專題來搞了。
下面是我找的2個鏈接,希望對你有幫助。
http://www.ibm.com/developerworks/cn/java/j-ts5/
http://ke..com/view/997369.htm?fr=ala0_1
C. 秒殺過程中怎麼保證redis緩存和資料庫的一致性
如果要「保證」數據的安全性,那麼會帶來開銷的進一步提升,以至於使用redis帶來的性能優勢都會喪失。正確的做法是區分不同的業務,使得並不需要「保證」數據一致性的場合,可以使用redis優化。而敏感的場合依然使用mysql。
D. SQLServer 資料庫中如何保持數據一致性
為了在恰當的時候採用快照復制,資料庫管理員首先需要知道快照復制的特點。快照復制是指將數據以特定時刻的瞬時狀態轉發,而不堅實對數據的更新。在發生同步時,將生成完整的快照並將其發送到訂閱伺服器。簡單的說,快照復制就是每隔一段時間發生數據同步操作。而不是發布伺服器的數據一有更新就出發這個快照復制。顯然這種快照復制的數據同步性稍微差一點。在訂閱伺服器與發布伺服器之間有一段時間會存在數據不一致的情況。但是這可以在很大程度上提高訂閱伺服器與發布伺服器的性能。這就好像汽車運輸。採用快照復制的話可以將一個集裝箱裝滿後在送貨,而不是有多少送多少。掌握這個資料庫復快照復制的具體特點之後,資料庫管理員就可以來考慮在什麼情況下,採用快照復制更加的合理。 一、數據更改比較少的系統中。 快照復制與其他復制相比最主要的缺陷就是資料庫中的數據無法及時同發布伺服器一致。為此如果發布伺服器中的內容很少更改的話,顯然此時採用快照復制是比較合理的。此時採用快照復制的話,不僅數據一致性延遲的負面效應會越來越不明顯,同時可以提高發布伺服器與訂閱伺服器的性能。如在實際工作中,經常會遇到這樣的客戶。如一家企業在各地都有辦事處或者銷售機構,就像肯德基一樣,各地的產品價格基本上都是相同的,不怎麼會更改。即使更改的話,各地也是統一調整。由於此時產品價格表更改的比較少,那麼在企業總部的資料庫服務與各地的訂閱伺服器之間,採用快照復制的形式就會比較合適。其實類似的情況有很多。如不少的服裝企業,像李寧、耐克等等,他們不僅自己生產,而且在各地又有自己的銷售辦事處。在價格方面也是統一的。在這種情況下,採用快照復制往往能夠提高資料庫復制的性能,同時又不影響其使用。 二、在某個時段內會出現數據大量的更改。 需要補充說明的一點是,上面說到的數據不怎麼發生更改,指的是數據的延續性更改。如在一年中,每天或者每個小時更改的數據都比較平均。此時採用快照復制不怎麼合適。但是如果數據的更改集中在一個時段內。而其他時間中資料庫的內容不會有多大的更改。此時採用快照復制是可行的。如一些決策性系統,往往在起初導入數據的時候,需要進行大量的更改。而等到數據導入完畢,在大家對數據進行分析時,則資料庫中的內容基本上保持不變。在這種情況下,筆者認為只要數據的更新集中在一個固定的時段,此時採用快照復制仍然是可行的。 再如上面這個KFC或者服裝企業的案例中,如果市場部門維護一個產品的價格,而且這些價格往往在一個固定的時間進行幾次更新。如在換季的時候會進行一些促銷。此時資料庫管理員可以在數據更新完畢後立即執行復制完成的數據快照。所以,以數據更新來判斷是否適合採用快照復制,標准並不是數據的更新量。像上面提到的分析決策系統,其起初的數據更新量可能比有些資料庫系統幾年的數據更新量都要大。筆者認為,主要是根據數據更新的頻率來進行判斷。如果數據更新的比較頻繁,那麼即使數據更新的數據不多,像那種細水長流似的更新,則不適合採用快照復制。而那些井噴似的數據更新,所有的更新都集中在一個固定的時刻,那麼此時採用快照復制是比較合理的。 三、在一段時間內是否允許具有相對發布伺服器已過時的數據副本? 現在不少超市也已經連鎖了,如世紀聯華等等。為了提高利潤,增加市場的份額,這些超市紛紛推出了沖值卡,即消費者先將一定金額的人民幣打入到沖值卡中。然後每次消費完成後從卡中扣費。但前些天經常有新聞報道,說一個客戶的消費卡在一家聯華超市掛失了。但是撿到這張卡的人仍然可以在其他的聯華超市中消費。為此消費者就想不明白了,為什麼掛失了的消費卡仍然可以在其他超市中消費?掛失後的損失該由誰來承擔呢?其實這就使超市在不適當的時候採用了快照復制所造成的。由於採用快照復制,在各個聯華超市的資料庫之間數據無法在短時間內取得一致。如有些商戶說掛失當日之內的損失他們不承擔,這就說明他們可能是每天下班後進行一次快照復制。一般情況下這不會有問題。但是像遇到消費卡被偷了等情況,就會遇到類似的問題了。 所以,在考慮是否適合採用快照復制的時候,還需要考慮在一段時間內是否允許具有相對發布伺服器來說已過時的數據副本。如果不允許的話,那麼就不允許採用這個快照復制。如果允許的話,那麼資料庫管理員就需要評估這段時間最長是多少。如果是24個小時,那麼就需要每隔24小時進行一次快照復制。但是需要注意的是,如果時間的間隔比較短,如才允許十分鍾的數據延遲,那麼採用快照復制就沒有必要了。此時採用事務復制或則和合並復制可能更加的合適。 四、復制少量的數據。 快照復制跟其他復制類型相比,還有一個比較顯著的特點,即當發生數據同步時,將生成完整的快照並將其從發布伺服器傳送到訂閱伺服器。這是一個什麼概念呢?如訂閱伺服器中有10G的數據,而在一個快照復制的周期內,只有1M的數據發生了更改。此時發生快照復制的話,資料庫系統會將10G的數據都傳送到訂閱伺服器上。此時更改的數據只有1M,卻需要在網路上傳送10G的數據流量,顯然會對企業的網路產生比較大的壓力。由於在發布伺服器上快照復制的連續開銷低於事務復制的開銷,一次資料庫系統不會啟用跟蹤增量更改。但是像這種情況,如果要復制的數據量非常的大,而平時的更新又不多。此時資料庫系統要生成和應用快照,就將耗用大量的資源,包括網路資源和伺服器資源。所以說,當發布伺服器中的數據比較多時,採用快照復制不怎麼合適。因為此時網路傳輸反而會成為其最重大的瓶頸資源。相反若能夠採取細水長流的事務復制策略,那麼對於企業網路性能的影響就會小的多,甚至可以忽略不計。 所以在採用快照復制的時候,資料庫管理員一定要明白,快照復制會傳送整個資料庫對象。從而在快照復制傳輸過程中會侵蝕大量的網路帶寬,從而明顯的降低企業網路的性能,甚至導致網路擁塞。有時候為了保障快照能夠准確、迅速的傳遞到其他的訂閱伺服器,還不得不採用VPN等技術來保障傳輸的准確性。為此,筆者認為只有發布伺服器的資料庫並不是很大的情況下,才適合採用快照復制。否則的話,採用快照復制是得不償失。 從以上的分析中,可以得到一個結論。在考慮採用快照復制是否合適時,往往不能夠採用一個指標來判斷。而需要考慮多個因素,如資料庫的大小、數據更新的頻率、允許數據延遲的時間等等因素來進行判斷。最後在數據的一致性與資料庫的性能之間取得一個均衡。說實話,對於大部分資料庫管理員來說,要做出一個抉擇,確實有困難。因為這沒有固定的指標可以拿來參考。如資料庫容量小於多少時該採用快照復制。任何一個資料庫管理專家都不能夠下這個結論。所以在掌握影響其選擇的相關因素外,就要依靠資料庫管理員的經驗了。在遇到類似的選擇題時,往往經驗可以幫助管理員迅速解決問題。最後需要提醒的是,無論最終採取了什麼方案,最好能夠持續跟蹤一段時間,看看自己的選擇是否合理。
E. SQLServer資料庫中如何保持數據一致性
根據實現策略的不同,主要有快照復制、事務復制、合並復制等三種類型。這三種復制類型,各有各的特點,分別適用於不同的場合。一般來說,在考慮採用哪種復制類型比較合適的時候,主要考慮的是性能與數據同步的時間間復制是SQLServer資料庫中保持數據一致性的一種手段。根據實現策略的不同,主要有快照復制、事務復制、合並復制等三種類型。這三種復制類型,各有各的特點,分別適用於不同的場合。一般來說,在考慮採用哪種復制類型比較合適的時候,主要考慮的是性能與數據同步的時間間隔。那麼在什麼情形下比較適用快照復制呢?筆者就跟大家來討論一下這個話題。 為了在恰當的時候採用快照復制,資料庫管理員首先需要知道快照復制的特點。快照復制是指將數據以特定時刻的瞬時狀態轉發,而不堅實對數據的更新。在發生同步時,將生成完整的快照並將其發送到訂閱伺服器。簡單的說,快照復制就是每隔一段時間發生數據同步操作。而不是發布伺服器的數據一有更新就出發這個快照復制。顯然這種快照復制的數據同步性稍微差一點。在訂閱伺服器與發布伺服器之間有一段時間會存在數據不一致的情況。但是這可以在很大程度上提高訂閱伺服器與發布伺服器的性能。這就好像汽車運輸。採用快照復制的話可以將一個集裝箱裝滿後在送貨,而不是有多少送多少。掌握這個資料庫復快照復制的具體特點之後,資料庫管理員就可以來考慮在什麼情況下,採用快照復制更加的合理。 一、數據更改比較少的系統中。 快照復制與其他復制相比最主要的缺陷就是資料庫中的數據無法及時同發布伺服器一致。為此如果發布伺服器中的內容很少更改的話,顯然此時採用快照復制是比較合理的。此時採用快照復制的話,不僅數據一致性延遲的負面效應會越來越不明顯,同時可以提高發布伺服器與訂閱伺服器的性能。如在實際工作中,經常會遇到這樣的客戶。如一家企業在各地都有辦事處或者銷售機構,就像肯德基一樣,各地的產品價格基本上都是相同的,不怎麼會更改。即使更改的話,各地也是統一調整。由於此時產品價格表更改的比較少,那麼在企業總部的資料庫服務與各地的訂閱伺服器之間,採用快照復制的形式就會比較合適。其實類似的情況有很多。如不少的服裝企業,像李寧、耐克等等,他們不僅自己生產,而且在各地又有自己的銷售辦事處。在價格方面也是統一的。在這種情況下,採用快照復制往往能夠提高資料庫復制的性能,同時又不影響其使用。 二、在某個時段內會出現數據大量的更改。 需要補充說明的一點是,上面說到的數據不怎麼發生更改,指的是數據的延續性更改。如在一年中,每天或者每個小時更改的數據都比較平均。此時採用快照復制不怎麼合適。但是如果數據的更改集中在一個時段內。而其他時間中資料庫的內容不會有多大的更改。此時採用快照復制是可行的。如一些決策性系統,往往在起初導入數據的時候,需要進行大量的更改。而等到數據導入完畢,在大家對數據進行分析時,則資料庫中的內容基本上保持不變。在這種情況下,筆者認為只要數據的更新集中在一個固定的時段,此時採用快照復制仍然是可行的。 再如上面這個KFC或者服裝企業的案例中,如果市場部門維護一個產品的價格,而且這些價格往往在一個固定的時間進行幾次更新。如在換季的時候會進行一些促銷。此時資料庫管理員可以在數據更新完畢後立即執行復制完成的數據快照。所以,以數據更新來判斷是否適合採用快照復制,標准並不是數據的更新量。像上面提到的分析決策系統,其起初的數據更新量可能比有些資料庫系統幾年的數據更新量都要大。筆者認為,主要是根據數據更新的頻率來進行判斷。如果數據更新的比較頻繁,那麼即使數據更新的數據不多,像那種細水長流似的更新,則不適合採用快照復制。而那些井噴似的數據更新,所有的更新都集中在一個固定的時刻,那麼此時採用快照復制是比較合理的。 三、在一段時間內是否允許具有相對發布伺服器已過時的數據副本? 現在不少超市也已經連鎖了,如世紀聯華等等。為了提高利潤,增加市場的份額,這些超市紛紛推出了沖值卡,即消費者先將一定金額的人民幣打入到沖值卡中。然後每次消費完成後從卡中扣費。但前些天經常有新聞報道,說一個客戶的消費卡在一家聯華超市掛失了。但是撿到這張卡的人仍然可以在其他的聯華超市中消費。為此消費者就想不明白了,為什麼掛失了的消費卡仍然可以在其他超市中消費?掛失後的損失該由誰來承擔呢?其實這就使超市在不適當的時候採用了快照復制所造成的。由於採用快照復制,在各個聯華超市的資料庫之間數據無法在短時間內取得一致。如有些商戶說掛失當日之內的損失他們不承擔,這就說明他們可能是每天下班後進行一次快照復制。一般情況下這不會有問題。但是像遇到消費卡被偷了等情況,就會遇到類似的問題了。 所以,在考慮是否適合採用快照復制的時候,還需要考慮在一段時間內是否允許具有相對發布伺服器來說已過時的數據副本。如果不允許的話,那麼就不允許採用這個快照復制。如果允許的話,那麼資料庫管理員就需要評估這段時間最長是多少。如果是24個小時,那麼就需要每隔24小時進行一次快照復制。但是需要注意的是,如果時間的間隔比較短,如才允許十分鍾的數據延遲,那麼採用快照復制就沒有必要了。此時採用事務復制或則和合並復制可能更加的合適。 四、復制少量的數據。 快照復制跟其他復制類型相比,還有一個比較顯著的特點,即當發生數據同步時,將生成完整的快照並將其從發布伺服器傳送到訂閱伺服器。這是一個什麼概念呢?如訂閱伺服器中有10G的數據,而在一個快照復制的周期內,只有1M的數據發生了更改。此時發生快照復制的話,資料庫系統會將10G的數據都傳送到訂閱伺服器上。此時更改的數據只有1M,卻需要在網路上傳送10G的數據流量,顯然會對企業的網路產生比較大的壓力。由於在發布伺服器上快照復制的連續開銷低於事務復制的開銷,一次資料庫系統不會啟用跟蹤增量更改。但是像這種情況,如果要復制的數據量非常的大,而平時的更新又不多。此時資料庫系統要生成和應用快照,就將耗用大量的資源,包括網路資源和伺服器資源。所以說,當發布伺服器中的數據比較多時,採用快照復制不怎麼合適。因為此時網路傳輸反而會成為其最重大的瓶頸資源。相反若能夠採取細水長流的事務復制策略,那麼對於企業網路性能的影響就會小的多,甚至可以忽略不計。 所以在採用快照復制的時候,資料庫管理員一定要明白,快照復制會傳送整個資料庫對象。從而在快照復制傳輸過程中會侵蝕大量的網路帶寬,從而明顯的降低企業網路的性能,甚至導致網路擁塞。有時候為了保障快照能夠准確、迅速的傳遞到其他的訂閱伺服器,還不得不採用VPN等技術來保障傳輸的准確性。為此,筆者認為只有發布伺服器的資料庫並不是很大的情況下,才適合採用快照復制。否則的話,採用快照復制是得不償失。 從以上的分析中,可以得到一個結論。在考慮採用快照復制是否合適時,往往不能夠採用一個指標來判斷。而需要考慮多個因素,如資料庫的大小、數據更新的頻率、允許數據延遲的時間等等因素來進行判斷。最後在數據的一致性與資料庫的性能之間取得一個均衡。說實話,對於大部分資料庫管理員來說,要做出一個抉擇,確實有困難。因為這沒有固定的指標可以拿來參考。如資料庫容量小於多少時該採用快照復制。任何一個資料庫管理專家都不能夠下這個結論。所以在掌握影響其選擇的相關因素外,就要依靠資料庫管理員的經驗了。在遇到類似的選擇題時,往往經驗可以幫助管理員迅速解決問題。最後需要提醒的是,無論最終採取了什麼方案,最好能夠持續跟蹤一段時間,看看自己的選擇是否合理。
F. 如何校驗資料庫和緩存之間數據的一致性
您好,這樣的:
這種writer-reader架構,一般思路是在緩存更新階段由writer來解決一致性問題,當資料庫數據變化時,同步更新redis並確保緩存更新成功。
作為完整性判斷,可以不檢查全部的屬性,而對數據使用一個自增的版本號(或時間戳)來判斷是否最新。
作為後置的檢測,可以優化來降低掃描的代價,如只針對最近一個時間周期內(如10min)資料庫中更新過的數據,這個集合應該比較小,去redis中進行檢查的代價會比較低。
G. 常見的緩存策略有哪些,如何做到緩存與 db 里的數據一致性
您: 種writer-reader架構般思路緩存更新階段由writer解決致性問題資料庫數據變化同步更新redis並確保緩存更新功 作完整性判斷檢查全部屬性數據使用自增版本號(或間戳)判斷否新 作置檢測優化降低掃描代價針近間周期內(依0min)資料庫更新數據集合應該比較redis進行檢查代價比較
H. 什麼是資料庫一致性
一致性:事務執行的結果必須是使資料庫從一個一致性狀態變到另一個一致性狀態。
一致性是指當事務完成時,必須使所有數據都具有一致的狀態。在關系型資料庫中,所有的規則必須應用到事務的修改上,以便維護所有數據的完整性。
I. 如何保證資料庫的安全性和一致性
關系型資料庫有四個顯著的特徵,即安全性、完整性、並發性和監測性。資料庫的安全性就是要保證資料庫中數據的安全,防止未授權用戶隨意修改資料庫中的數據,確保數據的安全。在大多數資料庫管理系統中,主要是通過許可來保證資料庫的安全性。完整性是資料庫的一個重要特徵,也是保證資料庫中的數據切實有效、防止錯誤、實現商業規則的一種重要機制。在資料庫中,區別所保存的數據是無用的垃圾還是有價值的信息,主要是依據資料庫的完整性是否健全。在SQL Server 7.0中,數據的完整性是通過一系列邏輯來保障的,這些邏輯分為三個方面,即實體完整性、域完整性和參考完整性。對任何系統都可以這樣說,沒有監測,就沒有優化。這句話用在資料庫管理系統方面,也是切合實際的。只有通過對資料庫進行全面的性能監測,也才能發現影響系統性能的因素和瓶頸,才能針對瓶頸因素,採取切合實際策略,解決問題,提高系統的性能。並發性也是一個非常重要的概念,它是用來解決多個用戶對同一數據進行操作時的問題。特別是對於網路資料庫來說,這個特點更加突出。提高資料庫的處理速度,單單依靠提高計算機的物理速度是不夠的,還必須充分考慮資料庫的並發性問題,提高資料庫並發性的效率。那麼如何保證並發性呢?在這個面向下一世紀的資料庫產品SQL Server 7.0中,通過使用事務和鎖機制,解決了資料庫的並發性問題。
本文來自: 中國網管聯盟(bitsCN.com) 詳細出處參考:http://www.bitscn.com/mssql/200605/27004.html
J. 如何保證緩存與資料庫雙寫時的數據一致性
一般來說,就是如果系統不是嚴格要求緩存+資料庫必須一致性的話,緩存可以稍微的跟資料庫偶爾有不一致的情況,最好不要做這個方案,讀請求和寫請求串列化,串到一個內存隊列里去,這樣就可以保證一定不會出現不一致的情況
串列化之後,就會導致系統的吞吐量會大幅度的降低,用比正常情況下多幾倍的機器去支撐線上的一個請求。