簡(jiǎn)談數(shù)據(jù)庫(kù)分庫(kù)分表

為何分表

當(dāng)一張表的數(shù)據(jù)達(dá)到千萬(wàn)級(jí)時(shí)甚至億級(jí)時(shí)伦乔,查詢一次所花的時(shí)間會(huì)變多芦缰,如果有聯(lián)合查詢的話可能會(huì)死在那兒了。分表的目的就在于此价捧,減小數(shù)據(jù)庫(kù)的負(fù)擔(dān)丑念,縮短查詢時(shí)間。

大數(shù)據(jù)量并且訪問(wèn)頻繁的表结蟋,將其分為若干個(gè)表:

? ? ? ?比如對(duì)于某些網(wǎng)站平臺(tái)的數(shù)據(jù)庫(kù)表脯倚,數(shù)據(jù)量很大,這種能預(yù)估出來(lái)的大數(shù)據(jù)量表嵌屎,我們就事先分出個(gè)N個(gè)表推正,這個(gè)N是多少,根據(jù)實(shí)際情況而定宝惰。

??某網(wǎng)站現(xiàn)在的數(shù)據(jù)量假設(shè)是5000萬(wàn)條植榕,可以設(shè)計(jì)每張表容納的數(shù)據(jù)量是500萬(wàn)條,也就是拆分成10張表尼夺。

? ? ? ?那么如何判斷某張表的數(shù)據(jù)是否容量已滿呢?可以在程序段對(duì)于要新增數(shù)據(jù)的表尊残,在插入前先做統(tǒng)計(jì)表記錄數(shù)量的操作炒瘸,當(dāng)<500萬(wàn)條數(shù)據(jù),就直接插入寝衫,當(dāng)已經(jīng)到達(dá)閥值顷扩,可以在程序段新創(chuàng)建數(shù)據(jù)庫(kù)表(自動(dòng)擴(kuò)容),再執(zhí)行插入操作慰毅。

數(shù)據(jù)庫(kù)架構(gòu)

1.簡(jiǎn)單的數(shù)據(jù)庫(kù)(PG/MySQL)主從復(fù)制:

數(shù)據(jù)庫(kù)的主從復(fù)制解決了數(shù)據(jù)庫(kù)的讀寫(xiě)分離屎即,(一主多備)能很好的提升讀的性能,其圖如下:



但是事富,主從復(fù)制也帶來(lái)其他一系列性能瓶頸問(wèn)題:

:---------:1.寫(xiě)入無(wú)法擴(kuò)展

:---------:2.寫(xiě)入無(wú)法緩存

:---------:3.復(fù)制延時(shí)

:---------:4.鎖表率上升

:---------:5.表變大技俐,緩存率下降

那問(wèn)題產(chǎn)生總得解決的,這就產(chǎn)生下面的優(yōu)化方案统台,一起來(lái)看看雕擂。

1、垂直分區(qū)

如果把業(yè)務(wù)切割得足夠獨(dú)立贱勃,那把不同業(yè)務(wù)的數(shù)據(jù)放到不同的數(shù)據(jù)庫(kù)服務(wù)器將是一個(gè)不錯(cuò)的方案井赌,而且萬(wàn)一其中一個(gè)業(yè)務(wù)崩潰了也不會(huì)影響其他業(yè)務(wù)的正常進(jìn)行,并且也起到了負(fù)載分流的作用贵扰,大大提升了數(shù)據(jù)庫(kù)的吞吐能力仇穗。經(jīng)過(guò)垂直分區(qū)后的數(shù)據(jù)庫(kù)架構(gòu)圖如下:



已經(jīng)足夠獨(dú)立了,但是有些業(yè)務(wù)之間或多或少總會(huì)有點(diǎn)聯(lián)系戚绕,如用戶纹坐,基本上都會(huì)和每個(gè)業(yè)務(wù)存在關(guān)聯(lián),況且這種分區(qū)方式舞丛,也不能解決單張表數(shù)據(jù)量暴漲的問(wèn)題耘子。

2、水平分區(qū)(Sharding)

將用戶按一定規(guī)則(按id哈希)分組球切,并把該組用戶的數(shù)據(jù)存儲(chǔ)到一個(gè)數(shù)據(jù)庫(kù)分片中谷誓,即一個(gè)sharding,這樣隨著用戶數(shù)量的增加吨凑,只要簡(jiǎn)單地配置一臺(tái)服務(wù)器即可捍歪,原理圖如下:



