分庫(kù)分表技術(shù)概覽

背景

分庫(kù)分表這個(gè)詞相信很多人都不陌生财岔,在互聯(lián)網(wǎng)公司數(shù)據(jù)到達(dá)一定規(guī)模的時(shí)候,多數(shù)都會(huì)對(duì)數(shù)據(jù)進(jìn)行分庫(kù)分表河爹,或者也有人叫分片使鹅,英文翻譯為Sharding;更加準(zhǔn)確來(lái)說(shuō)我們常常關(guān)心的是水平分片昌抠,即單個(gè)業(yè)務(wù)的某些表到達(dá)一定規(guī)模后患朱,即使建立索引也無(wú)法從根本上帶來(lái)很大的性能提升,這時(shí)我們會(huì)考慮把單表拆分炊苫,以MySQL為例裁厅,B+樹索引的深度會(huì)隨著記錄的增多而逐漸加深,根據(jù)索引查詢的開銷也會(huì)越來(lái)越大侨艾,而單表拆分成多個(gè)表之后执虹,B+樹深度降低,每個(gè)單表獨(dú)立查詢的速度也會(huì)加快唠梨,如果同時(shí)還分庫(kù)的話袋励,并且在不同的實(shí)例上,大量的查詢壓力也會(huì)分擔(dān)到不同的機(jī)器上,這對(duì)單個(gè)數(shù)據(jù)庫(kù)機(jī)器減壓也帶來(lái)好處茬故。

分庫(kù)分表的技術(shù)方案總體上來(lái)講分為兩大類:應(yīng)用層依賴類中間件盖灸、中間層代理類中間件。

應(yīng)用層依賴類中間件

這類分庫(kù)分表中間件的特點(diǎn)就是和應(yīng)用強(qiáng)耦合磺芭,需要應(yīng)用顯示依賴相應(yīng)的jar包(以Java為例)赁炎,比如知名的TDDL、當(dāng)當(dāng)開源的sharding-jdbc钾腺、蘑菇街的TSharding徙垫、攜程開源的Ctrip-DAL、支付寶開源但比較低調(diào)的zdal等放棒。

此類中間件的基本思路就是重新實(shí)現(xiàn)JDBC的API姻报,通過重新實(shí)現(xiàn)DataSource、PrepareStatement等操作數(shù)據(jù)庫(kù)的接口间螟,讓應(yīng)用層在基本(注意:這里用了基本)不改變業(yè)務(wù)代碼的情況下透明地實(shí)現(xiàn)分庫(kù)分表的能力逗抑。中間件給上層應(yīng)用提供熟悉的JDBC API,內(nèi)部通過sql解析寒亥、sql重寫邮府、sql路由等一系列的準(zhǔn)備工作獲取真正可執(zhí)行的sql,然后底層再按照傳統(tǒng)的方法(比如數(shù)據(jù)庫(kù)連接池)獲取物理連接來(lái)執(zhí)行sql溉奕,最后把數(shù)據(jù)結(jié)果合并處理成ResultSet返回給應(yīng)用層褂傀。

此類中間件的優(yōu)點(diǎn)很明顯,就是無(wú)需額外部署加勤,只要和應(yīng)用綁定一起發(fā)布即可仙辟,但是缺點(diǎn)也很明顯,就是不能跨語(yǔ)言鳄梅,比如Java寫的sharding-jdbc顯然不能用在C#項(xiàng)目中叠国,所以攜程的dal也要重新寫一套C#的客戶端。

中間層代理類中間件

這類分庫(kù)分表中間件的核心原理是在應(yīng)用和數(shù)據(jù)庫(kù)的連接之間搭起一個(gè)代理層戴尸,上層應(yīng)用以標(biāo)準(zhǔn)的MySQL協(xié)議來(lái)連接代理層粟焊,然后代理層負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求到底層的MySQL物理實(shí)例,這種方式對(duì)應(yīng)用只有一個(gè)要求孙蒙,就是只要用MySQL協(xié)議來(lái)通信即可项棠,所以用MySQL Workbench這種純的客戶端都可以直接連接你的分布式數(shù)據(jù)庫(kù),自然也天然支持所有的編程語(yǔ)言挎峦。比較有代表性的產(chǎn)品有開創(chuàng)性質(zhì)的Amoeba香追、阿里開源的Cobar、社區(qū)發(fā)展比較好的Mycat 等坦胶。

在技術(shù)實(shí)現(xiàn)上除了和應(yīng)用層依賴類中間件基本相似外透典,代理類的分庫(kù)分表產(chǎn)品必須實(shí)現(xiàn)標(biāo)準(zhǔn)的MySQL協(xié)議晴楔,某種意義上講數(shù)據(jù)庫(kù)代理層轉(zhuǎn)發(fā)的就是MySQL協(xié)議請(qǐng)求,就像Nginx轉(zhuǎn)發(fā)的是Http協(xié)議請(qǐng)求峭咒。

上述無(wú)論哪種類型的產(chǎn)品税弃,除了實(shí)現(xiàn)分庫(kù)分表這一主要功能外,都會(huì)額外實(shí)現(xiàn)一些其他很有實(shí)用價(jià)值的功能讹语,比如讀寫分離钙皮、負(fù)載均衡等蜂科。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顽决,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子导匣,更是在濱河造成了極大的恐慌才菠,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贡定,死亡現(xiàn)場(chǎng)離奇詭異赋访,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缓待,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蚓耽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人旋炒,你說(shuō)我怎么就攤上這事步悠。” “怎么了瘫镇?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵鼎兽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我铣除,道長(zhǎng)谚咬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任尚粘,我火速辦了婚禮择卦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郎嫁。我一直安慰自己互捌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布行剂。 她就那樣靜靜地躺著秕噪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厚宰。 梳的紋絲不亂的頭發(fā)上腌巾,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天遂填,我揣著相機(jī)與錄音,去河邊找鬼澈蝙。 笑死吓坚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灯荧。 我是一名探鬼主播礁击,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逗载!你這毒婦竟也來(lái)了哆窿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厉斟,失蹤者是張志新(化名)和其女友劉穎挚躯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擦秽,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡码荔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了感挥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缩搅。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖触幼,靈堂內(nèi)的尸體忽然破棺而出硼瓣,到底是詐尸還是另有隱情,我是刑警寧澤域蜗,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布巨双,位于F島的核電站,受9級(jí)特大地震影響霉祸,放射性物質(zhì)發(fā)生泄漏筑累。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一丝蹭、第九天 我趴在偏房一處隱蔽的房頂上張望慢宗。 院中可真熱鬧,春花似錦奔穿、人聲如沸镜沽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缅茉。三九已至,卻和暖如春男摧,著一層夾襖步出監(jiān)牢的瞬間蔬墩,已是汗流浹背译打。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拇颅,地道東北人奏司。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像樟插,于是被迫代替她去往敵國(guó)和親韵洋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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