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