mysql 事務四要素雜談

事務四要素

對於數據庫來講,併發性和準確性是數據庫須要權衡的兩個點。

    相似於咱們的應用系統,又要要性能還要要準確。

    數據準確性這一條來講,最好的控制就是串行化,都別急,一個一個來。這樣數據就沒問題了。

    然而就是這個 「都別急」 讓你們很急,咱們又想要併發,如今這環境你不談併發都很差意思拿出手。

    好了,那麼併發和數據準確性怎麼平衡。要併發咱們所能想到的就是在必要的時候加鎖,

    加各類層級各類範圍不同的鎖。加鎖這個操做其實就是在平衡咱們剛纔的那兩點。

    這裏不談數據庫的鎖機制,咱們先來談談 事務ACID 中的隔離性— 事務隔離級別

    那你會問,這是個什麼?爲何要有隔離性,我不隔離不行麼?

    說到這呢,咱們就要簡單再說說事務,事務我估計你們耳熟能詳,可是這裏大家最好再聽我嘮叨一下,看我說的對不對。

    (敲黑板,劃重點)事務就是一個執行單元,一個具備原子性的執行單元。

    我以爲仍是有必要再說說或者總結一下事務四要素

原子性

這個也很好理解,這個事務就是一個原子單元,要麼執行成功,要麼執行失敗,中間不能有斷層。

    相似於多線程同時操做一個變量,你告訴操做系統,我在這原子操做變量呢,你別進行線程切換(時間片切換),等我執行完,你再隨意~

一致性

數據庫老是從一個一致性的狀態轉換到另外一個一致性的狀態。

    個人理解是最終一致性也就是CAP理論的C.

    一開始我總以爲這個一致性和原子性的定義是一個東西(我如今也隱約有這樣一種感受)

    我仍是嘗試着總結區分他們的不一樣。

    好比說原子性:我一條語句執行失敗了要回滾。

    好比說一致性:我執行到中間停電了,數據庫崩潰了,咱們能夠維持正確的狀態。

    原子性更像是—過程,我注重的是過程

    一致性更像是—結果,我無論過程怎樣,我只是用個人KPI來考量你~

再說隔離性

其實這篇文章我想寫隔離性,可是寫隔離性我想從事務這四要素進行引伸,寫到這我發現我跑題了。我去改改標題。

    我沒有寫具體的事務隔離性,我如今正在事務四要素這捆着呢。

    那就說說隔離性,我第一次看到隔離性這個定義,腦子第一反應就是隔離性這個概念將每一個事務化做程了管道,

    每條管道留着屬於本身的信息,互相是不知道存在的。

    後來發現隔離性能是有隔離級別的,由於業務場景不盡相同,須要不一樣的隔離級別。

    相似於,我一個操做操做的數據因不該該讓其餘事務看到我修改的數據?—須要,由於有的場景須要這樣的可見性

    我總將事物的隔離性總結爲事物的可見性,這個可見性包括什麼能夠看?何時看?

    這些問題我打算下次再總結。咱們這裏不細討論。

持久性

呀,這個要素讓我非常想不到,由於太熟悉了,熟悉的得都會想不起它。

    怎麼纔算是持久性呢?定義是:一旦事務提交,其所作的修改將會永久保存到數據庫中。

    這個定義是模糊的,須要加入不少策略來保證數據的持久性。

    好比:我就是在事務提交時,系統掛掉了,你怎麼來保證數據的持久性。

總結一下,事務四要素,不但要知道名字最好理解一下,有些東西就怕細細琢磨~

相關文章
相關標籤/搜索