您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)mysql分表的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
分表的原因:
當(dāng)一張的數(shù)據(jù)達(dá)到幾百萬(wàn)時(shí),你查詢(xún)一次所花的時(shí)間會(huì)變多,如果有聯(lián)合查詢(xún)的話,我想有可能會(huì)死在那兒了。分表的目的就在于此,減小數(shù)據(jù)庫(kù)的負(fù)擔(dān),縮短查詢(xún)時(shí)間。
分庫(kù)分表有垂直切分和水平切分兩種:
1、依照不同的表(或者Schema)來(lái)切分到不同的數(shù)據(jù)庫(kù)(主機(jī))之上,這樣的切分稱(chēng)之為數(shù)據(jù)的垂直(縱向)切分。
2、依據(jù)表中的數(shù)據(jù)的邏輯關(guān)系,將同一個(gè)表中的數(shù)據(jù)依照某種條件拆分到多臺(tái)數(shù)據(jù)庫(kù)(主機(jī),當(dāng)然也可能是同一個(gè)數(shù)據(jù)庫(kù))上面。這樣的切分稱(chēng)之為數(shù)據(jù)的水平(橫向)切分。
數(shù)據(jù)的垂直切分
將數(shù)據(jù)庫(kù)想象成由非常多個(gè)一大塊一大塊的“數(shù)據(jù)塊”(表)組成,我們垂直的將這些“數(shù)據(jù)塊”切開(kāi),然后將他們分散到多臺(tái)數(shù)據(jù)庫(kù)(主機(jī))上面,這樣的切分方法就是一個(gè)垂直(縱向)的數(shù)據(jù)切分。
數(shù)據(jù)的水平切分
數(shù)據(jù)的垂直切分基本上能夠簡(jiǎn)單的理解為依照表依照模塊來(lái)切分?jǐn)?shù)據(jù),而水平切分就不再是依照表或者是功能模塊來(lái)切分了。一般來(lái)說(shuō),簡(jiǎn)單的水平切分主要是將某個(gè)訪問(wèn)極其頻繁的大表再依照某個(gè)字段的某種規(guī)則來(lái)分散到多個(gè)表之中。每一個(gè)表中包括一部分?jǐn)?shù)據(jù)。
簡(jiǎn)單來(lái)說(shuō),就是將表中的某些行切分到一個(gè)數(shù)據(jù)庫(kù)(表),而另外的某些行又切分到其它的數(shù)據(jù)庫(kù)(表)中。當(dāng)然,為了能夠比較容易的判定各行數(shù)據(jù)被切分到哪個(gè)數(shù)據(jù)庫(kù)(表)中了,切分總是都須要依照某種特定的規(guī)則來(lái)進(jìn)行的。
水平分庫(kù)分表的切分規(guī)則主要包括如下幾種:
按號(hào)段分
user_id為區(qū)分,1~1000的對(duì)應(yīng)DB1,1001~2000的對(duì)應(yīng)DB2,以此類(lèi)推;
優(yōu)點(diǎn):可部分遷移
缺點(diǎn):數(shù)據(jù)分布不均
hash取模分:
對(duì)user_id進(jìn)行hash,然后用一個(gè)特定的數(shù)字,比如應(yīng)用中需要將一個(gè)數(shù)據(jù)庫(kù)切分成4個(gè)數(shù)據(jù)庫(kù)的話,我們就用4這個(gè)數(shù)字對(duì)user_id的hash值進(jìn)行取模運(yùn)算,也就是user_id%4,這樣的話每次運(yùn)算就有四種可能:結(jié)果為0的時(shí)候?qū)?yīng)DB1;結(jié)果為1的時(shí)候?qū)?yīng)DB2;結(jié)果為2的時(shí)候?qū)?yīng)DB3;結(jié)果為3的時(shí)候?qū)?yīng)DB4,這樣一來(lái)就非常均勻的將數(shù)據(jù)分配到4個(gè)DB中。如上圖所示。
優(yōu)點(diǎn):數(shù)據(jù)分布均勻
缺點(diǎn):數(shù)據(jù)遷移的時(shí)候麻煩,不能按照機(jī)器性能分?jǐn)倲?shù)據(jù)
在認(rèn)證庫(kù)中保存數(shù)據(jù)庫(kù)配置
建立一個(gè)DB,這個(gè)DB單獨(dú)保存user_id到DB的映射關(guān)系,每次訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候都要先查詢(xún)一次這個(gè)數(shù)據(jù)庫(kù),以得到具體的DB信息,然后才能進(jìn)行我們需要的查詢(xún)操作。
優(yōu)點(diǎn):靈活性強(qiáng),一對(duì)一關(guān)系
缺點(diǎn):每次查詢(xún)之前都要多一次查詢(xún),性能大打折扣
其他方式
1)按照地理區(qū)域:比如按照華東,華南,華北這樣來(lái)區(qū)分業(yè)務(wù)。
2)按照時(shí)間切分,就是將6個(gè)月前,甚至一年前的數(shù)據(jù)切出去放到另外的一張表,因?yàn)殡S著時(shí)間流逝,這些表的數(shù)據(jù)被查詢(xún)的概率變小,所以沒(méi)必要和“熱數(shù)據(jù)”放在一起,這個(gè)也是“冷熱數(shù)據(jù)分離”。
關(guān)于mysql分表的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。