引言
隨著云計(jì)算時(shí)代的到來,各種類型的互聯(lián)網(wǎng)應(yīng)用層出不窮,對與此相關(guān)的數(shù)據(jù)模型、分布式架構(gòu)、數(shù)據(jù)存儲等數(shù)據(jù)庫相關(guān)的技術(shù)指標(biāo)也提出了新的要求。雖然傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已在數(shù)據(jù)存儲方面占據(jù)了不可動搖的地位,但由于其天生的限制,已經(jīng)越來越無法滿足云計(jì)算時(shí)代對數(shù)據(jù)擴(kuò)展、讀寫速度、支撐容量以及建設(shè)和運(yùn)營成本的要求。云計(jì)算時(shí)代對數(shù)據(jù)庫技術(shù)提出了新的需求,主要表現(xiàn)在以下幾個(gè)方面。
●海量數(shù)據(jù)處理:對類似搜索引擎和電信運(yùn)營商級的經(jīng)營分析系統(tǒng)這樣大型的應(yīng)用而言,需要能夠處理PB級的數(shù)據(jù),同時(shí)應(yīng)對百萬級的流量。
●大規(guī)模集群管理:分布式應(yīng)用可以更加簡單地部署、應(yīng)用和管理。
●低延遲讀寫速度:快速的響應(yīng)速度能夠極大地提高用戶的滿意度。
●建設(shè)及運(yùn)營成本:云計(jì)算應(yīng)用的基本要求是希望在硬件成本、軟件成本以及人力成本方面都有大幅度的降低。
關(guān)系型數(shù)據(jù)庫的劣勢分析
隨著Web2.0的發(fā)展,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在應(yīng)對超大規(guī)模和高并發(fā)的SNS類型的網(wǎng)站方面暴露了許多難以克服的問題,主要表現(xiàn)在以下方面。
(1)高并發(fā)讀寫速度慢
這種情況主要發(fā)生在數(shù)據(jù)量達(dá)到一定規(guī)模時(shí),由于關(guān)系型數(shù)據(jù)庫的系統(tǒng)邏輯非常復(fù)雜,使得其非常容易發(fā)生死鎖等并發(fā)問題,導(dǎo)致其讀寫速度下降非常嚴(yán)重。例如,Web2.0網(wǎng)站要根據(jù)用戶個(gè)性化信息來實(shí)時(shí)生成動態(tài)頁面、提供動態(tài)信息,所以基本上無法使用動態(tài)頁面靜態(tài)化技術(shù),因此數(shù)據(jù)庫并發(fā)負(fù)載非常高,往往要達(dá)到每秒上萬次讀寫請求。關(guān)系型數(shù)據(jù)庫勉強(qiáng)可以應(yīng)付上萬次SQL查詢,硬盤I/O往往無法承擔(dān)上萬次的SQL寫數(shù)據(jù)請求。
(2)支撐容量有限
類似Facebook、Twitter這樣的SNS網(wǎng)站,用戶每天產(chǎn)生海量的用戶動態(tài),每月會產(chǎn)生幾億條用戶動態(tài),對于關(guān)系型數(shù)據(jù)庫來說,在一張數(shù)億條記錄的表里面進(jìn)行SQL查詢,效率是極其低下乃至不可忍受的。
(3)擴(kuò)展性差
在基于Web的架構(gòu)當(dāng)中,數(shù)據(jù)庫是最難進(jìn)行橫向擴(kuò)展的,當(dāng)一個(gè)應(yīng)用系統(tǒng)的用戶量和訪問量與日俱增的時(shí)候,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫卻沒有辦法像Web Server那樣簡單地通過添加更多的硬件和服務(wù)節(jié)點(diǎn)來擴(kuò)展性能和負(fù)載能力。對于很多需要提供不間斷服務(wù)的網(wǎng)站來說,對數(shù)據(jù)庫系統(tǒng)進(jìn)行升級和擴(kuò)展是非常痛苦的事情,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移,因此迫切需要關(guān)系型數(shù)據(jù)庫也能夠通過不斷添加服務(wù)器節(jié)點(diǎn)來實(shí)現(xiàn)擴(kuò)展。
(4)建設(shè)和運(yùn)維成本高
企業(yè)級數(shù)據(jù)庫的價(jià)格很高,并且隨著系統(tǒng)的規(guī)模增大而不斷上升。高昂的建設(shè)和運(yùn)維成本無法滿足云計(jì)算應(yīng)用對數(shù)據(jù)庫的需求。
關(guān)系型數(shù)據(jù)庫遇到上述難以克服的瓶頸,與此同時(shí),它的很多主要特性在云計(jì)算應(yīng)用中卻往往無用武之地,例如:數(shù)據(jù)庫事務(wù)一致性、數(shù)據(jù)庫的寫實(shí)時(shí)性和讀實(shí)時(shí)性、復(fù)雜的SQL查詢特別是多表關(guān)聯(lián)查詢。因此,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)無法獨(dú)立應(yīng)付云計(jì)算時(shí)代的各種應(yīng)用。
NoSQL數(shù)據(jù)庫數(shù)據(jù)模型
關(guān)系型數(shù)據(jù)庫越來越無法滿足云計(jì)算的應(yīng)用場景,為了解決此類問題,非關(guān)系型數(shù)據(jù)庫應(yīng)運(yùn)而生,由于在設(shè)計(jì)上和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫相比有了很大的不同,所以此類數(shù)據(jù)庫被稱為“NoSQL(Not>