面試題 Mysql除了序列化怎麼解決幻讀

2022-04-02 00:24:06 字數 871 閱讀 6161

在rr級別下,快照讀是通過mvvc(多版本控制)和undo log來實現的,當前讀是通過加record lock(記錄鎖)和gap lock(間隙鎖)來實現的。在mysql中通過mvcc快照讀和next-key(當前讀)兩種模式解決幻讀問題。

關於mvvc

mysql innodb儲存引擎,實現的是基於多版本的併發控制協議——mvcc (multi-version concurrency control)

mvcc最大的好處:讀不加鎖,讀寫不衝突。在讀多寫少的oltp應用中,讀寫不衝突是非常重要的,極大的增加了系統的併發效能,現階段幾乎所有的rdbms,都支援了mvcc。

lbcc:lock-based concurrency control,基於鎖的併發控制

mvcc:multi-version concurrency control

基於多版本的併發控制協議。純粹基於鎖的併發機制併發量低,mvcc是在基於鎖的併發控制上的改進,主要是在讀操作上提高了併發量。

快照讀 (snapshot read):讀取的是記錄的可見版本 (有可能是歷史版本),不用加鎖(共享讀鎖s鎖也不加,所以不會阻塞其他事務的寫)

當前讀 (current read):讀取的是記錄的最新版本,並且,當前讀返回的記錄,都會加上鎖,保證其他事務不會再併發修改這條記錄

關於間隙鎖

當我們用範圍條件,而不是使用相等條件檢索資料,並請求共享或排他鎖時,innodb會給符合條件的已有資料進行加鎖; 對於鍵值在條件範圍內但並不存在的記錄,叫做 "間隙(gap)" , innodb也會對這個 "間隙" 加鎖,這種鎖機制就是所謂的 間隙鎖 。

面試題 單例模式與反射 序列化

餓漢式 立即載入,執行緒安全。public class singleton public static singleton getinstance 懶漢式 延遲載入,執行緒不安全。public class singleton public static singleton getinstance r...

面試題 物件序列持久化

今天閒下來,想到一道面試題,物件a實現了序列化介面,物件b為a的例項變數,未序列化,當把a物件持久化到檔案中時,就會丟擲notserializableexception 也就是說,要持久化物件,或傳輸時,需要對其所引用的例項進行序列化,public class notserializ public ...

mysql 不用怕面試題 MySQL 面試題

資料庫事務的四個特性及含義原子性 atomicity 一致性 correspondence 隔離性 isolation 永續性 durability 原子性 整個事務中的所有操作,要麼全部完成,要麼全部不完成。事務在執行過程中發生錯誤,會被回滾 rollback 到事務開始前的狀態,就像這個事務從來...