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