数据库分库分表的几种方式
生活随笔
收集整理的這篇文章主要介紹了
数据库分库分表的几种方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
隨著業務的不斷增長,數據庫中的數據也會越來越多,數據庫的壓力也會越來越大,我們會發現,在業務繁忙的時候,數據庫的性能會直線下降,這時為了保證良好的性能,不得不想辦法來分擔數據庫的壓力,前面在介紹數據庫架構高可用時,我們提到過,如果是為了分擔數據庫的讀負載,我們可以采用主從復制的方式,給原來的數據庫,增加幾臺具有相同數據的從服務器,這樣呢通過讀寫分離的方式,我們就可以把數據庫的讀負載,分擔到不同的從數據庫服務器中了,這時在一段時間內呢,可能已經可以解決,我們的數據庫性能問題了,但是隨著業務的進一步發展,我們會發現,這時單一的主數據庫呢,已經負擔不了寫的負載了,那么這時我們要怎么辦呢,當然我們可以升級主數據庫的硬件,但是硬件的擴充,也只能解決一時的問題,更何況MYSQL對于CPU的支持呢,也是有一個限度的,所以升級服務器的硬件,并不能完美的解決我們所遇到的問題,那么我們只能對原有的主數據庫服務器進行拆分了,通常來說,對主數據庫服務器的拆分,有下面幾種方式,第一種方式呢,是把原來單一的主數據庫服務器,多個數據庫,拆分到不同的物理服務器中,數據庫實例中去,我們知道,在一個MYSQL實例中,可能包含多個邏輯數據庫,比如下圖中的MYSQL節點,就包含了訂單庫,用戶庫,促銷庫,有一點我們要注意,這里所說的MYSQL節點,并不是代表一臺MYSQL數據庫,這里的節點代表的是MYSQL集群,也就是一組多從的數據庫環境,只不過在這個集群中呢,所有數據庫的數據全都是一致的,所以為了方便,我們就稱之為一個節點,那么單一節點的第一種方式呢,也就是把這個節點中的不同數據庫,拆分到不同的節點上去,以上面的MYSQL節點為例呢,我們可以把這個節點數據庫,拆分到不同的三個節點上,如果MYSQL節點一中,只包含訂單庫,增加MYSQL節點二,存儲用戶庫,節點三來存儲促銷庫,這樣我們就把單一節點的寫案列,分攤到了三個節點上,這種做法的好處呢,是相對來說,實現數據庫的拆分比較簡單,特別是如果我們的業務應用,本身不允許跨庫查詢的情況下,那么實現這種拆分呢,實際上只要對不同的數據庫,連接進行一下配置就可以了,缺點呢就是如果我們本身的寫壓力,就是集中在一個數據庫中的話,比如我們原來的寫壓力呢,集中在訂單數據庫中,那么這樣拆分后呢,實際上并不能減少多少MYSQL節點一的寫負載,那么接下來呢,我們再來看看分庫分表的第二種方式,就像前面所說的,如果把一個數據庫遷移到一個獨立節點中后,還是發現這個節點的主數據庫呢,仍然不能負擔這個數據庫的寫負載,我們要怎樣處理呢,這個時候我們就可以使用分庫分表的第二種方式了
我們就可以使用分庫分表的第二種方式了,就是把原來一個邏輯數據庫中的表,分離到不同節點的不同數據庫中,一個數據庫中呢,會有很多的表,這些表會記錄不同主題的數據,比如我們前面介紹的訂單數據庫中,既可以存放訂單的相關信息,也可以存放商品的相關信息表,和購物車的相關信息表,不過通過分析,我們發現,這個數據庫的主要寫壓力呢,來源于購物車,和訂單的相關表,那么這個時候我們就可以單獨的把這兩組表拆分到不同的數據庫節點中去,這樣拆分后呢,每一個數據庫實際上承擔的,實際上是原來數據庫表的一部分壓力,這樣就可以減輕原有數據庫,寫負載的目的,使用這種方法呢,可以在一定的時間內,來解決我們的問題,但是隨著我們業務的進一步發展,這時候我們又發現,訂單的相關信息表,所在的數據庫節點呢,又出現寫壓力的問題,那么這個時候呢,又要如何處理呢,如果再想按照主體進行拆分表的話,顯然是不可能的了,所以這時我們就要使用分庫分表的大招了,也就是傳說中的表的水平拆分
?
總結
以上是生活随笔為你收集整理的数据库分库分表的几种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特定SQL的查询优化
- 下一篇: 数据库分片前的准备