mysql 分庫分表
系統(tǒng)
2290 0
分表是分散數(shù)據(jù)庫壓力的好方法。
分表,最直白的意思,就是將一個(gè)表結(jié)構(gòu)分為多個(gè)表,然后,可以再同一個(gè)庫里,也可以放到不同的庫。
當(dāng)然,首先要知道什么情況下,才需要分表。個(gè)人覺得
單表記錄條數(shù)達(dá)到百萬到千萬級(jí)別時(shí)就要使用分表
了。
1,分表的分類
1>縱向分表
將本來可以在同一個(gè)表的內(nèi)容,人為劃分為多個(gè)表。(所謂的本來,是指按照關(guān)系型數(shù)據(jù)庫的第三范式要求,是應(yīng)該在同一個(gè)表的。)
分表理由:根據(jù)數(shù)據(jù)的活躍度進(jìn)行分離,(因?yàn)椴煌钴S的數(shù)據(jù),處理方式是不同的)
案例:
對(duì)于一個(gè)博客系統(tǒng),文章標(biāo)題,作者,分類,創(chuàng)建時(shí)間等,是變化頻率慢,查詢次數(shù)多,而且最好有很好的實(shí)時(shí)性的數(shù)據(jù),我們把它叫做冷數(shù)據(jù)。而博客的瀏覽量,回復(fù)數(shù)等,類似的統(tǒng)計(jì)信息,或者別的變化頻率比較高的數(shù)據(jù),我們把它叫做活躍數(shù)據(jù)。所以,在進(jìn)行數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)的時(shí)候,就應(yīng)該考慮分表,首先是
縱向
分表的處理。
這樣
縱向
分表后:
首先存儲(chǔ)引擎的使用不同,冷數(shù)據(jù)使用MyIsam 可以有更好的查詢數(shù)據(jù)。活躍數(shù)據(jù),可以使用Innodb ,可以有更好的更新速度。
其次,對(duì)冷數(shù)據(jù)進(jìn)行更多的從庫配置,因?yàn)楦嗟牟僮鲿r(shí)查詢,這樣來加快查詢速度。對(duì)熱數(shù)據(jù),可以相對(duì)有更多的主庫的橫向分表處理。
其實(shí),對(duì)于一些特殊的活躍數(shù)據(jù),也可以考慮使用memcache ,redis
之類的緩存,等累計(jì)到一定量再去更新數(shù)據(jù)庫。或者mongodb 一類的nosql 數(shù)據(jù)庫,這里只是舉例,就先不說這個(gè)。
2>橫向分表
字面意思,就可以看出來,是把大的表結(jié)構(gòu),橫向切割為同樣結(jié)構(gòu)的不同表,如,用戶信息表,user_1,user_2 等。表結(jié)構(gòu)是完全一樣,但是,根據(jù)某些特定的規(guī)則來劃分的表,如根據(jù)用戶ID來取模劃分。
分表理由:根據(jù)數(shù)據(jù)量的規(guī)模來劃分,保證單表的容量不會(huì)太大,從而來保證單表的查詢等處理能力。
案例:同上面的例子,博客系統(tǒng)。當(dāng)博客的量達(dá)到很大時(shí)候,就應(yīng)該采取橫向分割來降低每個(gè)單表的壓力,來提升性能。例如博客的冷數(shù)據(jù)表,假如分為100個(gè)表,當(dāng)同時(shí)有100萬個(gè)用戶在瀏覽時(shí),如果是單表的話,會(huì)進(jìn)行100萬次請(qǐng)求,而現(xiàn)在分表后,就可能是每個(gè)表進(jìn)行1萬個(gè)數(shù)據(jù)的請(qǐng)求(因?yàn)椋豢赡芙^對(duì)的平均,只是假設(shè)),這樣壓力就降低了很多很多。
mysql 分庫分表
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元