多版本併發控制技術
維護資料一致性並防止資料庫系統中的併發問題至關重要。多個事務同時訪問相同資料的情況應該得到妥善處理。多版本併發控制 (MVCC) 技術提供了一種高效且有效的方法來實現這一點。
在本文中,我們將討論多版本併發控制 (MVCC) 技術,其各種型別和特性。
併發控制協議
資料庫系統提供併發控制以確保事務之間的隔離性。它透過一致地執行事務來維護資料庫的一致性。它還解決由讀寫和寫讀操作引起的衝突。併發控制使用各種技術,例如:
兩階段鎖協議
時間戳排序協議
多版本併發控制
驗證併發控制

讓我們簡要討論一下兩階段鎖協議。鎖是協議中一個重要的操作,它提供讀取或寫入資料項的許可權。兩階段鎖協議是一個過程,它允許獲取共享資源而不會產生死鎖的可能性。該協議涉及三個主要活動:
(i) 鎖獲取
(ii) 資料修改
(iii) 鎖釋放
在分散式系統中,兩階段鎖透過在無法獲取所有必需資源而不等待另一個程序完成使用鎖的情況下釋放所有已獲取的資源來防止死鎖。這確保了沒有程序在等待另一個程序釋放資源時持有共享資源,從而防止由於資源爭用而導致的死鎖。
兩階段鎖協議中的事務可以處於增長階段或收縮階段。
在增長階段,事務可以獲取鎖,但不能釋放任何鎖,直到到達鎖點,鎖點是事務獲取所有必要鎖的點。
在收縮階段,事務只能釋放鎖,但不能獲取任何新鎖。
多版本併發控制 (MVCC)
多版本協議旨在減少讀取操作的延遲。它維護資料項的多個版本。每當執行寫入操作時,協議都會建立事務資料的新的版本,以確保無衝突且成功的讀取操作。
新建立的版本包含以下資訊:
內容 - 此欄位包含該版本的資料值。
寫入時間戳 - 此欄位包含建立新版本的事務的時間戳。
讀取時間戳 - 此欄位包含將讀取新建立值的事務的時間戳。
透過建立資料的多個版本,多版本協議確保讀取操作可以訪問資料的適當版本而不會遇到衝突。因此,該協議能夠實現高效的併發控制並減少讀取操作的延遲。
MVCC 的各種型別
這些型別在下面的表格中進行比較
MVCC 型別 |
描述 |
優點 |
缺點 |
---|---|---|---|
基於快照的 |
在事務開始時建立資料庫的快照,並使用它為事務提供必要的資料 |
易於實現 |
由於儲存資料的多個版本而導致的顯著開銷 |
基於時間戳的 |
為建立新記錄版本的事務分配唯一的時間戳;用於確定事務的資料可見性 |
比基於快照的 MVCC 更高效 |
需要額外的儲存空間來儲存時間戳 |
基於歷史的 |
儲存對記錄所做的所有更改的完整歷史記錄,允許輕鬆回滾事務 |
提供最高級別的資料一致性 |
MVCC 技術中最複雜的一種 |
混合的 |
組合兩種或多種 MVCC 技術以平衡效能和資料一致性 |
提供多種 MVCC 技術的優勢 |
比單個技術更復雜 |
多版本併發控制 (MVCC) 的好處
MVCC 是一種幫助資料庫管理同時發生多個事務的技術。當 DBMS 正確實現 MVCC 時,它會提供多種好處,例如:
減少對資料庫鎖的需求
使用 MVCC,資料庫可以允許多個事務讀取和寫入資料而無需鎖定整個資料庫。
減少多個事務嘗試訪問相同資料的衝突
MVCC 有助於減少訪問相同資料的多個事務之間的衝突。
更快的讀取資料速度
由於 MVCC 允許多個事務同時讀取資料,因此它提高了讀取資料的速度。
記錄在寫入操作期間仍然受到保護
MVCC 確保資料在事務對其進行更改時不會被其他事務更改。
更少的資料庫死鎖
死鎖發生在兩個或多個事務相互等待釋放鎖時,導致系統停止執行。MVCC 可以減少此類事件的數量。
多版本併發控制 (MVCC) 的缺點
儘管多版本併發控制 (MVCC) 提供了許多好處,但這種方法也有兩個主要缺點:
併發更新控制方法可能難以實現。
資料庫可能會因記錄的多個版本而膨脹,從而增加其整體大小。
但是,對於大多數使用者和開發者來說,實現 MVCC 併發控制方法所涉及的複雜性是隱藏的。資料庫廠商在幕後提供此功能,因此開發人員可以像往常一樣編寫 SQL,終端使用者可以使用應用程式,而無需擔心 MVCC 如何工作的底層細節。這意味著 MVCC 的使用通常對大多數使用者和開發者來說是透明的。
MVCC 和鎖定的比較
MVCC |
鎖定 |
|
---|---|---|
方法 |
在寫入操作期間建立一個具有遞增版本號的新記錄版本 |
在寫入操作期間鎖定記錄 |
讀取操作 |
在更新新版本的同時,可以對記錄的舊版本進行併發讀取操作 |
在釋放鎖之前,不允許併發讀取操作 |
寫入操作 |
寫入操作在記錄的新版本上進行,允許多個寫入同時發生 |
一次只能發生一個寫入,因為記錄在寫入操作期間被鎖定 |
鎖 |
不需要鎖,消除了爭用和死鎖管理的需求 |
使用鎖,這可能導致爭用和死鎖問題 |
記錄版本 |
隨著建立記錄的新版本,資料庫的大小會增加,從而可能導致膨脹 |
資料庫大小保持不變,因為沒有建立記錄的新版本 |
結論
MVCC 技術提供了一種高效且有效的方法來實現資料一致性。它可以防止資料庫系統中的併發問題。每種 MVCC 技術都有其優點和缺點。因此,應根據具體需求和應用程式特性選擇適當的技術。在選擇 MVCC 技術時,必須考慮效能、效率和資料一致性。