引言
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),荔波企業(yè)網(wǎng)站建設(shè),荔波品牌網(wǎng)站建設(shè),網(wǎng)站定制,荔波網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,荔波網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。隨著互聯(lián)網(wǎng)應(yīng)用的廣泛普及,海量數(shù)據(jù)的存儲(chǔ)和訪問(wèn)成為了系統(tǒng)設(shè)計(jì)的瓶頸問(wèn)題。對(duì)于一個(gè)大型的互聯(lián)網(wǎng)應(yīng)用,每天幾十億的PV無(wú)疑對(duì)數(shù)據(jù)庫(kù)造成了相當(dāng)高的負(fù)載。對(duì)于系統(tǒng)的穩(wěn)定性和擴(kuò)展性造成了極大的問(wèn)題。通過(guò)數(shù)據(jù)切分來(lái)提高網(wǎng)站性能,橫向擴(kuò)展數(shù)據(jù)層已經(jīng)成為架構(gòu)研發(fā)人員選的方式。
為什么要數(shù)據(jù)切分
上面對(duì)什么是數(shù)據(jù)切分做了個(gè)概要的描述和解釋,讀者可能會(huì)疑問(wèn),為什么需要數(shù)據(jù)切分呢?像Oracle這樣成熟穩(wěn)定的數(shù)據(jù)庫(kù),足以支撐海量數(shù)據(jù)的存儲(chǔ)與查詢了?為什么還需要數(shù)據(jù)切片呢?
的確,Oracle的DB確實(shí)很成熟很穩(wěn)定,但是高昂的使用費(fèi)用和高端的硬件支撐不是每一個(gè)公司能支付的起的。試想一下一年幾千萬(wàn)的使用費(fèi)用和動(dòng)輒上千萬(wàn)元的小型機(jī)作為硬件支撐,這是一般公司能支付的起的嗎?即使就是能支付的起,假如有更好的方案,有更廉價(jià)且水平擴(kuò)展性能更好的方案,我們?yōu)槭裁床贿x擇呢?
我們知道每臺(tái)機(jī)器無(wú)論配置多么好它都有自身的物理上限,所以當(dāng)我們應(yīng)用已經(jīng)能觸及或遠(yuǎn)遠(yuǎn)超出單臺(tái)機(jī)器的某個(gè)上限的時(shí)候,我們惟有尋找別的機(jī)器的幫助或者繼續(xù)升級(jí)的我們的硬件,但常見(jiàn)的方案還是橫向擴(kuò)展,通過(guò)添加更多的機(jī)器來(lái)共同承擔(dān)壓力。我們還得考慮當(dāng)我們的業(yè)務(wù)邏輯不斷增長(zhǎng),我們的機(jī)器能不能通過(guò)線性增長(zhǎng)就能滿足需求?Sharding可以輕松的將計(jì)算,存儲(chǔ),I/O并行分發(fā)到多臺(tái)機(jī)器上,這樣可以充分利用多臺(tái)機(jī)器各種處理能力,同時(shí)可以避免單點(diǎn)失敗,提供系統(tǒng)的可用性,進(jìn)行很好的錯(cuò)誤隔離。
綜合以上因素,數(shù)據(jù)切分是很有必要的。 我們用免費(fèi)的MySQL和廉價(jià)的Server甚至是PC做集群,達(dá)到小型機(jī)+大型商業(yè)DB的效果,減少大量的資金投入,降低運(yùn)營(yíng)成本,何樂(lè)而不為呢?
在大中型項(xiàng)目中,在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,考慮到數(shù)據(jù)庫(kù)大承受數(shù)據(jù)量,通常會(huì)把數(shù)據(jù)庫(kù)或者數(shù)據(jù)表水平切分,以降低單個(gè)庫(kù),單個(gè)表的壓力。這里介紹兩個(gè)項(xiàng)目中常用的數(shù)據(jù)表切分方法。當(dāng)然這些方法都是在程序中?使用一定的技巧來(lái)路由到具體的表的。首先我們要確認(rèn)根據(jù)什么來(lái)水平切分?在我們的系統(tǒng)(SNS)中,用戶的UID貫穿系統(tǒng),唯一自增長(zhǎng),根據(jù)這個(gè)字段分表,再好不過(guò)。
方法一:使用MD5哈希
做法是對(duì)UID進(jìn)行md5加密,然后取前幾位(我們這里取前兩位),然后就可以將不同的UID哈希到不同的用戶表(user_xx)中了。
function getTable( $uid ){ $ext = substr ( md5($uid) ,0 ,2 ); return "user_".$ext; }
分享題目:實(shí)現(xiàn)數(shù)據(jù)庫(kù)水平切分的兩個(gè)思路-創(chuàng)新互聯(lián)
地址分享:http://jinyejixie.com/article20/dcggco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站收錄、網(wǎng)站建設(shè)、企業(yè)建站、動(dòng)態(tài)網(wǎng)站、小程序開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容