11 從數(shù)據(jù)的增刪改開始講起,回顧一下Buffer Pool在數(shù)據(jù)庫里的地位

從數(shù)據(jù)的增刪改開始講起,回顧一下Buffer Pool在數(shù)據(jù)庫里的地位
1、一切從數(shù)據(jù)的增刪改開始講起
好了,到這一講為止,我們實(shí)際上已經(jīng)初步的講解了一下MySQL的整體架構(gòu)設(shè)計(jì)原理,大家對(duì)于MySQL內(nèi)部包含哪些組件,我們平時(shí)更新數(shù)據(jù)以及查詢數(shù)據(jù)的時(shí)候,大致都是怎么做的,都已經(jīng)有一個(gè)比較高層次的了解了。
另外現(xiàn)在我們初步的了解了MySQL的架構(gòu)原理之后,還給大家介紹了一些我們的數(shù)據(jù)庫相關(guān)的生產(chǎn)經(jīng)驗(yàn),就是對(duì)于任何一個(gè)項(xiàng)目,數(shù)據(jù)庫都需要選擇好合適的機(jī)器,同時(shí)做好壓測(cè),并且有一個(gè)完善的可視化監(jiān)控系統(tǒng)。
現(xiàn)在可以理解為每個(gè)人手頭都有了一個(gè)可用的數(shù)據(jù)庫,而且對(duì)數(shù)據(jù)庫的整體架構(gòu)原理都有了一定的理解了。那么接下來,我們這個(gè)專欄一共有100多講的內(nèi)容,我們接著當(dāng)然要細(xì)細(xì)的講解數(shù)據(jù)庫的方方面面了
那我們應(yīng)該從哪個(gè)環(huán)節(jié)開始入手呢?
當(dāng)然是從數(shù)據(jù)庫的增刪改開始了,因?yàn)楫?dāng)你手頭有了一個(gè)數(shù)據(jù)庫之后,你必然就會(huì)去開發(fā)一個(gè)系統(tǒng),系統(tǒng)就直接基于數(shù)據(jù)庫做各種增刪改查的操作,實(shí)現(xiàn)各種各樣的業(yè)務(wù)邏輯
而任何一個(gè)系統(tǒng)在使用數(shù)據(jù)庫的時(shí)候,一定是從插入數(shù)據(jù)開始的,也就是首先先會(huì)對(duì)數(shù)據(jù)進(jìn)行增刪改的操作。
當(dāng)你的數(shù)據(jù)庫中有了數(shù)據(jù)之后,接著才會(huì)執(zhí)行各種各樣的查詢操作。
所以我們專欄的講解順序,就按照你手頭有了一個(gè)經(jīng)過壓測(cè)的、有完善監(jiān)控的數(shù)據(jù)庫之后,你開發(fā)的系統(tǒng)使用數(shù)據(jù)庫的順序來講解,先講解系統(tǒng)對(duì)數(shù)據(jù)庫執(zhí)行各種增刪改操作時(shí)背后對(duì)應(yīng)的內(nèi)幕原理,以及事務(wù)的原理,包括鎖的底層機(jī)制,然后講解你有了數(shù)據(jù)之后,執(zhí)行各種復(fù)雜的查詢操作的時(shí)候,涉及到的索引底層原理,查詢優(yōu)化的底層原理。
當(dāng)然這個(gè)中間我們會(huì)穿插各種各樣的生產(chǎn)實(shí)踐的案例,就跟我之前講解的《從0開始帶你成為JVM實(shí)戰(zhàn)高手》專欄一樣。
然后講解完這些之后,我們?cè)賮碇v解平時(shí)我們?cè)陂_發(fā)系統(tǒng)的時(shí)候,如何進(jìn)行數(shù)據(jù)庫的建模,在數(shù)據(jù)庫建模的時(shí)候,應(yīng)該如何注意字段類型、索引類型的一些問題,如何保證數(shù)據(jù)庫避免死鎖、高性能的運(yùn)行。
接著我們?cè)僦v解一些高階的數(shù)據(jù)庫架構(gòu)設(shè)計(jì),比如說主從架構(gòu)設(shè)計(jì)以及分庫分表架構(gòu)設(shè)計(jì),包括一些生產(chǎn)實(shí)踐的案例。
所以上面的這些就是我們專欄接下來將要講解的順序,這里要給大家提前通知一下,我在實(shí)際講解的過程中,會(huì)增加很多內(nèi)容,比如接下來好幾講都是深度分析Buffer Pool的內(nèi)容,實(shí)際上在原來的大綱中都是沒有的。
另外我接下來講解的過程中,還可能隨時(shí)會(huì)對(duì)大綱中原有內(nèi)容的順序做出調(diào)整,比如說我在講解完Buffer Pool之后,接著可能直接會(huì)深入講解redo log、undo log、binlog這些機(jī)制,同時(shí)接著講解事務(wù)機(jī)制,鎖機(jī)制,底層數(shù)據(jù)存儲(chǔ)機(jī)制。
然后這些都講完之后,才是講解索引和查詢優(yōu)化的內(nèi)容,所以希望大家能明白我們隨時(shí)會(huì)對(duì)大綱內(nèi)容做出額外的擴(kuò)充,以及我們隨時(shí)會(huì)調(diào)整大綱內(nèi)容的順序。
好,那么從這篇文章開始,讓我們一起來探索數(shù)據(jù)庫的各種底層機(jī)制和生產(chǎn)實(shí)踐案例吧!
2、回顧一下Buffer Pool是個(gè)什么東西?
現(xiàn)在我們先來回顧一下數(shù)據(jù)庫中的Buffer Pool是個(gè)什么東西?其實(shí)他是一個(gè)非常關(guān)鍵的組件,因?yàn)槲覀兺ㄟ^之前的講解都知道一點(diǎn),那就是數(shù)據(jù)庫中的數(shù)據(jù)實(shí)際上最終都是要存放在磁盤文件上的,如下圖所示。
? ? ? ? ? ?

