當前位置:
首頁 > 科技 > 你真的明白什麼是幻讀嗎?

你真的明白什麼是幻讀嗎?

資料庫事務由4ACID定義的。隔離級別(ACID中的I)是允許用戶指定數據完整的折中方案。隔離級別越弱,產?問題的可能性越多。這裡我們講一下幻讀問題。

並發事務的數據更新

如果?個事務基於給定的數據列集合做業務決策,而沒有範圍鎖,一個並發的事務可能會導致新增一?記錄,引發這種特殊的情況。

你真的明白什麼是幻讀嗎?

在上圖中,流程如下:

  1. Alice和Bob開啟了資料庫的兩個事務;

  2. Bob讀取post_comment表中所有post_id為1的數據;

  3. Alice增加了一條post_id為1的數據;

  4. Alice提交了她的事務;

  5. 如果Bob重複讀取post_id為1的數據,他將發現不一樣的結果集;

如果當前事務基於第一次返回的結果做了業務決策,那麼就會產生問題。

資料庫如何防止這種現象

SQL標準這麼定義幻讀,在兩個連續的查找之間一個並發的修改事務修改了查詢的數據集,導致這兩個查詢返回了不同的結果。

儘管提供讀一致性是可序列化的強制要求,但是還不夠。例如,一個買家可能購買產品?不知道在他提交訂單之後的瞬間,商品有更低的報價。

兩階段加鎖(2PL-based)序列化隔離使用謂詞鎖,通過訪問MVCC資料庫引擎返回的快照,來防止幻讀。

儘管如此,並發的事務仍然有可能修改被讀取過的數據。甚?MVCC資料庫引擎實現了事務調度,不同的請求通過兩階段加鎖實現依然可能返回不同的結果。例如,第2個事務添加了一條記錄,不在第1個事務的讀取記錄中。在這種特殊的應?場景中,很多MVCC資料庫引擎將不會回滾前?的事務。

本文作者VLADMIHALCEA,由鄧啟明翻譯,轉載本文請註明出處,技術原創及架構實踐文章,歡迎通過公眾號菜單「聯繫我們」進行投稿。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 高可用架構 的精彩文章:

螞蟻金服研發的金融級分散式中間件SOFA背後的故事
數字金融時代的雲原生架構轉型的關鍵挑戰和應對思路

TAG:高可用架構 |