分庫分表學習總結

分庫分表想必目前好多中大型規模的互聯網公司多多少少都會涉及到,所以筆者也是趁機學習一把並進行自我歸納總結;

首先需要搞清楚的是分庫和分表是兩種概念,分別是針對不同的場景衍生出來的技術,下面分別來闡述下分庫和分表,已經所涉及到的場景;

1、分表

分表的概念即是將原來的一張表水平擴展,複製N張一模一樣表結構的表。爲何要分表呢?大家都知道當一張表中數據儲存過多時,隨之而來的問題是查詢速度越來越慢,爲了能夠提供在數據庫層面提高查詢效率,我們會選擇將一張大表拆分成多張規模較小的表,如圖所示:

                         

分表之後,將原來的大數據量的表平攤到四個一模一樣表結構的表中,這樣能有效的提高查詢效率;

2、分庫

分庫的概念即是將原來的一個庫水平擴展,根據具體的業務需求,複製N個庫。爲何要分庫呢?在面對高併發的情況下,單庫最多能提供2000左右的併發,如果超過這個值的話,數據庫壓力很很大,但是現在尤其是電商領域,面對日益增多的用戶量,尤其是在電商大促的時候,單臺庫更本滿足不了現如今的需求,那這個時候只能水平擴展數據庫,一個庫能抗2000tps,那N個庫的話,應該能扛2000*N吧,前提是其他瓶頸都已解決的情況下,所以說對於高併發的情況,分庫能有效的緩解數據庫壓力。

3、如何進行分庫分表

在分庫分表的時候,一般我們會採用一定的規則,比如對於支付系統,我們可以採用支付訂單編碼ordreNo,或者用戶賬號userNo進行取模,比如我們要將之前系統的單庫單標的模式更換爲4庫128張表,這個時候可以通過userNo%128,定義tb0 ~ tb127張表,然後使用userNo%4,計算這個賬號應該落在哪個庫裏,userNo確定的時候,也就確定了對應的是哪張表哪個庫了,然後可以通過數據庫組件協助我們進行系統分庫分表改造;

4、常用的分庫分表組件

sharding-jdbc:

由噹噹網提供的開源組件,採用的客戶端的形式,在使用它的時候需要引入相關的jar包,缺點是,每次版本更新的時候,對應的應用都需要跟着更新,優點的話,自行百度吧。

mycat:

基於cobar進行改造的,採用的是代理模式,應用基本上無感知,缺點,需要增加運維成本,得有專門的團隊去維護這個mycat組件,優點的話,應用無感知,升級的時候只需要關注組件本身即可。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章