? ? ? ? ? ? ?
但是我們?cè)趯?duì)數(shù)據(jù)庫執(zhí)行增刪改操作的時(shí)候,不可能直接更新磁盤上的數(shù)據(jù)的,因?yàn)槿绻銓?duì)磁盤進(jìn)行隨機(jī)讀寫操作,那速度是相當(dāng)?shù)穆?,隨便一個(gè)大磁盤文件的隨機(jī)讀寫操作,可能都要幾百毫秒。如果要是那么搞的話,可能你的數(shù)據(jù)庫每秒也就只能處理幾百個(gè)請(qǐng)求了!
之前我們也都講解過了,你在對(duì)數(shù)據(jù)庫執(zhí)行增刪改操作的時(shí)候,實(shí)際上主要都是針對(duì)內(nèi)存里的Buffer Pool中的數(shù)據(jù)進(jìn)行的,也就是你實(shí)際上主要是對(duì)數(shù)據(jù)庫的內(nèi)存里的數(shù)據(jù)結(jié)構(gòu)進(jìn)行了增刪改,如下圖所示。
? ? ? ? ? ?

? ? ? ? ? ? ?
當(dāng)然,我們之前都說過,其實(shí)每個(gè)人都擔(dān)心一個(gè)事,就是你在數(shù)據(jù)庫的內(nèi)存里執(zhí)行了一堆增刪改的操作,內(nèi)存數(shù)據(jù)是更新了,但是這個(gè)時(shí)候如果數(shù)據(jù)庫突然崩潰了,那么內(nèi)存里更新好的數(shù)據(jù)不是都沒了嗎?
所以其實(shí)之前我們開頭就用了很多篇幅講這個(gè)問題,MySQL就怕這個(gè)問題,所以引入了一個(gè)redo log機(jī)制,你在對(duì)內(nèi)存里的數(shù)據(jù)進(jìn)行增刪改的時(shí)候,他同時(shí)會(huì)把增刪改對(duì)應(yīng)的日志寫入redo log中,如下圖。
? ? ? ? ? ?

? ? ? ? ? ? ?
萬一你的數(shù)據(jù)庫突然崩潰了,沒關(guān)系,只要從redo log日志文件里讀取出來你之前做過哪些增刪改操作,瞬間就可以重新把這些增刪改操作在你的內(nèi)存里執(zhí)行一遍,這就可以恢復(fù)出來你之前做過哪些增刪改操作了。
當(dāng)然對(duì)于數(shù)據(jù)更新的過程,他是有一套嚴(yán)密的步驟的,還涉及到undo log、binlog、提交事務(wù)、buffer pool臟數(shù)據(jù)刷回磁盤,等等。我們之前都講過了,這里不再重復(fù),僅僅是帶著大家重新回顧一下數(shù)據(jù)庫中的Buffer Pool這個(gè)東西。
3、Buffer Pool的一句話總結(jié)
所以這里我們簡(jiǎn)單對(duì)Buffer Pool這個(gè)東西做一下總結(jié),他其實(shí)是數(shù)據(jù)庫中我們第一個(gè)必須要搞清楚的核心組件,因?yàn)樵鰟h改操作首先就是針對(duì)這個(gè)內(nèi)存中的Buffer Pool里的數(shù)據(jù)執(zhí)行的,同時(shí)配合了后續(xù)的redo log、刷磁盤等機(jī)制和操作。
所以Buffer Pool就是數(shù)據(jù)庫的一個(gè)內(nèi)存組件,里面緩存了磁盤上的真實(shí)數(shù)據(jù),然后我們的Java系統(tǒng)對(duì)數(shù)據(jù)庫執(zhí)行的增刪改操作,其實(shí)主要就是對(duì)這個(gè)內(nèi)存數(shù)據(jù)結(jié)構(gòu)中的緩存數(shù)據(jù)執(zhí)行的。
這一篇文章我們先對(duì)Buffer Pool這個(gè)東西的定位做一個(gè)簡(jiǎn)單的回顧,下一篇文章我們來分析一下Buffer Pool這個(gè)內(nèi)存數(shù)據(jù)結(jié)構(gòu)里到底包含了一些什么東西。
End
專欄版權(quán)歸公眾號(hào)儒猿技術(shù)窩所有
未經(jīng)許可不得傳播,如有侵權(quán)將追究法律責(zé)任