數(shù)據(jù)庫(kù)擴(kuò)展大概分為以下幾個(gè)步驟:
1、讀寫(xiě)分離:當(dāng)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)量還不是很大的時(shí)候,我們可以適當(dāng)增加服務(wù)器,數(shù)據(jù)庫(kù)主從復(fù)制的方式將讀寫(xiě)分離;
2、垂直分區(qū):當(dāng)寫(xiě)入操作一旦增加的時(shí)候,那么主從數(shù)據(jù)庫(kù)將花更多的時(shí)間的放在數(shù)據(jù)同步上,這個(gè)時(shí)候服務(wù)器也是不堪重負(fù)的;那么就有了數(shù)據(jù)的垂直分區(qū),數(shù)據(jù)的垂直分區(qū)思路是將寫(xiě)入操作比較頻繁的數(shù)據(jù)表,如用戶(hù)表_user,或者訂單表_orders,那么我們就可以把這個(gè)兩個(gè)表分離出來(lái),放在不同的服務(wù)器,如果這兩個(gè)表和其他表存在聯(lián)表查詢(xún),那么就只能把原來(lái)的sql語(yǔ)句給拆分了,先查詢(xún)一個(gè)表,在查詢(xún)另一個(gè),雖然說(shuō)這個(gè)會(huì)消耗更過(guò)性能,但比起那種大量數(shù)據(jù)同步,負(fù)擔(dān)還是減輕了不少;
3、水平分區(qū):但是往往事情不盡人意,可能采取垂直分區(qū)能撐一段時(shí)間,由于網(wǎng)站太火了,訪(fǎng)問(wèn)量又每日100w,一下子蹦到了1000w,這個(gè)時(shí)候可以采取數(shù)據(jù)的進(jìn)行分離,我們可以根據(jù)user的Id不同進(jìn)行分配,如采取%2的形式,或者%10的形式,當(dāng)然這種形式對(duì)以后的擴(kuò)展有了很大的限制,當(dāng)我由10個(gè)分區(qū)增加到20個(gè)的時(shí)候,所有的數(shù)據(jù)都得重新分區(qū),那么將是一個(gè)的很龐大的計(jì)算量;以下提供幾種常見(jiàn)的算法:
哈希算法:就是采用user_id%的方式;
范圍:可以根據(jù)user_id字符值范圍分區(qū),如1-1000為一區(qū),1001-2000則是另一個(gè)區(qū)等;
映射關(guān)系:就是將user_id存在的所對(duì)應(yīng)的分區(qū)放在數(shù)據(jù)庫(kù)中保存,當(dāng)用戶(hù)操作時(shí)先去查詢(xún)所在分區(qū),再進(jìn)行操作;
對(duì)于以上幾種擴(kuò)展方式,讀寫(xiě)分離主要是操作上的擴(kuò)展,垂直分區(qū)主要是對(duì)寫(xiě)入較頻繁數(shù)據(jù)表的分離,水平分區(qū)主要是數(shù)據(jù)分離;
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注