首頁(yè)技術(shù)文章正文

分庫(kù)分表的目的是什么?幾種好用的數(shù)據(jù)庫(kù)拆分方法

更新時(shí)間:2022-10-11 來(lái)源:黑馬程序員 瀏覽量:

隨著互聯(lián)網(wǎng)及移動(dòng)互聯(lián)網(wǎng)的發(fā)展,應(yīng)用系統(tǒng)的數(shù)據(jù)量也是成指數(shù)式增長(zhǎng),若采用單數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ),存在以下性能瓶頸:

1. IO瓶頸:熱點(diǎn)數(shù)據(jù)太多,數(shù)據(jù)庫(kù)緩存不足,產(chǎn)生大量磁盤(pán)IO,效率較低。 請(qǐng)求數(shù)據(jù)太多,帶寬不夠,網(wǎng)絡(luò)IO瓶頸。

2. CPU瓶頸:排序、分組、連接查詢、聚合統(tǒng)計(jì)等SQL會(huì)耗費(fèi)大量的CPU資源,請(qǐng)求數(shù)太多,CPU出現(xiàn)瓶頸。

為了解決上述問(wèn)題,我們需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行分庫(kù)分表處理。

分庫(kù)分表處理

分庫(kù)分表的中心思想都是將數(shù)據(jù)分散存儲(chǔ),使得單一數(shù)據(jù)庫(kù)/表的數(shù)據(jù)量變小來(lái)緩解單一數(shù)據(jù)庫(kù)的性能問(wèn)題,從而達(dá)到提升數(shù)據(jù)庫(kù)性能的目的。

拆分策略

分庫(kù)分表的形式,主要是兩種:垂直拆分和水平拆分。而拆分的粒度,一般又分為分庫(kù)和分表,所以組成的拆分策略最終如下:

數(shù)據(jù)庫(kù)拆分策略

垂直拆分

垂直分庫(kù)以表為依據(jù),根據(jù)業(yè)務(wù)將不同表拆分到不同庫(kù)中。所以拆分完的每個(gè)庫(kù)的表結(jié)構(gòu)都不一樣。每個(gè)庫(kù)的數(shù)據(jù)也不一樣。所有庫(kù)的并集是全量數(shù)據(jù)。 

垂直拆分

垂直分表

垂直分表以字段為依據(jù),根據(jù)字段屬性將不同字段拆分到不同表中。并且每個(gè)表的結(jié)構(gòu)都不一樣。每個(gè)表的數(shù)據(jù)也不一樣,一般通過(guò)一列(主鍵/外鍵)關(guān)聯(lián)。所有表的并集是全量數(shù)據(jù)。

垂直拆分

水平拆分

(1)水平分庫(kù)

水平分庫(kù):以字段為依據(jù),按照一定策略,將一個(gè)庫(kù)的數(shù)據(jù)拆分到多個(gè)庫(kù)中。在水平分庫(kù)中每個(gè)庫(kù)的表結(jié)構(gòu)都一樣。每個(gè)庫(kù)的數(shù)據(jù)都不一樣。所有庫(kù)的并集是全量數(shù)據(jù)。

水平分庫(kù)

(2)水平分表

水平分表以字段為依據(jù),按照一定策略,將一個(gè)表的數(shù)據(jù)拆分到多個(gè)表中。特點(diǎn):每個(gè)表的表結(jié)構(gòu)都一樣。每個(gè)表的數(shù)據(jù)都不一樣。所有表的并集是全量數(shù)據(jù)。

在業(yè)務(wù)系統(tǒng)中,為了緩解磁盤(pán)IO及CPU的性能瓶頸,到底是垂直拆分,還是水平拆分;具體是分庫(kù),還是分表,都需要根據(jù)具體的業(yè)務(wù)需求具體分析。

水平分表

實(shí)現(xiàn)技術(shù)

shardingJDBC:基于AOP原理,在應(yīng)用程序中對(duì)本地執(zhí)行的SQL進(jìn)行攔截,解析、改寫(xiě)、路由處理。需要自行編碼配置實(shí)現(xiàn),只支持java語(yǔ)言,性能較高。

MyCat:數(shù)據(jù)庫(kù)分庫(kù)分表中間件,不用調(diào)整代碼即可實(shí)現(xiàn)分庫(kù)分表,支持多種語(yǔ)言,性能不及前者。

實(shí)現(xiàn)技術(shù)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!