對數(shù)據(jù)庫"事務(wù)"的感想

為什么需要事務(wù)?

這里用一個(gè)不恰當(dāng)?shù)谋扔?,我認(rèn)為因?yàn)閿?shù)據(jù)庫要像真實(shí)的物理世界一樣,需要“量子化”。

事務(wù)的四大特性ACID(A:atomicity:原子性)(C:consistency:一致性)(I:isolation:隔離性)(D:durability:持久性)。體現(xiàn)量子化的就是 A 與 C 屬性。其中,A本質(zhì)上就是一組SQL語句的整體執(zhí)行狀態(tài):要么全部成功,要么全部失敗,不允許存在中間狀態(tài)。為什么不能執(zhí)行一半就結(jié)束呢?從技術(shù)角度看當(dāng)然可以,但是跳出技術(shù)就會發(fā)現(xiàn)很多違反邏輯的地方。經(jīng)典的例子就是:為什么我錢轉(zhuǎn)出去了,對方?jīng)]有收到~ 只要你親身經(jīng)歷一次沒收到錢的事情,你會覺得A特性竟然如此可愛。

從SQL角度看有“量子化”,從數(shù)據(jù)庫整體狀態(tài)看也要有“量子化”,這就是C特性。如果我錢轉(zhuǎn)出去的SQL執(zhí)行了,你錢增多的SQL還沒執(zhí)行,數(shù)據(jù)庫崩潰。那這個(gè)就是“中間狀態(tài)”,而這個(gè)狀態(tài)是不能允許存在的,是不是像極了電子的軌道躍遷?O(∩_∩)O狀態(tài)與狀態(tài)之間只能突變,不能連續(xù)。

MySQL用了什么手段?
理念講起來容易理解,而實(shí)際做出來符合要求的系統(tǒng)就是另一回事了。借用大神的一句話:“除非系統(tǒng)通過嚴(yán)格的ACID測試,否則空談事務(wù)的概念是不夠的?!盡ySQL實(shí)現(xiàn)ACID細(xì)節(jié)很多,但總而總的說,其實(shí)就是靠日志。A C I 靠的是undo日志,D靠的是redo和binlog日志。

無論是執(zhí)行語句失敗或系統(tǒng)崩潰恢復(fù)而產(chǎn)生的回滾,還是MVCC,亦或是隔離級別,本質(zhì)上都是存一份老數(shù)據(jù),然后根據(jù)不同的時(shí)機(jī)“按需取用”。MySQL系統(tǒng)通過undo日志完成這個(gè)任務(wù)。

而持久化D的問題,大家聽說過兩個(gè)詞:日志先行,二階段提交。保障了你提交事務(wù)之后,只要看到成功消息,代表數(shù)據(jù)庫永久存儲住了。存到哪里?最初是在日志里!redo日志binlog日志里。

簡單感想談到這,后續(xù)有感謝再發(fā)出來~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容