2019-10-23

一营密、分庫分表的背景

在數(shù)據(jù)爆炸的年代,單表數(shù)據(jù)達(dá)到千萬級別磺箕,甚至過億的量,都是很常見的情景抛虫。這時候再對數(shù)據(jù)庫進(jìn)行操作就是非常吃力的事情了,select個半天都出不來數(shù)據(jù)简僧,這時候業(yè)務(wù)已經(jīng)難以維系建椰。不得已,分庫分表提上日程岛马,我們的目的很簡單棉姐,減小數(shù)據(jù)庫的壓力,縮短表的操作時間啦逆。








二伞矩、如何進(jìn)行數(shù)據(jù)切分

數(shù)據(jù)切分(Sharding),簡單的來說夏志,就是通過某種特定的條件乃坤,將存放在同一個數(shù)據(jù)庫中的數(shù)據(jù)拆分存放到多個數(shù)據(jù)庫(主機(jī))中,從而達(dá)到分散單臺機(jī)器負(fù)載的情況沟蔑,即分庫分表湿诊。根據(jù)數(shù)據(jù)切分規(guī)則的不同,主要有兩種模式瘦材,

垂直切分(縱向切分)厅须,是對不同的表(或者Schema)進(jìn)行切分,存儲到不同的數(shù)據(jù)庫(主機(jī))之上食棕。

水平切分(橫向切分)朗和,是對同一個表中的數(shù)據(jù)進(jìn)行切分,存儲到不同的數(shù)據(jù)庫(主機(jī))之上簿晓。規(guī)則是根據(jù)表中數(shù)據(jù)的邏輯關(guān)系眶拉,按照某種條件拆分。


垂直切分

垂直切分抢蚀,強(qiáng)調(diào)的是業(yè)務(wù)的拆分镀层。一個數(shù)據(jù)庫由多個表構(gòu)成,每個表對應(yīng)不同的業(yè)務(wù)皿曲,那么我們可以指按照業(yè)務(wù)的不同將表進(jìn)行分類唱逢,并將其分布到不同的數(shù)據(jù)庫上,這樣就將數(shù)據(jù)分?jǐn)偟搅瞬煌膸焐厦嫖菪荩龅綄鞂S谩?/p>

舉個例子坞古,原數(shù)據(jù)庫中有商品表、交易表劫樟、訂單表痪枫,我們可以按照業(yè)務(wù)的不同進(jìn)行垂直切分织堂,把商品表、交易表奶陈、訂單表分別拆分到商品庫易阳、交易庫、訂單庫中去吃粒。





垂直拆分的優(yōu)點(diǎn):

拆分規(guī)則明確潦俺,拆分后業(yè)務(wù)清晰;系統(tǒng)之間進(jìn)行整合或擴(kuò)展變的容易徐勃;數(shù)據(jù)維護(hù)變的容易事示;按照成本、應(yīng)用的等級僻肖、應(yīng)用的類型等將表放到不同的機(jī)器上肖爵,便于管理。垂直拆分的缺點(diǎn):

部分業(yè)務(wù)表無法關(guān)聯(lián)(Join)臀脏,只能通過接口方式解決劝堪,提高了系統(tǒng)的復(fù)雜度;受每種業(yè)務(wù)的不同限制谁榜,存在單庫性能瓶頸幅聘,不易進(jìn)行數(shù)據(jù)擴(kuò)展和提升性能;分布式事務(wù)處理復(fù)雜窃植。


水平切分(重點(diǎn))

水平切分帝蒿,強(qiáng)調(diào)的是技術(shù)層面的拆分。她是將其按照一定的邏輯規(guī)則將一個表中的數(shù)據(jù)分散到多個庫中巷怜,在每個表中包含一部分?jǐn)?shù)據(jù)葛超,所有表加起來就是全量的數(shù)據(jù)。簡單來說延塑,我們可以將對數(shù)據(jù)的水平切分理解為按照數(shù)據(jù)行進(jìn)行切分绣张,就是將表中的某些行切分到一個數(shù)據(jù)庫表中,而將其他行切分到其他數(shù)據(jù)庫表中关带。

