以下內(nèi)容皆為個(gè)人摸索,沒(méi)有人專門指導(dǎo)(公司不給力??!DBA和大牛都木有。。。),所以難免出錯(cuò),如有錯(cuò)誤歡迎指正,小子勇于接受批評(píng)~(*^__^*) ~
水平分庫(kù)分表和垂直分庫(kù)分表,大家都經(jīng)常談,我說(shuō)下我的理解,看圖:
垂直分表就不用說(shuō)了,基本上會(huì)SQLServer的都會(huì)。
垂直分庫(kù)就是根據(jù)業(yè)務(wù)需求來(lái)分庫(kù),比如教育系列的,可以分為資訊,課程,用戶(學(xué)生,學(xué)校)三個(gè)數(shù)據(jù)庫(kù)。比如電商的可以分為訂單,商品,用戶(商家,消費(fèi)者)三個(gè)數(shù)據(jù)庫(kù)。這邊只是舉個(gè)例子,具體的你得根據(jù)你們自己業(yè)務(wù)的實(shí)際情況來(lái)分,不是分的越多越好,最好是遇到瓶頸了再去做這些事情(這個(gè)過(guò)程才能學(xué)到很多東西)
水平分表主要就兩種方法,Hash取余法和時(shí)間路由法。我重點(diǎn)說(shuō)下時(shí)間路由的方法,這種方案后期擴(kuò)容和歷史數(shù)據(jù)抽離【結(jié)合列索引更勁爆哦~】比較方便。
舉個(gè)簡(jiǎn)單的路由表:(時(shí)間你可以用傳統(tǒng)的格式,我這邊用的是時(shí)間軸)
這個(gè)是文章表的時(shí)間路由表,每次查詢文章的時(shí)候根據(jù)查詢的時(shí)間看看
比如我現(xiàn)在準(zhǔn)備寫入數(shù)據(jù),當(dāng)前時(shí)間 2016/11/18 16:37:29 ==》1479458249
select RTableName from Route_Article where 1479458249<REndTime and 1479458249>RCreateTime
就可以知道我應(yīng)該往哪個(gè)表里面寫數(shù)據(jù):==》Article2
同理,想查詢某個(gè)時(shí)間的數(shù)據(jù)也是可以通過(guò)路由表知道該往哪個(gè)表里面查詢
水平分庫(kù)之前提了一下文件組(http://www.cnblogs.com/dunitian/p/5276431.html)后面還會(huì)有一篇文章進(jìn)行擴(kuò)展說(shuō)明(http://www.cnblogs.com/dunitian/p/6078512.html),這邊就不說(shuō)了。
其實(shí)企業(yè)里面用的最多的是復(fù)合型的,比如:水平分庫(kù)分表 ,水平分庫(kù)+垂直分庫(kù)+分表
真的有了這方面的瓶頸的話水平分表一般只能緩解,并不能真正解決,畢竟還是在一臺(tái)服務(wù)器上。單表的數(shù)據(jù)量是減少了,但是IO,連接數(shù),帶寬之類的瓶頸并不能有多大的改善。
水平分庫(kù)分