事務四要素
對於數據庫來講,併發性和準確性是數據庫須要權衡的兩個點。
相似於咱們的應用系統,又要要性能還要要準確。
數據準確性這一條來講,最好的控制就是串行化,都別急,一個一個來。這樣數據就沒問題了。
然而就是這個 「都別急」 讓你們很急,咱們又想要併發,如今這環境你不談併發都很差意思拿出手。
好了,那麼併發和數據準確性怎麼平衡。要併發咱們所能想到的就是在必要的時候加鎖,
加各類層級各類範圍不同的鎖。加鎖這個操做其實就是在平衡咱們剛纔的那兩點。
這裏不談數據庫的鎖機制,咱們先來談談 事務ACID 中的隔離性— 事務隔離級別
那你會問,這是個什麼?爲何要有隔離性,我不隔離不行麼?
說到這呢,咱們就要簡單再說說事務,事務我估計你們耳熟能詳,可是這裏大家最好再聽我嘮叨一下,看我說的對不對。
(敲黑板,劃重點)事務就是一個執行單元,一個具備原子性的執行單元。
我以爲仍是有必要再說說或者總結一下事務四要素
原子性
這個也很好理解,這個事務就是一個原子單元,要麼執行成功,要麼執行失敗,中間不能有斷層。
相似於多線程同時操做一個變量,你告訴操做系統,我在這原子操做變量呢,你別進行線程切換(時間片切換),等我執行完,你再隨意~
一致性
數據庫老是從一個一致性的狀態轉換到另外一個一致性的狀態。
個人理解是最終一致性也就是CAP理論的C.
一開始我總以爲這個一致性和原子性的定義是一個東西(我如今也隱約有這樣一種感受)
我仍是嘗試着總結區分他們的不一樣。
好比說原子性:我一條語句執行失敗了要回滾。
好比說一致性:我執行到中間停電了,數據庫崩潰了,咱們能夠維持正確的狀態。
原子性更像是—過程,我注重的是過程
一致性更像是—結果,我無論過程怎樣,我只是用個人KPI來考量你~
再說隔離性
其實這篇文章我想寫隔離性,可是寫隔離性我想從事務這四要素進行引伸,寫到這我發現我跑題了。我去改改標題。
我沒有寫具體的事務隔離性,我如今正在事務四要素這捆着呢。
那就說說隔離性,我第一次看到隔離性這個定義,腦子第一反應就是隔離性這個概念將每一個事務化做程了管道,
每條管道留着屬於本身的信息,互相是不知道存在的。
後來發現隔離性能是有隔離級別的,由於業務場景不盡相同,須要不一樣的隔離級別。
相似於,我一個操做操做的數據因不該該讓其餘事務看到我修改的數據?—須要,由於有的場景須要這樣的可見性
我總將事物的隔離性總結爲事物的可見性,這個可見性包括什麼能夠看?何時看?
這些問題我打算下次再總結。咱們這裏不細討論。
持久性
呀,這個要素讓我非常想不到,由於太熟悉了,熟悉的得都會想不起它。
怎麼纔算是持久性呢?定義是:一旦事務提交,其所作的修改將會永久保存到數據庫中。
這個定義是模糊的,須要加入不少策略來保證數據的持久性。
好比:我就是在事務提交時,系統掛掉了,你怎麼來保證數據的持久性。
總結一下,事務四要素,不但要知道名字最好理解一下,有些東西就怕細細琢磨~