水平切分
當(dāng)我們的客戶表數(shù)量已經(jīng)到達(dá)數(shù)千萬(wàn)甚至上億的時(shí)候,單表的存儲(chǔ)容量和查詢效率都會(huì)出現(xiàn)問(wèn)題,我們需要進(jìn)一步對(duì)單張表的數(shù)據(jù)進(jìn)行水平切分。水平切分的每個(gè)數(shù)據(jù)庫(kù)的表結(jié)構(gòu)都是一樣的,只是存儲(chǔ)的數(shù)據(jù)不一樣,比如每個(gè)庫(kù)存儲(chǔ)1000 萬(wàn)的數(shù)據(jù)。
水平切分也可以分成兩種,一種是單庫(kù)的,一種是多庫(kù)的。
單庫(kù)水平分表
銀行的交易流水表,所有進(jìn)出的交易都需要登記這張表,因?yàn)榻^大部分時(shí)候客戶都是查詢當(dāng)天的交易和一個(gè)月以內(nèi)的交易數(shù)據(jù),所以我們根據(jù)使用頻率把這張表拆分成三張表:
當(dāng)天表:只存儲(chǔ)當(dāng)天的數(shù)據(jù)。
當(dāng)月表:在夜間運(yùn)行一個(gè)定時(shí)任務(wù),前一天的數(shù)據(jù),全部遷移到當(dāng)月表。用的是insert into select,然后delete。
歷史表:同樣是通過(guò)定時(shí)任務(wù),把登記時(shí)間超過(guò)30 天的數(shù)據(jù),遷移到history歷史表(歷史表的數(shù)據(jù)非常大,我們按照月度,每個(gè)月建立分區(qū))。
費(fèi)用表:
消費(fèi)金融公司跟線下商戶合作,給客戶辦理了貸款以后,消費(fèi)金融公司要給商戶返費(fèi)用,或者叫提成,每天都會(huì)產(chǎn)生很多的費(fèi)用的數(shù)據(jù)。為了方便管理,我們每個(gè)月建立一張費(fèi)用表,例如fee_detail_201901……fee_detail_201912。
但是注意,跟分區(qū)一樣,這種方式雖然可以一定程度解決單表查詢性能的問(wèn)題,但是并不能解決單機(jī)存儲(chǔ)瓶頸的問(wèn)題。
多庫(kù)水平分表
另一種是多庫(kù)的水平分表。比如客戶表,我們拆分到多個(gè)庫(kù)存儲(chǔ),表結(jié)構(gòu)是完全一樣的。
一般我們說(shuō)的分庫(kù)分表都是跨庫(kù)的分表。
既然分庫(kù)分表能夠幫助我們解決性能的問(wèn)題,那我們是不是馬上動(dòng)手去做,甚至在項(xiàng)目設(shè)計(jì)的時(shí)候就先給它分幾個(gè)庫(kù)呢?先冷靜一下,我們來(lái)看一下分庫(kù)分表會(huì)帶來(lái)哪些問(wèn)題,也就是我們前面說(shuō)的分庫(kù)分表之后帶來(lái)的復(fù)雜性。
?
總結(jié)
- 上一篇: 垂直切分
- 下一篇: 多案分库分表带来的问题-跨库关联查询