溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

大數(shù)據(jù)中如何進(jìn)行分庫(kù)分表

發(fā)布時(shí)間:2021-12-21 10:52:27 來(lái)源:億速云 閱讀:449 作者:柒染 欄目:大數(shù)據(jù)

大數(shù)據(jù)中如何進(jìn)行分庫(kù)分表,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

一、單庫(kù)單表存在的問(wèn)題

假設(shè)你要設(shè)計(jì)一個(gè)電商網(wǎng)站,在一開始,User表、Order表、Product表等等各種表都在同一個(gè)數(shù)據(jù)庫(kù)中,每個(gè)表都包含了大量的字段。在用戶量比較少,訪問(wèn)量也比較少的時(shí)候,單庫(kù)單表不存在問(wèn)題。

但是公司可能發(fā)展的比較好,用戶量開始大量增加,業(yè)務(wù)也越來(lái)越繁雜。一張表的字段可能有幾十個(gè)甚至上百個(gè),而且一張表存儲(chǔ)的數(shù)據(jù)還很多,高達(dá)幾千萬(wàn)數(shù)據(jù),更難受的是這樣的表還挺多。于是一個(gè)數(shù)據(jù)庫(kù)的壓力就太大了,一張表的壓力也比較大。試想一下,我們?cè)谝粡垘浊f(wàn)數(shù)據(jù)的表中查詢數(shù)據(jù),壓力本來(lái)就大,如果這張表還需要關(guān)聯(lián)查詢,那時(shí)間等等各個(gè)方面的壓力就更大了。

(1)單庫(kù)太大:數(shù)據(jù)庫(kù)里面的表太多,所在服務(wù)器磁盤空間裝不下,IO次數(shù)多CPU忙不過(guò)來(lái)。

(2)單表太大:一張表的字段太多,數(shù)據(jù)太多。查詢起來(lái)困難。

此時(shí)就開始考慮如何解決問(wèn)題了。

二、主從復(fù)制架構(gòu)

單庫(kù)單表下越來(lái)越不滿足需求,此時(shí)我們先考慮進(jìn)行讀寫分離。我們將數(shù)據(jù)庫(kù)的寫操作和讀操作進(jìn)行分離, 使用多個(gè)從庫(kù)副本(Slaver)負(fù)責(zé)讀,使用主庫(kù)(Master)負(fù)責(zé)寫, 從庫(kù)從主庫(kù)同步更新數(shù)據(jù),保持?jǐn)?shù)據(jù)一致。

這在一定程度上可以解決問(wèn)題,但是用戶超級(jí)多的時(shí)候,比如幾個(gè)億用戶,此時(shí)寫操作會(huì)越來(lái)越多,一個(gè)主庫(kù)(Master)不能滿足要求了,那就把主庫(kù)拆分,這時(shí)候?yàn)榱吮WC數(shù)據(jù)的一致性就要開始進(jìn)行同步,此時(shí)會(huì)帶來(lái)一系列問(wèn)題:

(1)寫操作拓展起來(lái)比較困難,因?yàn)橐WC多個(gè)主庫(kù)的數(shù)據(jù)一致性。

(2)復(fù)制延時(shí):意思是同步帶來(lái)的時(shí)間消耗。

(3)鎖表率上升:讀寫分離,命中率少,鎖表的概率提升。

(4)表變大,緩存率下降:此時(shí)緩存率一旦下降,帶來(lái)的就是時(shí)間上的消耗。

注意,此時(shí)主從復(fù)制還是單庫(kù)單表,只不過(guò)復(fù)制了很多份并進(jìn)行同步。

主從復(fù)制架構(gòu)隨著用戶量的增加、訪問(wèn)量的增加、數(shù)據(jù)量的增加依然會(huì)帶來(lái)大量的問(wèn)題,那就要考慮換一種解決思路。就是今天所講的主題,分庫(kù)分表。 

三、分庫(kù)分表

不管是分庫(kù)還是分表,都有兩種切分方式:水平切分和垂直切分。下面我們分別看看如何切分。

1、分表

(1)垂直分表

表中的字段較多,一般將不常用的、 數(shù)據(jù)較大、長(zhǎng)度較長(zhǎng)的拆分到“擴(kuò)展表“。一般情況加表的字段可能有幾百列,此時(shí)是按照字段進(jìn)行數(shù)豎直切。注意垂直分是列多的情況。

(2)水平分表

單表的數(shù)據(jù)量太大。按照某種規(guī)則(RANGE,HASH取模等),切分到多張表里面去。但是這些表還是在同一個(gè)庫(kù)中,所以庫(kù)級(jí)別的數(shù)據(jù)庫(kù)操作還是有IO瓶頸。這種情況是不建議使用的,因?yàn)閿?shù)據(jù)量是逐漸增加的,當(dāng)數(shù)據(jù)量增加到一定的程度還需要再進(jìn)行切分。比較麻煩。

2、分庫(kù)

(1)垂直分庫(kù)

一個(gè)數(shù)據(jù)庫(kù)的表太多。此時(shí)就會(huì)按照一定業(yè)務(wù)邏輯進(jìn)行垂直切,比如用戶相關(guān)的表放在一個(gè)數(shù)據(jù)庫(kù)里,訂單相關(guān)的表放在一個(gè)數(shù)據(jù)庫(kù)里。注意此時(shí)不同的數(shù)據(jù)庫(kù)應(yīng)該存放在不同的服務(wù)器上,此時(shí)磁盤空間、內(nèi)存、TPS等等都會(huì)得到解決。

(2)水平分庫(kù)

水平分庫(kù)理論上切分起來(lái)是比較麻煩的,它是指將單張表的數(shù)據(jù)切分到多個(gè)服務(wù)器上去,每個(gè)服務(wù)器具有相應(yīng)的庫(kù)與表,只是表中數(shù)據(jù)集合不同。水平分庫(kù)分表能夠有效的緩解單機(jī)和單庫(kù)的性能瓶頸和壓力,突破IO、連接數(shù)、硬件資源等的瓶頸。

 

四、分庫(kù)分表之后的問(wèn)題

1、聯(lián)合查詢困難

聯(lián)合查詢不僅困難,而且可以說(shuō)是不可能,因?yàn)閮蓚€(gè)相關(guān)聯(lián)的表可能會(huì)分布在不同的數(shù)據(jù)庫(kù),不同的服務(wù)器中。

2、需要支持事務(wù)

分庫(kù)分表后,就需要支持分布式事務(wù)了。數(shù)據(jù)庫(kù)本身為我們提供了事務(wù)管理功能,但是分庫(kù)分表之后就不適用了。如果我們自己編程協(xié)調(diào)事務(wù),代碼方面就又開始了麻煩。

3、跨庫(kù)join困難

分庫(kù)分表后表之間的關(guān)聯(lián)操作將受到限制,我們無(wú)法join位于不同分庫(kù)的表,也無(wú)法join分表粒度不同的表, 結(jié)果原本一次查詢能夠完成的業(yè)務(wù),可能需要多次查詢才能完成。我們可以使用全局表,所有庫(kù)都拷貝一份。

4、結(jié)果合并麻煩

比如我們購(gòu)買了商品,訂單表可能進(jìn)行了拆分等等,此時(shí)結(jié)果合并就比較困難。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI