MySQL垂直分庫(kù),水平分庫(kù),垂直分表,水平分表
之前經(jīng)常被問道這些分庫(kù)分表的概念,只是大概知道,但是具體如何定義的,問什么這么定義還是不太理解,今天對(duì)著數(shù)據(jù)表中的數(shù)據(jù)沉思的時(shí)候,突然間醒悟,原來這些概念非常好理解,而且可以說水平和垂直這兩個(gè)詞用得恰到好處,非常形象地幫助我們理解它們。
水平分表
顧名思義,水平分表就是把表中的數(shù)據(jù)進(jìn)行了水平切割,意味著按照行進(jìn)行切割,也就是說不同行的數(shù)據(jù)被切割后可能在不同的表中。

如圖所示,根據(jù)水平切割之后,id為1和2的數(shù)據(jù)行會(huì)在一個(gè)表中,id為3,4的數(shù)據(jù)行會(huì)在一個(gè)表中,而id為5的數(shù)據(jù)會(huì)在一個(gè)表中,這就是水平分表。
垂直分表
也是一樣,它的意思是把數(shù)據(jù)表進(jìn)行了垂直分割,原來表中的列被分到了不同的表中。

如圖所示,desc字段被切割后,會(huì)分配到另一張表中。 那么為什么要垂直分表,或者說什么情況下適合垂直分表? 答案就是垂直分表的目的就是將表中的含有大量數(shù)據(jù)的字段,比如text字段,blob字段從表中分離出去,這樣可以大大減輕原表的數(shù)據(jù)壓力,而且這些字段的訪問量沒有其它字段的訪問頻率高,所以這么處理是合適的。
水平分庫(kù)
如果你理解了上面的水平分表和垂直分表,那么數(shù)據(jù)庫(kù)的分割你也會(huì)很好理解。 顧名思義,水平分庫(kù)相當(dāng)于把數(shù)據(jù)庫(kù)水平切割,原來一個(gè)表中的數(shù)據(jù)可能會(huì)分配到不同的數(shù)據(jù)庫(kù)中,這就是水平分庫(kù)。

如圖所示,table1,table2,table3,table4中的數(shù)據(jù)都會(huì)被水平切割一刀,這樣一個(gè)表中的數(shù)據(jù)可能就會(huì)被分配到不同的數(shù)據(jù)庫(kù)中。
垂直分庫(kù)
垂直分庫(kù),就是將數(shù)據(jù)庫(kù)垂直分割,這回一個(gè)表中的數(shù)據(jù)不會(huì)被分配到不同數(shù)據(jù)庫(kù),但是不同表可能會(huì)分配到不同的數(shù)據(jù)庫(kù)。

如圖所示,經(jīng)過垂直分割table1,table2會(huì)分到一個(gè)數(shù)據(jù)庫(kù)db1,而table3,table4會(huì)分配到另一個(gè)數(shù)據(jù)庫(kù)db2。
什么時(shí)候垂直分庫(kù)呢?答案是根據(jù)業(yè)務(wù)邏輯進(jìn)行分割。比如我們可以把用戶表和用戶相關(guān)的表分配到用戶數(shù)據(jù)庫(kù)中,而把商品表和商品相關(guān)的數(shù)據(jù)分配到商品數(shù)據(jù)庫(kù)中。
總結(jié)
總之,無(wú)論是何種分割,我們的目的都是為了減少數(shù)據(jù)庫(kù)的壓力,然后盡可能減少查詢帶來的復(fù)雜性,只要掌握這兩個(gè)核心,其實(shí)概念都是次要的,原理才是重要的。