業(yè)務場景
我們都知道一個數(shù)據庫的連接數(shù)是有上限的,當我們的業(yè)務系統(tǒng)變得繁雜時,如果都存儲在一個數(shù)據庫中,那么勢必會因為數(shù)據庫達到瓶頸;此時我們就需要對數(shù)據庫中表進行拆分,將其分散到多個數(shù)據庫中去。
數(shù)據庫拆分原則:就是指根據系統(tǒng)業(yè)務實際情況,將原本放在一個數(shù)據庫中的數(shù)據分散放到多個數(shù)據庫中去,減少單庫的負載。
舉個例子:比如說現(xiàn)在我們有機票和火車票的業(yè)務,起初由于業(yè)務量小因此都放在一個數(shù)據庫里面得,隨著業(yè)務量的上漲(假如并發(fā)到達3000,MySQL數(shù)據庫最大支持2000),此時數(shù)據庫已經不堪重負;即使你加入緩存組件這些依然解決不了問題(因為你的緩存數(shù)據始終來源于數(shù)據庫)。
那么就可以按照業(yè)務情況進行數(shù)據拆分,將機票業(yè)務的信息和火車票業(yè)務的信息分別放到一個數(shù)據庫中去,這樣就將原來一個庫的壓力分散到2個庫上去了。
垂直拆分
垂直切分:簡單的說就是將數(shù)據庫中的各個表,依據業(yè)務情況將一些表放在一個數(shù)據庫中,一些表放在另外一個數(shù)據庫中,
比如商城這些的數(shù)據庫端按照業(yè)務垂直拆分:按照業(yè)務訂單數(shù)據庫、用戶數(shù)據庫、商品數(shù)據庫等進行拆分。

水平拆分
水平拆分:簡單來說就是將一張表的數(shù)據分別存儲到多個數(shù)據庫中,所以一個庫中只保存一部分數(shù)據;

數(shù)據庫拆分原則

- 優(yōu)先考慮使用緩存來降低對數(shù)據庫的讀操作。
- 再考慮讀寫分離,降低數(shù)據庫寫操作。
- 最后開始數(shù)據拆分,切分模式: 首先垂直(縱向)拆分、再次水平拆分。
- 首先考慮按照業(yè)務垂直拆分。
- 再考慮水平拆分:先分庫(設置數(shù)據路由規(guī)則,把數(shù)據分配到不同的庫中);可以通過mycat來處理
- 最后再考慮分表,單表拆分到數(shù)據1000萬以內。