比如侥涵,原數(shù)據(jù)庫有一張交易記錄表,數(shù)據(jù)量非常大宋雏,其中表中有個地區(qū)字段芜飘,經(jīng)過深入考證符合水平拆分的條件。我們就按照這個字段進(jìn)行水平拆分磨总,按不同的地區(qū)(北京嗦明、上海、江蘇蚪燕、浙江娶牌、廣東等)拆分成10個庫奔浅。

高峰時段同時有100萬次請求,如果是單庫诗良,數(shù)據(jù)庫就會承受100萬次的請求壓力汹桦,拆分成100個表分別放入10個庫中,每個表進(jìn)行1萬次請求鉴裹,則每個數(shù)據(jù)庫會承受10萬次的請求壓力营勤,這樣壓力就減少了很多,并且是成倍減少的壹罚。











水平拆分的優(yōu)點(diǎn):

拆分規(guī)則抽象好,join 操作基本可以數(shù)據(jù)庫做寿羞;不存在單庫大數(shù)據(jù)猖凛,高并發(fā)的性能瓶頸;應(yīng)用端改造較少绪穆;提高了系統(tǒng)的穩(wěn)定性跟負(fù)載能力辨泳。水平拆分的缺點(diǎn):

拆分規(guī)則不好抽象;分片事務(wù)一致性難以解決玖院;數(shù)據(jù)多次擴(kuò)展難度大菠红;跨庫 join 性能較差。


三难菌、數(shù)據(jù)切分導(dǎo)致的一些問題

上面我們也講了兩種數(shù)據(jù)切分方式的優(yōu)點(diǎn)和缺點(diǎn)试溯,但是他們有些共同的缺點(diǎn),

分布式事務(wù)的問題郊酒;跨節(jié)點(diǎn) Join 的問題遇绞;跨節(jié)點(diǎn)合并排序分頁的問題;多數(shù)據(jù)源管理問題燎窘。一般來說摹闽,業(yè)務(wù)上存在著復(fù)雜 join 的場景是很難切分的,往往業(yè)務(wù)獨(dú)立的易于切分褐健。如何切分付鹿,我們遵循如下原則,

能不切分盡量不要切分蚜迅;如果要切分一定要選擇合適的切分規(guī)則舵匾,提前規(guī)劃好;數(shù)據(jù)切分盡量通過數(shù)據(jù)冗余或表分組來降低跨庫 Join 的可能慢叨;由于數(shù)據(jù)庫中間件對數(shù)據(jù) Join 實(shí)現(xiàn)的優(yōu)劣難以把握纽匙,而且實(shí)現(xiàn)高性能難度極大,業(yè)務(wù)讀取盡量少使用多表 Join拍谐。


四烛缔、數(shù)據(jù)源管理的問題

分庫分表之后馏段,數(shù)據(jù)源的管理是系統(tǒng)實(shí)現(xiàn)的關(guān)鍵。

系統(tǒng)應(yīng)用層面系統(tǒng)應(yīng)用代碼層面践瓷,目前主要有兩種思路院喜,

客戶端模式,也就是在每個應(yīng)用程序模塊中配置管理自己需要的一個(或者多個)數(shù)據(jù)源晕翠,直接訪問各個數(shù)據(jù)庫喷舀,在模塊內(nèi)完成數(shù)據(jù)的整合。比如可以依賴spring注解實(shí)現(xiàn)淋肾。中間代理模式硫麻,統(tǒng)一管理所有的數(shù)據(jù)源,后端數(shù)據(jù)庫集群對前端應(yīng)用程序透明樊卓∧美ⅲ考慮到系統(tǒng)的復(fù)雜性和擴(kuò)展性,建議第二種中間代理模式碌尔。雖然短期內(nèi)需要付出的成本可能會相對更大一些浇辜,但是對整個系統(tǒng)的擴(kuò)展性來說,是非常實(shí)用的唾戚。

2. 中間件層面

