理財(cái)平臺(tái)網(wǎng)站建設(shè)交換鏈接營(yíng)銷成功案例
文章目錄
- 1.為什么需要分區(qū)分表分庫(kù)
- 2.各種分區(qū)分表分庫(kù)的情況
- 3.弊端
- 3.1分區(qū)弊端
- 3.2分表分庫(kù)弊端
1.為什么需要分區(qū)分表分庫(kù)
數(shù)據(jù)量達(dá)到一定規(guī)模,進(jìn)行常規(guī)的sql語(yǔ)句優(yōu)化已經(jīng)效果不大的情況下,常見為mysql數(shù)據(jù)庫(kù),單表的記錄達(dá)到1000W和空間占用至100G,可以擴(kuò)充硬件,但是硬件收益已經(jīng)不大的情況下,或者在預(yù)算有限的情況下,則需要進(jìn)行優(yōu)化數(shù)據(jù)庫(kù)結(jié)構(gòu)。這個(gè)時(shí)候就應(yīng)該對(duì)數(shù)據(jù)進(jìn)行拆分。
2.各種分區(qū)分表分庫(kù)的情況
1.分區(qū)
分區(qū)是數(shù)據(jù)庫(kù)本身的一個(gè)特性功能,將數(shù)據(jù)按照業(yè)務(wù)拆分成多個(gè)區(qū),在業(yè)務(wù)上先判斷屬于哪個(gè)分區(qū)即可到指定分區(qū)查詢,這樣就可實(shí)現(xiàn)更快的查詢速度了。
2.垂直分表
一個(gè)表的字段過(guò)多,根據(jù)實(shí)際業(yè)務(wù)訪問(wèn)獲取數(shù)據(jù)的字段,將其拆分成兩個(gè)表,就類似于副表,相當(dāng)于單表轉(zhuǎn)為一對(duì)一,如商品訂單詳情表,將訂單的時(shí)間,商品各種基本信息作為主表,相對(duì)不重要的東西,或者需要點(diǎn)擊多一步的東西作為副本表,通過(guò)增加訪問(wèn)接口的形式實(shí)現(xiàn)加速。
3.垂直分庫(kù)
垂直分庫(kù),可根據(jù)業(yè)務(wù),將有一定關(guān)系,但是耦合度不算高的表放到不同服務(wù)器的庫(kù)中,變相增強(qiáng)硬件,各個(gè)庫(kù)各司其職。比如商品庫(kù),店鋪庫(kù)等等
4.水平分庫(kù)
一般優(yōu)先垂直分庫(kù),之后再進(jìn)行水平分庫(kù),常見商品庫(kù)里,商品的記錄很多,單表1500W+,可將原本的DB,變?yōu)镈B1,DB2,結(jié)構(gòu)一致,將數(shù)據(jù)根據(jù)id,進(jìn)行%2+1然后分別插入(算法可以自定義),這樣一個(gè)庫(kù)就只有750W了,弊端數(shù)據(jù)庫(kù)實(shí)例過(guò)多,導(dǎo)致運(yùn)營(yíng)維護(hù)不便。還有一種情況是做讀寫分離。
5.水平分表
同理水平分庫(kù),只是放在同一個(gè)實(shí)例,拆分維度由庫(kù)變成表,可以對(duì)庫(kù)里的數(shù)據(jù)一張表分為結(jié)構(gòu)一致的多張表表,比如tb1,tb2,可以一樣將數(shù)據(jù)根據(jù)id,進(jìn)行%2+1進(jìn)行保存(算法可以自定義),也可以將數(shù)據(jù)按照日期進(jìn)行存儲(chǔ)拜訪,比如一個(gè)月,一年為維度等等。
3.弊端
3.1分區(qū)弊端
依賴于數(shù)據(jù)庫(kù)特性,需要在sql明確知道屬于哪個(gè)分區(qū),相對(duì)來(lái)說(shuō)基本屬于硬編碼,本質(zhì)還是使用的一個(gè)數(shù)據(jù)庫(kù)實(shí)例,吞吐量還是有限。且如果要分頁(yè)展示難以實(shí)現(xiàn)跳頁(yè)功能,需簡(jiǎn)化分頁(yè),比如使用流式或者只能上一頁(yè)下一頁(yè)這樣的功能的分頁(yè)效果。
3.2分表分庫(kù)弊端
1.事務(wù)問(wèn)題,由于實(shí)例分同一個(gè),存在分布式事務(wù)問(wèn)題
2.關(guān)聯(lián)查詢節(jié)點(diǎn)不同,如店鋪和商品庫(kù),需要使用業(yè)務(wù)代碼處理
3分頁(yè)問(wèn)題,升降序處理
4.實(shí)例或表不同,無(wú)法使用自增主鍵,會(huì)出現(xiàn)主鍵沖突,uuid不是趨勢(shì)遞增,難以使用id進(jìn)行進(jìn)行分庫(kù),需要一些分布式id的解決方案,比如雪花算法等等
5.公共表,一般數(shù)據(jù)量不是特別大,但是和各個(gè)業(yè)務(wù)聯(lián)系相對(duì)緊密,如地區(qū),常見做法,將地區(qū)表每個(gè)實(shí)例放一份,但是同步增刪改是一個(gè)麻煩的事情