如何來(lái)確定某個(gè)用戶所在的shard呢,這個(gè)時(shí)候我們可以建一張用戶和shard對(duì)應(yīng)的數(shù)據(jù)表鸵钝,每次請(qǐng)求先從這張表找用戶的shard id糙臼,再?gòu)膶?duì)應(yīng)shard中查詢相關(guān)數(shù)據(jù),如下圖所示:


單庫(kù)單表

單庫(kù)單表是最常見(jiàn)的數(shù)據(jù)庫(kù)設(shè)計(jì)蒋伦,例如弓摘,有一張用戶(user)表放在數(shù)據(jù)庫(kù)db中,所有的用戶都可以在db庫(kù)中的user表中查到

單庫(kù)多表

??隨著用戶數(shù)量的增加痕届,user表的數(shù)據(jù)量會(huì)越來(lái)越大韧献,當(dāng)數(shù)據(jù)量達(dá)到一定程度的時(shí)候?qū)ser表的查詢會(huì)漸漸的變慢,從而影響整個(gè)DB的性能研叫。還有一個(gè)更嚴(yán)重的問(wèn)題是锤窑,事務(wù)提交會(huì)鎖表,期間所有的讀寫(xiě)操作只能等待嚷炉。

一主多備

??在實(shí)際的應(yīng)用中渊啰,大部分情況都是讀遠(yuǎn)大于寫(xiě)。DB提供了讀寫(xiě)分離的機(jī)制申屹,所有的寫(xiě)操作都必須對(duì)應(yīng)到Master绘证,讀操作可以在 Master和Slave機(jī)器上進(jìn)行,Slave與Master的結(jié)構(gòu)完全一樣哗讥,一個(gè)Master可以有多個(gè)Slave,甚至Slave下還可以掛 Slave,通過(guò)此方式可以有效的提高DB集群的 QPS.

??所有的寫(xiě)操作都是先在Master上操作嚷那,然后同步更新到Slave上,所以從Master同步到Slave機(jī)器有一定的延遲杆煞,當(dāng)系統(tǒng)很繁忙的時(shí)候魏宽,延遲問(wèn)題會(huì)更加嚴(yán)重,Slave機(jī)器數(shù)量的增加也會(huì)使這個(gè)問(wèn)題更加嚴(yán)重决乎。

此外队询,可以看出Master是集群的瓶頸,當(dāng)寫(xiě)操作過(guò)多构诚,會(huì)嚴(yán)重影響到Master的穩(wěn)定性蚌斩,如果Master掛掉,整個(gè)集群都將不能正常工作范嘱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凳寺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子彤侍,更是在濱河造成了極大的恐慌肠缨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盏阶,死亡現(xiàn)場(chǎng)離奇詭異晒奕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)名斟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)脑慧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人砰盐,你說(shuō)我怎么就攤上這事闷袒。” “怎么了岩梳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵囊骤,是天一觀的道長(zhǎng)晃择。 經(jīng)常有香客問(wèn)我,道長(zhǎng)也物,這世上最難降的妖魔是什么宫屠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮滑蚯,結(jié)果婚禮上浪蹂,老公的妹妹穿的比我還像新娘。我一直安慰自己告材,他們只是感情好坤次,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著斥赋,像睡著了一般缰猴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灿渴,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天洛波,我揣著相機(jī)與錄音,去河邊找鬼骚露。 笑死蹬挤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棘幸。 我是一名探鬼主播焰扳,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼误续!你這毒婦竟也來(lái)了吨悍?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蹋嵌,失蹤者是張志新(化名)和其女友劉穎育瓜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體栽烂,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡躏仇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腺办。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焰手。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖怀喉,靈堂內(nèi)的尸體忽然破棺而出书妻,到底是詐尸還是另有隱情,我是刑警寧澤躬拢,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布躲履,位于F島的核電站见间,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏崇呵。R本人自食惡果不足惜缤剧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一馅袁、第九天 我趴在偏房一處隱蔽的房頂上張望域慷。 院中可真熱鬧,春花似錦汗销、人聲如沸犹褒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叠骑。三九已至,卻和暖如春削茁,著一層夾襖步出監(jiān)牢的瞬間宙枷,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工茧跋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慰丛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓瘾杭,卻偏偏與公主長(zhǎng)得像诅病,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子粥烁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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