分庫分布的幾件小事(一)數(shù)據(jù)庫如何拆分

1.為什么要分庫分表

①分庫分表說白了,就是因?yàn)閿?shù)據(jù)量太大了草姻,如果你的單表數(shù)據(jù)量都到了千萬級(jí)別溪椎,那么你的數(shù)據(jù)庫就無法承受高并發(fā)的要求,數(shù)據(jù)庫操作性能就會(huì)出現(xiàn)極大的下降誊锭。

②數(shù)據(jù)庫并發(fā)量太大了表悬,一般而言,一個(gè)數(shù)據(jù)庫最多支撐并發(fā)到2000丧靡,這時(shí)候一定要進(jìn)行擴(kuò)容蟆沫,不然性能會(huì)出現(xiàn)嚴(yán)重下降籽暇。而且一個(gè)健康的單庫并發(fā)值你最好保持在每秒1000左右,不要太大饭庞。那么你可以將一個(gè)庫的數(shù)據(jù)拆分到多個(gè)庫中戒悠,訪問的時(shí)候就訪問一個(gè)庫好了。

2.有哪些分庫分布中間件

比較常見的中間件有cobar但绕、TDDL救崔、atlas、sharding-jdbc捏顺、mycat六孵。

cobar :阿里b2b團(tuán)隊(duì)開發(fā)和開源的,屬于proxy層方案幅骄。已經(jīng)好幾年沒有進(jìn)行更新了劫窒,基本沒啥人用。而且不支持讀寫分離拆座、存儲(chǔ)過程主巍、跨庫join和分頁等操作。

TDDL :淘寶團(tuán)隊(duì)開發(fā)的挪凑,屬于client層方案孕索,不支持join,但是支持讀寫分離躏碳。目前使用的也不多搞旭,因?yàn)檫€依賴淘寶的diamond配置管理系統(tǒng)。

atlas :360開源的菇绵,屬于proxy層方案肄渗,以前有一些公司在用,但是已經(jīng)好幾年沒有更新了咬最,所以現(xiàn)在用的也不多翎嫡。

sharding-jdbc :當(dāng)當(dāng)開源的,屬于client層方案永乌。SQL語法支持多惑申,沒有太多的限制,從2.0版本開始支持分庫分表翅雏、讀寫分離圈驼、分布式id生成、柔性事務(wù)(最大努力送達(dá)型事務(wù)枚荣、TCC事務(wù))。而且現(xiàn)在使用較多啼肩。

myCat :基于cobar改造橄妆,屬于proxy層方案衙伶,支持的功能完善,而且目前應(yīng)該是非澈δ耄火的而且不斷流行的數(shù)據(jù)庫中間件矢劲,社區(qū)很活躍,也有一些公司開始在用了慌随。

3.分布式中間件類型

proxy類型
proxy類型的中間件就是一個(gè)客戶端芬沉,需要直接部署一個(gè)中間件,去進(jìn)行分庫分表阁猜。服務(wù)端將sql發(fā)送到中間件客戶端去進(jìn)行不同表庫的操作丸逸。如果中間件客戶端不可用將直接導(dǎo)致無法進(jìn)行分庫分表,而且要走網(wǎng)絡(luò)耗時(shí)剃袍。

client
client不需要單獨(dú)部署中間件客戶端黄刚,運(yùn)維成本低,中間件就是一個(gè)jar包民效,直接在項(xiàng)目中導(dǎo)入憔维、配置就可以完成分庫分表,而且不需要代理層的二次轉(zhuǎn)發(fā)畏邢,性能高點(diǎn)业扒,但是遇到升級(jí)等操作需要重新發(fā)布版本,各個(gè)系統(tǒng)都需要耦合sharding-jbdc的依賴舒萎。

4.垂直拆分與水平拆分

垂直拆分
垂直拆分的意思程储,就是把一個(gè)有很多字段的表給拆分成多個(gè)表,或者是多個(gè)庫上去逆甜。每個(gè)庫表的結(jié)構(gòu)都不一樣虱肄,每個(gè)庫表都包含部分字段。一般來說交煞,會(huì)將較少的訪問頻率很高的字段放到一個(gè)表里去咏窿,然后將較多的訪問頻率很低的字段放到另外一個(gè)表里去。因?yàn)閿?shù)據(jù)庫是有緩存的素征,你訪問頻率高的行字段越少集嵌,就可以在緩存里緩存更多的行,性能就越好御毅。這個(gè)一般在表層面做的較多一些根欧。
這個(gè)其實(shí)挺常見的,不一定我說端蛆,大家很多同學(xué)可能自己都做過凤粗,把一個(gè)大表拆開,訂單表今豆、訂單支付表嫌拣、訂單商品表柔袁。

