1.分庫分表:
(1)介紹:
①采用單數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲,存在以下性能瓶頸:
A.IO瓶頸:熱點數(shù)據(jù)太多,數(shù)據(jù)庫緩存不足,產(chǎn)生大量磁盤IO,效率較低。 請求數(shù)據(jù)太多,帶寬不夠,網(wǎng)絡(luò)IO瓶頸。
B.CPU瓶頸:排序、分組、連接查詢、聚合統(tǒng)計等SQL會耗費大量的CPU資源,請求數(shù)太多,CPU出現(xiàn)瓶頸。
②分庫分表的中心思想都是將數(shù)據(jù)分散存儲,使得單一數(shù)據(jù)庫/表的數(shù)據(jù)量變小來緩解單一數(shù)據(jù)庫的性能問題,從而達(dá)到提升數(shù)據(jù)庫性能的目的。
(2)拆分策略:
分庫分表的形式,主要是兩種:垂直拆分和水平拆分。而拆分的粒度,一般又分為分庫和分表,所以組成的拆分策略最終如下:
(3)垂直拆分:
①垂直分庫:以表為依據(jù),根據(jù)業(yè)務(wù)將不同表拆分到不同庫中。
特點:
每個庫的表結(jié)構(gòu)都不一樣。
每個庫的數(shù)據(jù)也不一樣。
所有庫的并集是全量數(shù)據(jù)。
②垂直分表:以字段為依據(jù),根據(jù)字段屬性將不同字段拆分到不同表中。
特點:
每個表的結(jié)構(gòu)都不一樣。
每個表的數(shù)據(jù)也不一樣,一般通過一列(主鍵/外鍵)關(guān)聯(lián)。
所有表的并集是全量數(shù)據(jù)。
(4)水平拆分:
①水平分庫:以字段為依據(jù),按照一定策略,將一個庫的數(shù)據(jù)拆分到多個庫中。
特點:
每個庫的表結(jié)構(gòu)都一樣。
每個庫的數(shù)據(jù)都不一樣。
所有庫的并集是全量數(shù)據(jù)。
②水平分表:以字段為依據(jù),按照一定策略,將一個表的數(shù)據(jù)拆分到多個表中。
特點:
每個表的表結(jié)構(gòu)都一樣。
每個表的數(shù)據(jù)都不一樣。
所有表的并集是全量數(shù)據(jù)。
(5)實現(xiàn)技術(shù):
①shardingJDBC:基于AOP原理,在應(yīng)用程序中對本地執(zhí)行的SQL進(jìn)行攔截,解析、改寫、路由處理。需要自行編碼配置實現(xiàn),只支持java語言,性能較高。
②MyCat:數(shù)據(jù)庫分庫分表中間件,不用調(diào)整代碼即可實現(xiàn)分庫分表,支持多種語言,性能不及前者。
2.MyCat:
Mycat是開源的、活躍的、基于Java語言編寫的MySQL數(shù)據(jù)庫中間件。
在MyCat的整體結(jié)構(gòu)中,分為兩個部分:上面的邏輯結(jié)構(gòu)、下面的物理結(jié)構(gòu)。
MyCat的邏輯結(jié)構(gòu)主要負(fù)責(zé)邏輯庫、邏輯表、分片規(guī)則、分片節(jié)點等邏輯結(jié)構(gòu)的處理,而具體的數(shù)據(jù)存儲還是在物理結(jié)構(gòu),也就是數(shù)據(jù)庫服務(wù)器中存儲的。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