MySQL是最流行的關(guān)系型數(shù)據(jù)庫軟件之一。由于其體積小、速度快、開源免費、簡單易用、維護(hù)成本低等,在集群架構(gòu)中易擴(kuò)展、高可用,因此深受開發(fā)者和企業(yè)的喜愛。
今天我們一起來學(xué)習(xí)了解下MySQL數(shù)據(jù)庫應(yīng)用架構(gòu)的發(fā)展。
單體架構(gòu)
該架構(gòu)指的是應(yīng)用程序系統(tǒng)的所有數(shù)據(jù)存儲只需要一個MySQL實例,就能滿足數(shù)據(jù)的寫入和讀取需求。
單體架構(gòu)
該架構(gòu)適用于初期的小型應(yīng)用程序,如果不斷發(fā)展成長為大型應(yīng)用程序,它就會出現(xiàn)如下應(yīng)用瓶頸:
- 需要存儲的數(shù)據(jù)量太大,超出一個MySQL實例的承受能力;
- 對數(shù)據(jù)庫的讀寫操作量太大,超出一個MySQL實例的承受能力;
- 如果僅有的這個MySQL實例掛掉了,整個應(yīng)用程序也就不能對外提供服務(wù)了。
主從架構(gòu)
該架構(gòu)主要解決的就是上面單體架構(gòu)的出現(xiàn)的應(yīng)用瓶頸的。已有的MySQL實例充當(dāng)主庫,負(fù)責(zé)寫入操作,存儲數(shù)據(jù)并同步從庫。然后通過新增一個及以上的MySQL實例作為從庫,來分擔(dān)讀取數(shù)據(jù)的壓力。也可以在主庫的MySQL實例掛掉之后,切換到從庫來保證應(yīng)用程序的高可用性。
主從架構(gòu)
該架構(gòu)適用于寫少讀多的場景,如果出現(xiàn)大量的寫入操作,就會出現(xiàn)如下應(yīng)用瓶頸:
- 對數(shù)據(jù)庫的寫操作量太大,超出一個MySQL主庫實例的承受能力;
- 需要存儲的寫入數(shù)據(jù)量太大,超出一個MySQL主庫實例的承受能力。
分庫分表
對于單體架構(gòu)和主從架構(gòu)都遇到過的寫入瓶頸和存儲瓶頸時,可以通過分庫分表來解決,它分為垂直拆分和水平拆分。
- 垂直拆分:就是專庫專用,按照不同的業(yè)務(wù)對數(shù)據(jù)表進(jìn)行分類,發(fā)布到不同的數(shù)據(jù)庫上。
垂直拆分
這種拆分方式,能更清晰的對模塊進(jìn)行劃分,但最終還是會存在單張表的大數(shù)據(jù)量,引起數(shù)據(jù)庫存儲瓶頸的問題。
- 水平拆分:就是將一張數(shù)據(jù)表按照某種規(guī)則進(jìn)行拆分,拆成多張表,每個表中存儲一部分?jǐn)?shù)據(jù),分別放到不同的數(shù)據(jù)庫中。
水平拆分
這種拆分方式,能夠解決垂直拆分存在的單表大數(shù)據(jù)量問題。
因此,垂直拆分和水平拆分在實際應(yīng)用中,可以結(jié)合使用,優(yōu)勢互補(bǔ)。
作者:楊工,北京互聯(lián)網(wǎng)公司在職JAVA開發(fā),專注分享寫作干貨。歡迎關(guān)注我,期待你的點贊評論。