數(shù)據(jù)庫分庫分表

為什么分庫分表?(設(shè)計(jì)高并發(fā)系統(tǒng)時(shí)候昼窗,數(shù)據(jù)庫層面該如何設(shè)計(jì)是趴?)

分庫和分表是兩回事,大家別搞混了澄惊,可能是光分庫不分表唆途,也可能是光分表不分庫,都有可能掸驱。

分表:

就是把一個(gè)表的數(shù)據(jù)放到多個(gè)表中肛搬,然后查詢的時(shí)候你就查一個(gè)表。比如按照用戶id來分表毕贼,將一個(gè)用戶的數(shù)據(jù)就放在一個(gè)表中温赔。然后操作的時(shí)候你對一個(gè)用戶就操作那個(gè)表就好了。這樣可以控制每個(gè)表的數(shù)據(jù)量在可控的范圍內(nèi)鬼癣,比如每個(gè)表就固定在200萬以內(nèi)陶贼。

分庫:

就是你一個(gè)庫一般我們經(jīng)驗(yàn)而言,最多支撐到并發(fā)2000待秃,一定要擴(kuò)容了骇窍,而且一個(gè)健康的單庫并發(fā)值你最好保持在每秒1000左右,不要太大锥余。那么你可以將一個(gè)庫的數(shù)據(jù)拆分到多個(gè)庫中腹纳,訪問的時(shí)候就訪問一個(gè)庫好了。


分庫分表中間件,不同的分庫分表中間件有什么優(yōu)點(diǎn)和缺點(diǎn)嘲恍?
常見的中間件:cobar足画、TDDL、atlas佃牛,sharding-jdbc淹辞、mycat
  • cobar:阿里b2b團(tuán)隊(duì)開發(fā)和開源的,屬于proxy層方案俘侠。早些年還可以用象缀,但是最近幾年都沒更新了,基本沒啥人用爷速,差不多算是被拋棄的狀態(tài)吧央星。而且不支持讀寫分離、存儲過程惫东、跨庫join和分頁等操作莉给。
  • TDDL:淘寶團(tuán)隊(duì)開發(fā)的,屬于client層方案廉沮。不支持join颓遏、多表查詢等語法,就是基本的crud語法是ok滞时,但是支持讀寫分離叁幢。目前使用的也不多,因?yàn)檫€依賴淘寶的diamond配置管理系統(tǒng)坪稽。
  • atlas:360開源的曼玩,屬于proxy層方案,以前是有一些公司在用的刽漂,但是確實(shí)有一個(gè)很大的問題就是社區(qū)最新的維護(hù)都在5年前了演训。所以,現(xiàn)在用的公司基本也很少了贝咙。
  • sharding-jdbc:當(dāng)當(dāng)開源的样悟,屬于client層方案。確實(shí)之前用的還比較多一些庭猩,因?yàn)镾QL語法支持也比較多窟她,沒有太多限制,而且目前推出到了2.0版本蔼水,支持分庫分表震糖、讀寫分離、分布式id生成趴腋、柔性事務(wù)(最大努力送達(dá)型事務(wù)吊说、TCC事務(wù))论咏。而且確實(shí)之前使用的公司會比較多一些(這個(gè)在官網(wǎng)有登記使用的公司,可以看到從2017年一直到現(xiàn)在颁井,是不少公司在用的)厅贪,目前社區(qū)也還一直在開發(fā)和維護(hù),還算是比較活躍雅宾,個(gè)人認(rèn)為算是一個(gè)現(xiàn)在也可以選擇的方案养涮。
  • mycat:基于cobar改造的,屬于proxy層方案眉抬,支持的功能非常完善贯吓,而且目前應(yīng)該是非常火的而且不斷流行的數(shù)據(jù)庫中間件蜀变,社區(qū)很活躍悄谐,也有一些公司開始在用了。但是確實(shí)相比于sharding jdbc來說昏苏,年輕一些尊沸,經(jīng)歷的錘煉少一些威沫。

sharding-jdbc這種client層方案的優(yōu)點(diǎn)在于不用部署贤惯,運(yùn)維成本低,不需要代理層的二次轉(zhuǎn)發(fā)請求棒掠,性能很高孵构,但是如果遇到升級啥的需要各個(gè)系統(tǒng)都重新升級版本再發(fā)布,各個(gè)系統(tǒng)都需要耦合sharding-jdbc的依賴烟很。
mycat這種proxy層方案的缺點(diǎn)在于需要部署颈墅,自己及運(yùn)維一套中間件,運(yùn)維成本高雾袱,但是好處在于對于各個(gè)項(xiàng)目是透明的恤筛,如果遇到升級之類的在中間件那里搞就好。


