對於資料庫來說,併發性和準確性是資料庫需要權衡的兩個點。
類似於我們的應用系統,又要要效能還要要準確。
資料準確性這一條來說,最好的控制就是序列化,都別急,乙個乙個來。這樣資料就沒問題了。
然而就是這個 「都別急」 讓大家很急,我們又想要併發,現在這環境你不談併發都不好意思拿出手。
好了,那麼併發和資料準確性怎麼平衡。要併發我們所能想到的就是在必要的時候加鎖,
加各種層級各種範圍不一樣的鎖。加鎖這個操作其實就是在平衡我們剛才的那兩點。
這裡不談資料庫的鎖機制,我們先來談談 事務acid 中的隔離性— 事務隔離級別
那你會問,這是個什麼?為什麼要有隔離性,我不隔離不行麼?
說到這呢,我們就要簡單再說說事務,事務我估計大家耳熟能詳,但是這裡你們最好再聽我嘮叨一下,看我說的對不對。
(敲黑板,劃重點)事務就是乙個執行單元,乙個具有原子性的執行單元。
我覺得還是有必要再說說或者總結一下事務四要素
這個也很好理解,這個事務就是乙個原子單元,要麼執行成功,要麼執行失敗,中間不能有斷層。
類似於多執行緒同時操作乙個變數,你告訴作業系統,我在這原子操作變數呢,你別進行執行緒切換(時間片切換),等我執行完,你再隨意~
資料庫總是從乙個一致性的狀態轉換到另乙個一致性的狀態。
我的理解是最終一致性也就是cap理論的c.
一開始我總覺得這個一致性和原子性的定義是乙個東西(我現在也隱約有這樣一種感覺)
我還是嘗試著總結區分他們的不同。
比如說原子性:我一條語句執行失敗了要回滾。
比如說一致性:我執行到中間停電了,資料庫崩潰了,我們可以維持正確的狀態。
原子性更像是—過程,我注重的是過程
一致性更像是—結果,我不管過程怎樣,我只是用我的kpi來考量你~
其實這篇文章我想寫隔離性,但是寫隔離性我想從事務這四要素進行引申,寫到這我發現我跑題了。我去改改標題。
我沒有寫具體的事務隔離性,我現在正在事務四要素這捆著呢。
那就說說隔離性,我第一次看到隔離性這個定義,腦子第一反應就是隔離性這個概念將每個事務化作程了管道,
每條管道留著屬於自己的資訊,互相是不知道存在的。
後來發現隔離效能是有隔離級別的,因為業務場景不盡相同,需要不同的隔離級別。
類似於,我乙個操作操作的資料因不應該讓其他事務看到我修改的資料?—需要,因為有的場景需要這樣的可見性
我總將事物的隔離性總結為事物的可見性,這個可見性包括什麼可以看?什麼時候看?
這些問題我打算下次再總結。我們這裡不細討論。
呀,這個要素讓我很是想不到,因為太熟悉了,熟悉的得都會想不起它。
怎麼才算是永續性呢?定義是:一旦事務提交,其所做的修改將會永久儲存到資料庫中。
這個定義是模糊的,需要加入很多策略來保證資料的永續性。
比如:我就是在事務提交時,系統掛掉了,你怎麼來保證資料的永續性。
MySQL事務簡述(四)
purge執行緒用於最終完成delete和update操作。在purge的過程中,innodb儲存引擎收看從history list中找到第乙個需要被清理的記錄。清理之後,會在其所在的頁中集訓尋找是否存在可以被清理的記錄。前面我們說過,innodb儲存引擎允許乙個頁中儲存多個undo資訊。如果發現不...
mysql事務基本要素和隔離級別
注意 只是個人理解的手記,不具備權威準確性 mysql事務基本要素和隔離級別 一.事務的四個基本要素 1.原子性 事務中的操作要麼都執行,要麼都回滾 2.一致性 a和b存款各位500,相互轉賬總額保持1000不變,對開發者有要求,不能寫出錯誤邏輯 3.隔離性 多事務併發時,保證各事務處理互不干擾,有...
MySQL的事物基本要素及四種事務隔離級別
原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,事務執行過程 錯,會回滾到事務原來狀態 一致性 consistency 事務開始前和結束後,資料庫的完整性約束沒有被破壞 比如a向b轉賬,不可能a扣了錢,b卻沒收到。隔離性 isolation 同一時間,只允許乙個事務請求同...