mysql數(shù)據(jù)庫(kù)應(yīng)付大流量網(wǎng)站的的3種架構(gòu)擴(kuò)展方式介紹
數(shù)據(jù)庫(kù)擴(kuò)展大概分為以下幾個(gè)步驟:
1、讀寫分離:當(dāng)數(shù)據(jù)庫(kù)訪問(wèn)量還不是很大的時(shí)候,我們可以適當(dāng)增加服務(wù)器,數(shù)據(jù)庫(kù)主從復(fù)制的方式將讀寫分離;
2、垂直分區(qū):當(dāng)寫入操作一旦增加的時(shí)候,那么主從數(shù)據(jù)庫(kù)將花更多的時(shí)間的放在數(shù)據(jù)同步上,這個(gè)時(shí)候服務(wù)器也是不堪重負(fù)的;那么就有了數(shù)據(jù)的垂直分區(qū),數(shù)據(jù)的垂直分區(qū)思路是將寫入操作比較頻繁的數(shù)據(jù)表,如用戶表_user,或者訂單表_orders,那么我們就可以把這個(gè)兩個(gè)表分離出來(lái),放在不同的服務(wù)器,如果這兩個(gè)表和其他表存在聯(lián)表查詢,那么就只能把原來(lái)的sql語(yǔ)句給拆分了,先查詢一個(gè)表,在查詢另一個(gè),雖然說(shuō)這個(gè)會(huì)消耗更過(guò)性能,但比起那種大量數(shù)據(jù)同步,負(fù)擔(dān)還是減輕了不少;
3、水平分區(qū):但是往往事情不盡人意,可能采取垂直分區(qū)能撐一段時(shí)間,由于網(wǎ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)用戶操作時(shí)先去查詢所在分區(qū),再進(jìn)行操作;
對(duì)于以上幾種擴(kuò)展方式,讀寫分離主要是操作上的擴(kuò)展,垂直分區(qū)主要是對(duì)寫入較頻繁數(shù)據(jù)表的分離,水平分區(qū)主要是數(shù)據(jù)分離;
相關(guān)文章
MySQL rownumber SQL生成自增長(zhǎng)序號(hào)使用介紹
MySQL 幾乎模擬了 Oracle,SQL Server等商業(yè)數(shù)據(jù)庫(kù)的大部分功能,函數(shù)。但很可惜,到目前的版本(5.1.33)為止,仍沒(méi)有實(shí)現(xiàn)ROWNUM這個(gè)功能2011-10-10
mysql把一個(gè)表某個(gè)字段的內(nèi)容復(fù)制到另一張表的某個(gè)字段的SQL語(yǔ)句寫法
有時(shí)候,我們需要復(fù)制某個(gè)字段一整列的數(shù)據(jù)到另外一個(gè)新的字段中,或是需要把某個(gè)表的某個(gè)字段的值跨表復(fù)制到另一個(gè)表中的某個(gè)字段,本文就羅列了一些SQL語(yǔ)句寫法,需要的朋友可以參考下2014-04-04
MySQL對(duì)中文進(jìn)行排序詳解及實(shí)例
這篇文章主要介紹了MySQL對(duì)中文進(jìn)行排序詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
解決mysql 組合AND和OR帶來(lái)的問(wèn)題
這篇文章主要介紹了解決mysql 組合AND和OR帶來(lái)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL
這篇文章主要介紹了C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL的相關(guān)資料,需要的朋友可以參考下2016-12-12