水平拆分
水平拆分的意思,就是把一個(gè)表的數(shù)據(jù)給弄到多個(gè)庫的多個(gè)表里去异逐,但是每個(gè)庫的表結(jié)構(gòu)都一樣捶索,只不過每個(gè)庫表放的數(shù)據(jù)是不同的,所有庫表的數(shù)據(jù)加起來就是全部數(shù)據(jù)灰瞻。水平拆分的意義腥例,就是將數(shù)據(jù)均勻放更多的庫里,然后用多個(gè)庫來抗更高的并發(fā)酝润,還有就是用多個(gè)庫的存儲(chǔ)容量來進(jìn)行擴(kuò)容燎竖。

表的拆分
還有表層面的拆分,就是分表袍祖,將一個(gè)表變成N個(gè)表底瓣,就是讓每個(gè)表的數(shù)據(jù)量控制在一定范圍內(nèi),保證SQL的性能蕉陋。否則單表數(shù)據(jù)量越大捐凭,SQL性能就越差。一般是200萬行左右凳鬓,不要太多茁肠,但是也得看具體你怎么操作,也可能是500萬缩举,或者是100萬垦梆。你的SQL越復(fù)雜,就最好讓單表行數(shù)越少仅孩。

一般來說托猩,垂直拆分,你可以在表層面來做辽慕,對(duì)一些字段特別多的表做一下拆分京腥;水平拆分,是并發(fā)承載不了溅蛉,或者是數(shù)據(jù)量太大公浪,容量承載不了,你給拆了船侧,按什么字段來拆欠气,你自己想好;分表镜撩,你考慮一下预柒,你如果哪怕是拆到每個(gè)庫里去,并發(fā)和容量都o(jì)k了,但是每個(gè)庫的表還是太大了宜鸯,那么你就分表人灼,將這個(gè)表分開,保證每個(gè)表的數(shù)據(jù)量并不是很大顾翼。

5.兩種分庫分表方式

range方式
就是每個(gè)庫一段連續(xù)的數(shù)據(jù),這個(gè)一般是按比如時(shí)間范圍來的奈泪,但是這種一般較少用适贸,因?yàn)楹苋菀桩a(chǎn)生熱點(diǎn)問題,大量的流量都打在最新的數(shù)據(jù)上了涝桅。

range來分拜姿,好處在于說,后面擴(kuò)容的時(shí)候冯遂,就很容易蕊肥,因?yàn)槟阒灰A(yù)備好,給每個(gè)月都準(zhǔn)備一個(gè)庫就可以了蛤肌,到了一個(gè)新的月份的時(shí)候壁却,自然而然,就會(huì)寫新的庫了裸准;缺點(diǎn)展东,但是大部分的請(qǐng)求,都是訪問最新的數(shù)據(jù)炒俱。實(shí)際生產(chǎn)用range盐肃,要看場景,你的用戶不是僅僅訪問最新的數(shù)據(jù)权悟,而是均勻的訪問現(xiàn)在的數(shù)據(jù)以及歷史的數(shù)據(jù)

hash方式
按照某個(gè)字段hash一下均勻分散砸王,這個(gè)較為常用。

hash分法峦阁,好處在于說谦铃,可以平均分配沒給庫的數(shù)據(jù)量和請(qǐng)求壓力;壞處在于說擴(kuò)容起來比較麻煩拇派,會(huì)有一個(gè)數(shù)據(jù)遷移的這么一個(gè)過程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荷辕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子件豌,更是在濱河造成了極大的恐慌疮方,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茧彤,死亡現(xiàn)場離奇詭異骡显,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門惫谤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壁顶,“玉大人,你說我怎么就攤上這事溜歪∪糇ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵蝴猪,是天一觀的道長调衰。 經(jīng)常有香客問我,道長自阱,這世上最難降的妖魔是什么嚎莉? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮沛豌,結(jié)果婚禮上趋箩,老公的妹妹穿的比我還像新娘。我一直安慰自己加派,他們只是感情好叫确,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芍锦,像睡著了一般启妹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醉旦,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天饶米,我揣著相機(jī)與錄音,去河邊找鬼车胡。 笑死檬输,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匈棘。 我是一名探鬼主播丧慈,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼主卫!你這毒婦竟也來了逃默?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤簇搅,失蹤者是張志新(化名)和其女友劉穎完域,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘩将,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吟税,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年凹耙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肠仪。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肖抱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出异旧,到底是詐尸還是另有隱情意述,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布吮蛹,位于F島的核電站欲险,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匹涮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一槐壳、第九天 我趴在偏房一處隱蔽的房頂上張望然低。 院中可真熱鬧,春花似錦务唐、人聲如沸雳攘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吨灭。三九已至,卻和暖如春刑巧,著一層夾襖步出監(jiān)牢的瞬間喧兄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工啊楚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吠冤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓恭理,卻偏偏與公主長得像拯辙,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颜价,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容