創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
專注于為中小企業(yè)提供網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)岱岳免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。這篇文章將為大家詳細(xì)講解有關(guān)mysql分表的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
分表的原因:
當(dāng)一張的數(shù)據(jù)達(dá)到幾百萬時,你查詢一次所花的時間會變多,如果有聯(lián)合查詢的話,我想有可能會死在那兒了。分表的目的就在于此,減小數(shù)據(jù)庫的負(fù)擔(dān),縮短查詢時間。
分庫分表有垂直切分和水平切分兩種:
1、依照不同的表(或者Schema)來切分到不同的數(shù)據(jù)庫(主機)之上,這樣的切分稱之為數(shù)據(jù)的垂直(縱向)切分。
2、依據(jù)表中的數(shù)據(jù)的邏輯關(guān)系,將同一個表中的數(shù)據(jù)依照某種條件拆分到多臺數(shù)據(jù)庫(主機,當(dāng)然也可能是同一個數(shù)據(jù)庫)上面。這樣的切分稱之為數(shù)據(jù)的水平(橫向)切分。
數(shù)據(jù)的垂直切分
將數(shù)據(jù)庫想象成由非常多個一大塊一大塊的“數(shù)據(jù)塊”(表)組成,我們垂直的將這些“數(shù)據(jù)塊”切開,然后將他們分散到多臺數(shù)據(jù)庫(主機)上面,這樣的切分方法就是一個垂直(縱向)的數(shù)據(jù)切分。
數(shù)據(jù)的水平切分
數(shù)據(jù)的垂直切分基本上能夠簡單的理解為依照表依照模塊來切分?jǐn)?shù)據(jù),而水平切分就不再是依照表或者是功能模塊來切分了。一般來說,簡單的水平切分主要是將某個訪問極其頻繁的大表再依照某個字段的某種規(guī)則來分散到多個表之中。每一個表中包括一部分?jǐn)?shù)據(jù)。
簡單來說,就是將表中的某些行切分到一個數(shù)據(jù)庫(表),而另外的某些行又切分到其它的數(shù)據(jù)庫(表)中。當(dāng)然,為了能夠比較容易的判定各行數(shù)據(jù)被切分到哪個數(shù)據(jù)庫(表)中了,切分總是都須要依照某種特定的規(guī)則來進(jìn)行的。
水平分庫分表的切分規(guī)則主要包括如下幾種:
按號段分
user_id為區(qū)分,1~1000的對應(yīng)DB1,1001~2000的對應(yīng)DB2,以此類推;
優(yōu)點:可部分遷移
缺點:數(shù)據(jù)分布不均
hash取模分:
對user_id進(jìn)行hash,然后用一個特定的數(shù)字,比如應(yīng)用中需要將一個數(shù)據(jù)庫切分成4個數(shù)據(jù)庫的話,我們就用4這個數(shù)字對user_id的hash值進(jìn)行取模運算,也就是user_id%4,這樣的話每次運算就有四種可能:結(jié)果為0的時候?qū)?yīng)DB1;結(jié)果為1的時候?qū)?yīng)DB2;結(jié)果為2的時候?qū)?yīng)DB3;結(jié)果為3的時候?qū)?yīng)DB4,這樣一來就非常均勻的將數(shù)據(jù)分配到4個DB中。如上圖所示。
優(yōu)點:數(shù)據(jù)分布均勻
缺點:數(shù)據(jù)遷移的時候麻煩,不能按照機器性能分?jǐn)倲?shù)據(jù)
在認(rèn)證庫中保存數(shù)據(jù)庫配置
建立一個DB,這個DB單獨保存user_id到DB的映射關(guān)系,每次訪問數(shù)據(jù)庫的時候都要先查詢一次這個數(shù)據(jù)庫,以得到具體的DB信息,然后才能進(jìn)行我們需要的查詢操作。
優(yōu)點:靈活性強,一對一關(guān)系
缺點:每次查詢之前都要多一次查詢,性能大打折扣
其他方式
1)按照地理區(qū)域:比如按照華東,華南,華北這樣來區(qū)分業(yè)務(wù)。
2)按照時間切分,就是將6個月前,甚至一年前的數(shù)據(jù)切出去放到另外的一張表,因為隨著時間流逝,這些表的數(shù)據(jù)被查詢的概率變小,所以沒必要和“熱數(shù)據(jù)”放在一起,這個也是“冷熱數(shù)據(jù)分離”。
關(guān)于mysql分表的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。