如何對數(shù)據(jù)庫垂直拆分或水平拆分的

水平拆分:把一個(gè)表的數(shù)據(jù)給弄到多個(gè)庫的多個(gè)表中芹橡,但是每個(gè)庫的表結(jié)構(gòu)都一樣毒坛,只不過每個(gè)庫表放的數(shù)據(jù)是不同的,所有庫表的數(shù)據(jù)加起來就是全部數(shù)據(jù)林说,水平拆分的意義煎殷,就是將數(shù)據(jù)均勻放到更多庫中,然后用多個(gè)庫來抗高并發(fā)腿箩,還有就是用多個(gè)庫的存儲容量來進(jìn)行擴(kuò)容豪直。
垂直拆分:就是把一個(gè)很多字段的表拆分成多個(gè)表,或多個(gè)庫中珠移,每個(gè)庫的結(jié)構(gòu)都不一樣弓乙,每個(gè)庫表都包含部分字段末融,一般來說,將較少的訪問頻率很高字段放在一個(gè)表暇韧,然后將較多的訪問頻率很低的字段放到另外一個(gè)表中滑潘,因?yàn)閿?shù)據(jù)庫是有緩存的,你訪問頻率高的行字段越少锨咙,就可以在緩存里緩存更多行语卤,性能就越好,這個(gè)一般在表層面做的較多酪刀。

兩種分表分庫方式(range&hash)
  • range:
    每個(gè)庫一段連續(xù)的數(shù)據(jù)粹舵,這個(gè)一般都是按比如時(shí)間范圍來的,但是這種一般較少用骂倘,很容易產(chǎn)生熱點(diǎn)問題眼滤,大量的流量打在最新的數(shù)據(jù)上。
    好處在于历涝,后面擴(kuò)展時(shí)诅需,很容易,因?yàn)槟阒灰A(yù)備好荧库,給每個(gè)月都準(zhǔn)備一個(gè)庫堰塌,到了一個(gè)新的月份,自然就寫新的庫分衫。
    缺點(diǎn)在于场刑,大部分請求都是訪問新的數(shù)據(jù),實(shí)際生產(chǎn)使用range蚪战,要看場景牵现,用戶不僅僅訪問最新的數(shù)據(jù),而是均勻的訪問現(xiàn)在的數(shù)據(jù)以及歷史數(shù)據(jù)邀桑。
  • hash:
    按照某個(gè)字段hash一下均勻分散
    好處在于瞎疼,可以平均分配每個(gè)庫的數(shù)據(jù)量和請求壓力。
    壞處在于壁畸,擴(kuò)容起來比較麻煩贼急,會有一個(gè)數(shù)據(jù)遷移的過程。
01_分庫分表的由來.png
02_數(shù)據(jù)庫如何拆分.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓤摧,一起剝皮案震驚了整個(gè)濱河市竿裂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌照弥,老刑警劉巖腻异,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異这揣,居然都是意外死亡悔常,警方通過查閱死者的電腦和手機(jī)影斑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來机打,“玉大人矫户,你說我怎么就攤上這事〔醒” “怎么了皆辽?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長芥挣。 經(jīng)常有香客問我驱闷,道長,這世上最難降的妖魔是什么空免? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任空另,我火速辦了婚禮,結(jié)果婚禮上蹋砚,老公的妹妹穿的比我還像新娘扼菠。我一直安慰自己,他們只是感情好坝咐,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布循榆。 她就那樣靜靜地躺著,像睡著了一般畅厢。 火紅的嫁衣襯著肌膚如雪冯痢。 梳的紋絲不亂的頭發(fā)上氮昧,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天框杜,我揣著相機(jī)與錄音,去河邊找鬼袖肥。 笑死咪辱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椎组。 我是一名探鬼主播油狂,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寸癌!你這毒婦竟也來了专筷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蒸苇,失蹤者是張志新(化名)和其女友劉穎磷蛹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溪烤,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡味咳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年庇勃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片槽驶。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡责嚷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掂铐,到底是詐尸還是另有隱情罕拂,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布全陨,位于F島的核電站聂受,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏烤镐。R本人自食惡果不足惜蛋济,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炮叶。 院中可真熱鬧碗旅,春花似錦、人聲如沸镜悉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侣肄。三九已至旧困,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稼锅,已是汗流浹背吼具。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矩距,地道東北人拗盒。 一個(gè)月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像锥债,于是被迫代替她去往敵國和親陡蝇。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361