資料庫并發性問題
資料庫并發性問題指的是多個事務可以同時訪問資料庫中的資料,當多個事務在資料庫中并發執行時,資料的一致性可能收到破壞,從而導致資料出現問題,
事務就是用戶定義的一系列資料庫操作,這些操作可以視為一個完成的邏輯處理作業單元,要么全部執行,要么全部不執行,是不可分割的作業單元,
事務的四大屬性(ACID)
-
原子性(Atomicity)
原子性是指事務包含的所有操作要么全部成功,要么全部失敗回滾,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響,
-
一致性(Consistency)
一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之后都必須處于一致性狀態,
-
隔離性(Isolation)
隔離性是當多個用戶并發訪問資料庫時,資料庫為每一個用戶開啟事務,不能被其他事物的操作所干擾,多個并發事務之間要相互隔離
-
持久性(Durability)
持久性是指一個事務一旦被提交了,那么對資料庫中的資料的改變就是永久性的,即使是在資料庫系統遇到故障的情況下也不會丟失事務的操作,
悲觀鎖
悲觀鎖就是某個事務在更新資料程序中將資料鎖定,其他任何事務都不能讀取或修改,必須修改完成后才能訪問資料(類似于Java的執行緒同步鎖機制),悲觀鎖的特點是具有排他性,通常依賴于資料庫的鎖機制,一般適合短事務處理,
select * from table_name where id=1 for update
樂觀鎖
樂觀鎖并不是一種資料庫鎖機制,而是一種沖突檢測機制(版本沖突檢測機制的時間沖突檢測機制),它的特點就是并發性較好,事務修改資料時,其他事務仍可以修改資料,
版本沖突檢測機制原理
即每個資料表中有一個版本欄位 version,某一個事務更新資料后版本號+1,另一個事務更新后再+1,當事務發現資料庫當前版本號與讀取資料時版本號不一致時,說明在讀取資料后該資料已被其他事務修改,則不能更新資料,
樂觀鎖相對悲觀鎖而言,樂觀鎖假設認為資料一般情況下不會造成沖突,所以只會在資料進行提交更新的時候,才會正式對資料的沖突與否進行檢測,如果發現沖突了,則回傳用戶錯誤的資訊,讓用戶決定如何去做,樂觀鎖的特點是并發性較好,事務修改資料時,其他事務仍可以修改資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/168275.html
標籤:其他
