1.按功能劃分(垂直切分)
將不同功能相關(guān)的表放到不同的數(shù)據(jù)庫(kù)中,這樣做的好處是非常直觀。但當(dāng)某一部分的功能其數(shù)據(jù)量或性能要求超出了可控的范圍,就需要繼續(xù)對(duì)其進(jìn)行深入的再切分。
2.按表中某一字段值的范圍劃分(水平切分)
當(dāng)伴隨著某一個(gè)表的數(shù)據(jù)量越來(lái)越大,以至于不能承受的時(shí)候,就需要對(duì)它進(jìn)行進(jìn)一步的切分。一種選擇是根據(jù)key 的范圍來(lái)做切分,譬如ID 為 1-10000的放到A上,ID 為10000~20000的放到B。這樣的擴(kuò)展就是可預(yù)見(jiàn)的。另一種是根據(jù)某一字段值來(lái)劃分,譬如根據(jù)用戶名的首字母,如果是A-D,就屬于A,E-H就屬于B。這樣做也存在不均衡性,當(dāng)某個(gè)范圍超出了單點(diǎn)所能承受的范圍就需要繼續(xù)切分。還有按日期切分等等。
優(yōu)點(diǎn):?jiǎn)伪泶笮】煽?,天然水平擴(kuò)展
缺點(diǎn):無(wú)法解決集中寫入瓶頸的問(wèn)題
3.基于hash的切分
一般采用mod來(lái)切分,一開(kāi)始確定切分?jǐn)?shù)據(jù)庫(kù)的個(gè)數(shù),通過(guò)hash取模來(lái)決定使用哪臺(tái)。這種方法能夠平均地來(lái)分配數(shù)據(jù),但是伴隨著數(shù)據(jù)量的增大,需要進(jìn)行擴(kuò)展的時(shí)候,這種方式無(wú)法做到在線擴(kuò)容。每增加節(jié)點(diǎn)的時(shí)候,就需要對(duì)hash 算法重新運(yùn)算。
所以采用這種方法推薦采用mod 2^n這種一致性哈希
以點(diǎn)評(píng)統(tǒng)一訂單庫(kù)為例,分庫(kù)分表的方案是32*32的,即通過(guò)userId后四位mod 32分到32個(gè)庫(kù)中,同時(shí)再將userId后四位div 32 mod 32將每個(gè)庫(kù)分為32個(gè)表,共計(jì)分為1024張表。其線上部署情況為8個(gè)集群(主從),每個(gè)集群4個(gè)庫(kù)
4.基于路由表的切分
前面的幾種方式都是根據(jù)應(yīng)用的數(shù)據(jù)來(lái)決定操作的,基于路由表的切分是一種更加松散的方法。它單獨(dú)維護(hù)一張路由表,根據(jù)用戶的某一屬性來(lái)查找路由表決定使用哪個(gè)數(shù)據(jù)庫(kù),這種方式是一種更加通用的方案
優(yōu)點(diǎn):id和庫(kù)的mapping算法可以隨意更改
缺點(diǎn):可能引入額外的單點(diǎn)
關(guān)于數(shù)據(jù)庫(kù)拆分的幾種方式分別是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
更多關(guān)于云服務(wù)器,域名注冊(cè),虛擬主機(jī)的問(wèn)題,請(qǐng)?jiān)L問(wèn)西部數(shù)碼官網(wǎng):ps-sw.cn