2PL學習記錄
《區塊鏈核心算法解析》中提及2PL,最早接觸2PL應該是在大三數據庫原理課上,但是已經忘記了,所以重新學習一下2PL。
事務可串行性(SERIALIZABLE)
說到2PL兩階段鎖,就不得不提及事務可串行性。
- 在說事務可串行性之前,先講講爲什麼數據會出錯,以及衝突操作的概念。
- 爲什麼會出錯:
那是因爲多個事務訪問數據庫,比如A事務先讀1資源,B事務後寫1資源,如果出現問題先讓B事務寫了1資源,那麼A事務就會讀錯了,這是併發調度產生的問題。 - 衝突操作的概念:
衝突操作是指不同的事務對同一個數據的讀寫操作和寫寫操作,還有同一個事務的讀寫。
Ri (x)與Wj(x) (事務Ti讀x,Tj寫x)
Wi(x)與Wj(x) (事務Ti寫x,Tj寫x)
Ri(x)與Wi(x) (事務Ti讀x,Tj寫x)
- 爲什麼會出錯:
- 事務可串行性是爲了保證數據庫在併發操作時,數據是正確,可以看串行調度的定義:一個調度中,屬於一個事務的所有操作連續執行,稱之爲串行調度。
簡單來說,就是一次併發操作(多個事務操作數據庫)得到的結果(事務執行到最後的結果(讀或者寫))與某一次串行調度的結果是一致的,就可以保證這次併發操作是正確的。
2PL(2階段鎖協議,two-phase locking protocol)
- 2階段鎖協議,就是給要做的數據上鎖,然後執行完所有操作後再解鎖,解鎖時就不能有任何操作了。所以是兩階段(上鎖操作+解鎖),來保證數據不出錯。
- 2PL內容很少,重點基本上是理解可串行性和衝突操作。