MySQL 中的分庫分表

分庫和分表解決了什么問題我碟?

把以前存在一個(gè)數(shù)據(jù)庫實(shí)例里的數(shù)據(jù)拆分成多個(gè)數(shù)據(jù)庫實(shí)例,部署在不同的服務(wù)器中姚建,這是分庫矫俺。
分庫是為了解決服務(wù)器資源受單機(jī)限制,頂不住高并發(fā)訪問的問題,把請(qǐng)求分配到多臺(tái)服務(wù)器上厘托,降低服務(wù)器壓力友雳。

把以前存在一張表里面的數(shù)據(jù)拆分成多張表,這是分表铅匹。
分表是為了解決由于單張表數(shù)據(jù)量多大押赊,而導(dǎo)致查詢慢的問題。

一般怎么分庫包斑?

一般分庫都是按照業(yè)務(wù)劃分的流礁,比如訂單庫、用戶庫舰始。


分庫.png
分庫會(huì)帶來哪些問題崇棠?
  • 事務(wù)問題
    關(guān)系型數(shù)據(jù)庫,有很大一點(diǎn)在于它保證事務(wù)完整性丸卷,分庫之后單機(jī)事務(wù)就用不上了枕稀,必須使用分布式事務(wù)來解決。

  • 連表JOIN 查詢問題
    在一個(gè)庫中的時(shí)候我們還可以利用 JOIN 來連表查詢谜嫉,而跨庫了之后就無法使用 JOIN 了萎坷。解決辦法:

    1. 就是在業(yè)務(wù)代碼中進(jìn)行關(guān)聯(lián),也就是先把一個(gè)表的數(shù)據(jù)查出來沐兰,然后通過得到的結(jié)果再去查另一張表哆档,然后利用代碼來關(guān)聯(lián)得到最終的結(jié)果。
    2. 適當(dāng)?shù)娜哂嘁恍┳侄巫〈常苊釰OIN操作
一般怎么分表
  • 垂直分表
    垂直分表的原理比較簡單瓜浸,一般就是把某幾列拆成一個(gè)新表,這樣單行數(shù)據(jù)就會(huì)變小比原,B+樹里的單個(gè)數(shù)據(jù)頁(固定16kb)內(nèi)能放入的行數(shù)就會(huì)變多插佛,從而使單表能放入更多的數(shù)據(jù)。這樣內(nèi)存存放更多有用的數(shù)據(jù)量窘,就減少了磁盤的訪問次數(shù)雇寇,性能就得到提升。

    垂直分表.png
  • 水平分表


    水平分表.png

    分表算法可以分為:Hash 路由蚌铜,范圍路由锨侯,路由表

    • Hash 路由
      其實(shí)就是選擇表中的某一列,然后進(jìn)行 Hash 運(yùn)算冬殃,將 Hash 運(yùn)算得到的結(jié)果再對(duì)子表數(shù)進(jìn)行取模囚痴,這樣就能均勻的將數(shù)據(jù)分到不同的子表上。

      • 優(yōu)點(diǎn)是:
        數(shù)據(jù)分布均勻
      • 缺點(diǎn)是:
        就是增加子表的時(shí)候麻煩审葬,得重新映射數(shù)據(jù)
    • 范圍路由
      其實(shí)很簡單渡讼,可以是時(shí)間骂束,也可以是地址,表示一定的范圍的即可成箫。
      比如本來一張 User 表,我可以分 User_HZ旨枯、User_BJ蹬昌、User_SH,按照地名來劃分 User攀隔。
      比如 log 表皂贩,我可以將表分為 log_202103、 log_202104昆汹,把日志按照年月來劃分明刷。

    • 路由表
      是專門搞個(gè)表來記錄路由信息,一般不怎么用满粗。

分表會(huì)帶來哪些問題辈末?

垂直分表還好,就是查詢數(shù)據(jù)需要關(guān)聯(lián)一下映皆。

水平分表會(huì)帶來很多問題:

  • 排序挤聘、count、分頁問題
    如果一個(gè)用戶的數(shù)據(jù)被拆分到多個(gè)表中捅彻,那查詢結(jié)果分頁就不像以前單張表那樣直接就能查出來了组去,像 count 操作也是一樣的。
  • 全局主鍵的問題
    以前單表的時(shí)候很簡單步淹,就是主鍵自增从隆,現(xiàn)在分表了之后就有點(diǎn)尷尬了,所以需要一些手段來保證全局主鍵唯一缭裆。
    1. 還是自增键闺,只不過自增步長設(shè)置一下。比如現(xiàn)在有三張表幼驶,步長設(shè)置為3艾杏,三張表 ID 初始值分別是1、2盅藻、3购桑。 這樣第一張表的 ID 增長是 1、4氏淑、7勃蜘。第二張表是2、5假残、8缭贡。第三張表是3炉擅、6、9阳惹,這樣就不會(huì)重復(fù)了谍失。
    2. UUID,這種最簡單莹汤,但是不連續(xù)的主鍵插入會(huì)導(dǎo)致嚴(yán)重的頁分裂快鱼,性能比較差。
    3. 分布式 ID纲岭,比較出名的就是 Twitter 開源的 sonwflake 雪花算法抹竹。

參考資料
1、https://www.zhihu.com/question/459955079

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末止潮,一起剝皮案震驚了整個(gè)濱河市窃判,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喇闸,老刑警劉巖袄琳,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仅偎,居然都是意外死亡跨蟹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門橘沥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窗轩,“玉大人,你說我怎么就攤上這事座咆×∫眨” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵介陶,是天一觀的道長堤舒。 經(jīng)常有香客問我,道長哺呜,這世上最難降的妖魔是什么舌缤? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮某残,結(jié)果婚禮上国撵,老公的妹妹穿的比我還像新娘。我一直安慰自己玻墅,他們只是感情好介牙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著澳厢,像睡著了一般环础。 火紅的嫁衣襯著肌膚如雪囚似。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天线得,我揣著相機(jī)與錄音饶唤,去河邊找鬼。 笑死贯钩,一個(gè)胖子當(dāng)著我的面吹牛搬素,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播魏保,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼摸屠!你這毒婦竟也來了谓罗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤季二,失蹤者是張志新(化名)和其女友劉穎檩咱,沒想到半個(gè)月后疯搅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檀训,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年剩失,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桑嘶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炊汹。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逃顶,靈堂內(nèi)的尸體忽然破棺而出讨便,到底是詐尸還是另有隱情,我是刑警寧澤以政,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布霸褒,位于F島的核電站,受9級(jí)特大地震影響盈蛮,放射性物質(zhì)發(fā)生泄漏废菱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一抖誉、第九天 我趴在偏房一處隱蔽的房頂上張望殊轴。 院中可真熱鬧,春花似錦寸五、人聲如沸梳凛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽韧拒。三九已至淹接,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叛溢,已是汗流浹背塑悼。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留楷掉,地道東北人厢蒜。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像烹植,于是被迫代替她去往敵國和親斑鸦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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