分庫分表

之前我們講過利用數(shù)據(jù)庫的讀寫分離提升數(shù)據(jù)庫的讀寫性能,今天我們?cè)賮砹囊涣臄?shù)據(jù)庫優(yōu)化的另外一個(gè)重量級(jí)武器,分庫分表。


我們先來想想這樣的一個(gè)業(yè)務(wù)場(chǎng)景,我們有一個(gè)數(shù)據(jù)庫,存放著用戶的訂單數(shù)據(jù),隨著我們的業(yè)務(wù)的發(fā)展,訂單的數(shù)據(jù)越來越多,由此會(huì)引來一系列的問題。
首先,單庫的數(shù)據(jù)量會(huì)變得越來越大,占據(jù)大量的磁盤空間,在進(jìn)行數(shù)據(jù)遷移、備份、恢復(fù)所需要的時(shí)間都會(huì)越來越長(zhǎng)。
其次,系統(tǒng)的容災(zāi)性將變差,沒有萬無一失的系統(tǒng),也沒有萬無一失的機(jī)器,更沒有萬無一失的運(yùn)維工程師與程序員,一旦我們的數(shù)據(jù)庫遭遇到破壞,將會(huì)牽連所有的業(yè)務(wù)與用戶。
最后,是系統(tǒng)的性能會(huì)大大降低,讀寫速度會(huì)變慢,即便是我們使用了索引,也會(huì)發(fā)現(xiàn)讀寫的速度越來越慢,這是為什么呢?有兩個(gè)主要的原因,一是隨著數(shù)據(jù)量的增多,掃描數(shù)也會(huì)增多,一旦我們的索引不合理,或者沒有命中索引,將帶來災(zāi)難性的結(jié)果,另外一個(gè)重要的原因,是索引會(huì)變得越來越大,每次變更索引的變更也會(huì)消耗時(shí)間,并且可能因?yàn)樗饕^大,無法直接存放在內(nèi)存,每次都需要從磁盤中加載索引,造成速度變慢。
從另外一個(gè)角度看,單臺(tái)機(jī)器的性能都是有限的,即便我們可以使用多個(gè)從庫,但也會(huì)造成數(shù)據(jù)的冗余與浪費(fèi)。分庫分表,可以幫我們非常好的解決這個(gè)問題。分庫分表,顧名思義,就是把數(shù)據(jù)分散存儲(chǔ)在不同的數(shù)據(jù)庫與數(shù)據(jù)表中。我們有兩種常見的分庫分表方法:
垂直切分,垂直切分,既按照不同的功能,將不同業(yè)務(wù)的數(shù)據(jù),存放到不同的數(shù)據(jù)庫中,我們?nèi)匀灰噪娚滔到y(tǒng)為例,我們可以將用戶性別、收貨地址、賬號(hào)等存放在用戶庫中,將商品的圖片、描述、詳情存放在商品數(shù)據(jù)庫中,將用戶的訂單數(shù)據(jù)存放在交易數(shù)據(jù)庫中,不同的數(shù)據(jù)庫之間可以互相隔離,互補(bǔ)影響,這樣子,可以做到一方出故障的時(shí)候,對(duì)其他影響最小。
水平切分,水平切分,即同一個(gè)功能按照一定的維度切割,將他們放到不同的表中。我以阿里巴巴的淘寶天貓數(shù)據(jù)為例,不同用戶之間的交易數(shù)據(jù),一般都是不互通的,也少有需要跨表查詢場(chǎng)景,于是可以用戶的ID哈希,將其分布在不同的數(shù)據(jù)庫數(shù)據(jù)表中,商品的數(shù)據(jù),最常見的場(chǎng)景,便是一個(gè)店鋪下所有的商品,我們極少需要跨店鋪去查詢商品的數(shù)據(jù)(搜索頁、推薦頁等的不算,這種場(chǎng)景一般也不是走數(shù)據(jù)庫查詢),所以通常是以商家ID進(jìn)行分表的。
通過分庫分表,我們可以讓數(shù)據(jù)庫每一張表的數(shù)據(jù)都比較可控,從而提高數(shù)據(jù)庫的效率。當(dāng)然,分庫分表也并非十全十美,也會(huì)帶來一些問題,例如,在某些業(yè)務(wù)場(chǎng)景,我們可能需要查詢跨表的數(shù)據(jù),將會(huì)變得非常麻煩。同時(shí),如果數(shù)據(jù)庫需要一些連接操作,也會(huì)變得箱單麻煩。想要知道如何解決這些問題的么?歡迎大家關(guān)注我,共同學(xué)習(xí),共同進(jìn)步。大家的支持是我繼續(xù)嘮嗑的動(dòng)力。同名公眾號(hào)(沙茶敏碎碎念)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 如如不動(dòng)_閱讀 203評(píng)論 0 2
  • 如果用河來比作人生,我希望它是一條源源不斷奔流到海不復(fù)回的長(zhǎng)河。 河有上、中、下游之分,人又何嘗不是呢,每個(gè)人都會(huì)...
    虞何玖霖閱讀 312評(píng)論 1 1
  • 這世界上,根本沒有感同身受,就像,針沒有扎你身上,你永遠(yuǎn)不知道有多痛。 似乎,時(shí)間,真的是特別無情的...
    暗系小姐閱讀 369評(píng)論 0 0

友情鏈接更多精彩內(nèi)容