分庫分表系列:分庫分表的前世今生


大家好,我是【架構擺渡人】,一只十年的程序猿。這是分庫分表系列的第一篇文章,這個系列會給大家分享很多在實際工作中有用的經驗,如果有收獲,還請分享給更多的朋友。

其實這個系列有錄過視頻給大家學習,但很多讀者反饋說看視頻太慢了。也不好沉淀為文檔資料,希望能有一系列文字版本的講解,要用的時候可以快速瀏覽關鍵的知識點。那么它就來了,我再花點時間寫成幾篇連續的文章供大家學習。

什么是分庫分表?

一般,一個應用剛開始開發的時候,都是連接一個數據庫。因為這個時候業務並不復雜,處於起步階段。當然重構類的除外,重構類的是已經很明確的需求,業務也比較成熟。

分庫分表從字面去理解,就是將庫進行拆分,將表進行拆分。至於拆分的方式可以有多種,拆分的粒度也可以自行控制。

起步階段,一個數據庫,如下圖所示:

分庫后的效果,如下圖所示:

將一個庫進行拆分,必然有一定的理由和動機,那么為什么要分庫分表呢?

為什么要分庫分表?

性能問題

當數據庫中的數據越來越多,請求量越來越高,性能會成為瓶頸。如果有個別SQL寫的不好,沒有走索引,則會出現全表掃描的情況,占用數據庫的資源,影響其他請求。

存儲空間不夠

數據庫部署在一台服務器上面,磁盤的空間是有限的,隨着數據量的增多,磁盤的可用空間將會越來越少。如果不進行拆分,那么數據往哪寫?

可用性更高

如果你只有一個庫,當這個庫出現問題的時候,所有的業務也就處於不能提供服務的狀態。如果拆了10個庫,10個庫在不同的服務器上,即使某一個庫出現問題,也不會影響所有的業務。

業務划分

當所有的業務表都在一個庫中,本身就會存在資源搶占和相互影響的情況。同時也不利於多團隊的開發,大家的表都在一起,萬一誤操作了怎么辦。這么多表,哪些是我的,哪些是你的?

分庫分表的方式有哪些?

什么是垂直拆分?

垂直拆分就是把一個數據庫拆分成多個數據庫的操作。假設你的數據庫中有用戶表,商品表,訂單表等。這些是屬於不同的業務場景,就算不從性能的角度考慮,也要進行拆分,這個就是根據業務進行划分,這就是垂直拆分的一種。

進行垂直拆分之后結構更清晰了,數據庫的整體性能也上來了。以前一個庫要頂住1W的QPS,現在平攤到三個數據庫上面了,每個數據庫只需要頂住3K多就夠了,前提是你這3個數據庫必須是獨立的實例。

垂直拆分,也同時了解決了存儲的問題,整體的存儲空間其實也拆分開了。

什么是水平拆分

水平拆分跟垂直拆分可以進行互補,垂直拆分主要是容量和業務划分的拆分。水平拆分主要就是為了解決容量和性能問題的拆分。

比如你拆了訂單庫,商品庫,用戶庫。但是訂單庫還是在一個數據庫上面,他的性能和存儲還是有瓶頸的。此時就要進行水平拆分了,水平拆分就是把一個訂單庫,拆分成多個庫,一個訂單表拆分成多個表。

訂單庫從一個庫一個表拆分成多個庫多個表,如下圖所示:

總結

今天主要跟大家講了下背景,以及為什么要做分庫分表。讓大家有個整體的概念,這樣后面學習起來就會比較容易了。

雖然我們知道要做分庫分表,但是在分的時候該怎么分呢?垂直和水平如何搭配,才能干活不累呢?請關注我,下篇文章為你揭秘。

原創:架構擺渡人(公眾號ID:jiagoubaiduren),歡迎分享,轉載請保留出處。

本文已收錄至學習網站 http://cxytiandi.com/ ,里面有Spring Boot, Spring Cloud,分庫分表,微服務,面試等相關內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM