資料一致性

2022-04-11 08:02:34 字數 1783 閱讀 7902

資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。 

常用的一致性模型有:

a、嚴格一致性(linearizability, strict/atomic consistency):讀出的資料始終為最近寫入的資料。這種一致性只有全域性時鐘存在時才有可能,在分布式網路環境不可能實現。

b、順序一致性(sequential consistency):所有使用者以同樣的順序看到對同一資料的操作,但是該順序不一定是實時的。

c、因果一致性(causal consistency):只有存在因果關係的寫操作才要求所有使用者以相同的次序看到,對於無因果關係的寫入則並行進行,無次序保證。因果一致性可以看做對順序一致性效能的一種優化,但在實現時必須建立與維護因果依賴圖,是相當困難的。

d、管道一致性(pram/fifo consistency):在因果一致性模型上的進一步弱化,要求由某乙個使用者完成的寫操作可以被其他所有的使用者按照順序的感知到,而從不同使用者中來的寫操作則無需保證順序,就像乙個乙個的管道一樣。 相對來說比較容易實現。

e、弱一致性(weak consistency):只要求對共享資料結構的訪問保證順序一致性。對於同步變數的操作具有順序一致性,是全域性可見的,且只有當沒有寫操作等待處理時才可進行,以保證對於臨界區域的訪問順序進行。在同步時點,所有使用者可以看到相同的資料。

f、 釋放一致性(release consistency):弱一致性無法區分使用者是要進入臨界區還是要出臨界區, 釋放一致性使用兩個不同的操作語句進行了區分。需要寫入時使用者acquire該物件,寫完後release,acquire-release之間形成了乙個臨界區,提供 釋放一致性也就意味著當release操作發生後,所有使用者應該可以看到該操作。

g、最終一致性(eventual consistency):當沒有新更新的情況下,更新最終會通過網路傳播到所有副本點,所有副本點最終會一致,也就是說使用者在最終某個時間點前的中間過程中無法保證看到的是新寫入的資料。可以採用最終一致性模型有乙個關鍵要求:讀出陳舊資料是可以接受的。

h、delta consistency:系統會在delta時間內達到一致。這段時間內會存在乙個不一致的視窗,該視窗可能是因為log shipping的過程導致。

最終一致性的幾種具體實現:

1、讀不舊於寫一致性(read-your-writes consistency):使用者讀到的資料,總是不舊於自身上乙個寫入的資料。

2、會話一致性(session consistency):比讀不舊於寫一致性更弱化。使用者在乙個會話中才保證讀寫一致性,啟動新會話後則無需保證。

3、單讀一致性(monotonic read consistency):讀到的資料總是不舊於上一次讀到的資料。

4、單寫一致性(monotonic write consistency):寫入的資料完成後才能開始下一次的寫入。

5、寫不舊於讀一致性(writes-follow-reads consistency):寫入的副本不舊於上一次讀到的資料,即不會寫入更舊的資料。

werner vogels認為:在很多網際網路應用中,單讀一致性+讀不舊於寫一致性可以提供足夠的一致性了。

werner vogels基於nwr模型來分析一致性,該模型決定了亞馬遜雲計算技術架構的方向。

n-副本個數,w-每次同步寫入的副本個數,r-每次讀出副本個數。認為只要w+r>n,就可以達到很強一致性。例如同步方式n=2,w=2,r=1,則始終是一致的;而如果是非同步方式,則每次同步寫入的w只有1,就不能保證一致性。如果w要保證強一致性,那麼如果每次不能寫夠w份時,此次寫操作必須失敗,系統變得不可用。

資料一致性

資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...

資料一致性

丟失更新 未確定的相關性 不一致的分析和幻想讀 事務a讀取與搜尋條件相匹配的若干行。事務b以插入或刪除行等方式來修改事務a的結果集,然後再提交。幻讀是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,比如這種修改涉及到表中的 全部資料行 同時,第二個事務也修改這個表中的...

資料一致性

讀請求 先讀快取再讀庫 如果快取命中,返回資料 如果快取未命中,讀庫並把資料寫入快取,然後再返回 寫請求 資料寫庫 刪除快取 這裡很重要的一點在寫請求中,要刪除快取而不是更新快取。快取的更新會發生在下一次讀請求時。這裡為什麼會選擇刪除快取,而沒有更新快取呢。因為如果更新快取的話,存在併發寫操作時,無...