上面的系統(tǒng)層面柳洋,需要的代碼實(shí)現(xiàn)比較復(fù)雜,中間件是在數(shù)據(jù)集群前面加一層代理叹坦,比如Cobar熊镣、Mycat等數(shù)據(jù)庫中間件。實(shí)用數(shù)據(jù)庫中間件立由,對代碼層面的實(shí)現(xiàn)是很大的解放轧钓。









五、分布式事務(wù)的解決方案

分庫分表導(dǎo)致的最突出的問題就是分布式事務(wù)的處理锐膜。大家如果有興趣可以參考下之前的文章互聯(lián)網(wǎng)架構(gòu)下的分布式技術(shù)面試要點(diǎn)概覽中的分布式事務(wù)部分毕箍,后面如果有時間,可以單獨(dú)再探討下道盏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末而柑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荷逞,更是在濱河造成了極大的恐慌媒咳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件种远,死亡現(xiàn)場離奇詭異涩澡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)坠敷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門妙同,熙熙樓的掌柜王于貴愁眉苦臉地迎上來射富,“玉大人,你說我怎么就攤上這事粥帚∫群模” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵芒涡,是天一觀的道長柴灯。 經(jīng)常有香客問我,道長费尽,這世上最難降的妖魔是什么赠群? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮旱幼,結(jié)果婚禮上乎串,老公的妹妹穿的比我還像新娘。我一直安慰自己速警,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布鸯两。 她就那樣靜靜地躺著闷旧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钧唐。 梳的紋絲不亂的頭發(fā)上忙灼,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音钝侠,去河邊找鬼该园。 笑死,一個胖子當(dāng)著我的面吹牛帅韧,可吹牛的內(nèi)容都是我干的里初。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼忽舟,長吁一口氣:“原來是場噩夢啊……” “哼双妨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叮阅,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤刁品,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浩姥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挑随,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年勒叠,在試婚紗的時候發(fā)現(xiàn)自己被綠了兜挨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膏孟。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖暑劝,靈堂內(nèi)的尸體忽然破棺而出骆莹,到底是詐尸還是另有隱情,我是刑警寧澤担猛,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布幕垦,位于F島的核電站,受9級特大地震影響傅联,放射性物質(zhì)發(fā)生泄漏先改。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一蒸走、第九天 我趴在偏房一處隱蔽的房頂上張望仇奶。 院中可真熱鬧,春花似錦比驻、人聲如沸该溯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狈茉。三九已至,卻和暖如春掸掸,著一層夾襖步出監(jiān)牢的瞬間氯庆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工扰付, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堤撵,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓羽莺,卻偏偏與公主長得像实昨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子盐固,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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

  • Sharding的基本思想其實(shí)就是采用分治的思想屠橄,要把一個數(shù)據(jù)庫切分成多個部分放到不同的數(shù)據(jù)庫(server)上,...
    jiangmo閱讀 9,382評論 0 7
  • 數(shù)據(jù)庫范式 https://www.zhihu.com/question/24696366 索引 索引可以加快數(shù)據(jù)...
    EakonZhao閱讀 3,191評論 3 23
  • 一闰挡、分庫分表原則 關(guān)系型數(shù)據(jù)庫本身比較容易成為系統(tǒng)性能瓶頸锐墙,單機(jī)存儲容量、連接數(shù)长酗、處理能力等都很有限溪北,數(shù)據(jù)庫本身的...
    whisperoy閱讀 893評論 0 0
  • 讀寫分離分散了數(shù)據(jù)庫讀寫操作的壓力之拨,但沒有分散存儲壓力茉继,當(dāng)數(shù)據(jù)量達(dá)到千萬甚至上億條的時候,單臺數(shù)據(jù)庫服務(wù)器的存儲能...
    hedgehog1112閱讀 1,855評論 0 10
  • 突然發(fā)現(xiàn)蚀乔,原來一直以來都可以對世界溫柔一點(diǎn).當(dāng)所有壓力來襲.當(dāng)無處可逃.當(dāng)無以承載.突然發(fā)現(xiàn)如若此刻的壓力不在一切...
    紅紅域閱讀 172評論 0 0