淺析數(shù)據(jù)庫的進(jìn)化史,看似簡(jiǎn)單的輪回
原創(chuàng)數(shù)據(jù)庫在變遷,這個(gè)變遷你是否注意到了呢?你是否跟著這個(gè)變遷的軌跡前進(jìn)呢?有人說數(shù)據(jù)庫的變遷就像是一個(gè)輪回,你信嗎?你又是怎么看待這個(gè)變遷的呢?
一、總體說說數(shù)據(jù)庫
從數(shù)據(jù)管理與應(yīng)用邏輯的角度來講,“File”時(shí)期的數(shù)據(jù)管理和應(yīng)用邏輯是混在一起的,數(shù)據(jù)的管理完全由應(yīng)用本身來完成;再來看關(guān)系型數(shù)據(jù)庫的時(shí)期,在這個(gè)時(shí)期數(shù)據(jù)管理和應(yīng)用邏輯實(shí)現(xiàn)了分離,應(yīng)用可以不關(guān)心數(shù)據(jù)的管理工作,甚至有一部分邏輯都可以放到數(shù)據(jù)庫中來實(shí)現(xiàn);而如果我們?cè)倏匆幌翹oSQL時(shí)期,數(shù)據(jù)的存儲(chǔ)方式大部分都是Key/Value方式,在這種方式之下,應(yīng)用又要關(guān)心數(shù)據(jù)的管理了,因?yàn)楹芏郚oSQL沒有像關(guān)系型數(shù)據(jù)那樣強(qiáng)大的SQL查詢功能。
二、過去的數(shù)據(jù)庫
數(shù)據(jù)庫過去是什么樣子的?讓我們一起來回顧一下吧!在數(shù)據(jù)庫技術(shù)誕生之前,數(shù)據(jù)主要是以File形式存儲(chǔ)的,數(shù)據(jù)的管理也是由具體的應(yīng)用自身來完成的,所以這個(gè)時(shí)期的數(shù)據(jù)管理和應(yīng)用邏輯是混在一起的。
直到40年前***代數(shù)據(jù)庫技術(shù)的誕生,才實(shí)現(xiàn)了數(shù)據(jù)管理與應(yīng)用邏輯的分離,采用層次結(jié)構(gòu)來描述數(shù)據(jù),我們稱之為層次型數(shù)據(jù)庫(IMS)。
至于我們常說RDBMS,其實(shí)是第二代數(shù)據(jù)庫技術(shù),上世紀(jì)70年代,來自IBM的E.F Codd博士提出的關(guān)系型理論以及SQL語言的發(fā)明。實(shí)現(xiàn)了數(shù)據(jù)建模和數(shù)據(jù)操作處理的標(biāo)準(zhǔn)化,關(guān)系型數(shù)據(jù)庫在其后的20多年的時(shí)間取得了長(zhǎng)足的發(fā)展,得到了廣泛的應(yīng)用,關(guān)系型數(shù)據(jù)庫似乎已經(jīng)成為了一種宗教式的信仰,數(shù)據(jù)相關(guān)的所有理論問題似乎都已經(jīng)解決。
三、面對(duì)新的挑戰(zhàn)
歷史的發(fā)展總是在我們不經(jīng)意間產(chǎn)生轉(zhuǎn)折,所有重大技術(shù)的產(chǎn)生及發(fā)展都有其生存的土壤。在過去的20多年里,IT領(lǐng)域發(fā)生了重大的變化和一系列技術(shù)及理念的創(chuàng)新。數(shù)據(jù)庫所生存的外部土壤隨著Internet以及Web2.0甚至是Web3.0技術(shù)的發(fā)展,對(duì)結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)與管理技術(shù)提出了新的挑戰(zhàn)。
首先,數(shù)據(jù)的復(fù)雜性和靈活性(Complicated &Flexible );
其次,高性能的并發(fā)讀寫(High Performance);
再次,海量數(shù)據(jù)的高效率存儲(chǔ)和訪問(Huge Storage);
***,高可擴(kuò)展性(High Scalability)。
四、它有點(diǎn)兒吃不消
面對(duì)以上挑戰(zhàn),關(guān)系數(shù)據(jù)庫的很多優(yōu)秀特性卻往往無用武之地,甚至成為一種負(fù)擔(dān)。
比如,關(guān)系數(shù)據(jù)庫嚴(yán)格的數(shù)據(jù)定義與數(shù)據(jù)的復(fù)雜性和靈活性產(chǎn)生了激烈的對(duì)抗,關(guān)系數(shù)據(jù)庫的核心E-R模型本質(zhì)上是一個(gè)二維的模型,通過一系列二維關(guān)系的組合來描述復(fù)雜實(shí)體對(duì)象,每個(gè)表所代表的所有實(shí)體在建模設(shè)計(jì)時(shí)沒有差異性,即使只有一個(gè)實(shí)體擁有某種屬性,也必須為其建立一個(gè)字段。因而在很多系統(tǒng)中,我們經(jīng)常可以看到一張表有數(shù)百個(gè)字段,而對(duì)于每條記錄,大多數(shù)字段都是空的。
同時(shí),隨著IT系統(tǒng)進(jìn)入社會(huì)生活的各個(gè)方面,信息不僅日益復(fù)雜,而且其需求內(nèi)容和結(jié)構(gòu)隨著時(shí)間的推移也不斷地產(chǎn)生變化.現(xiàn)實(shí)世界要求信息技術(shù)具有越來越高的靈活性和適應(yīng)性.關(guān)系型數(shù)據(jù)理論所采用的是一種固定的建模方式,任何關(guān)系和屬性一旦定義,就是固定的,難以隨著需求的變化進(jìn)行靈活的調(diào)整。
在高性能的并發(fā)讀寫方面,關(guān)系型數(shù)據(jù)庫良好的事務(wù)一致性使得它很滿足理高性能的并發(fā)讀寫需求,實(shí)際情況是對(duì)于大部分的Web應(yīng)用并不要求嚴(yán)格的數(shù)據(jù)庫事務(wù),對(duì)讀一致性的要求很低,有些場(chǎng)合對(duì)寫一致性要求也不高。因此數(shù)據(jù)庫事務(wù)管理反而成了數(shù)據(jù)庫高負(fù)載下一個(gè)沉重的負(fù)擔(dān)。
至于海量數(shù)據(jù)存儲(chǔ)高效存儲(chǔ)和訪問,隨著像Facebook,twitter,F(xiàn)riendfeed這類的SNS網(wǎng)站的誕生與發(fā)展,數(shù)據(jù)的增長(zhǎng)是爆發(fā)式的,以Friendfeed為例,一個(gè)月就達(dá)到了2.5億條用戶動(dòng)態(tài),對(duì)于關(guān)系數(shù)據(jù)庫來說,在一張2.5億條記錄的表里面進(jìn)行SQL查詢,效率是極其低下乃至不可忍受的。為了解決這個(gè)問題Friendfeed采用了schema-less的方式來解決問題,由此可見對(duì)于海量數(shù)據(jù)的高效存數(shù)和訪問,如果繼續(xù)以傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的方式來管理數(shù)據(jù)是行不通的。
對(duì)于高可擴(kuò)展性這兩個(gè)方面在基于web的架構(gòu)當(dāng)中,數(shù)據(jù)庫是最難進(jìn)行橫向擴(kuò)展的,當(dāng)一個(gè)應(yīng)用系統(tǒng)的用戶量和訪問量與日俱增的時(shí)候,你的數(shù)據(jù)庫卻沒有辦法像web server那樣簡(jiǎn)單的通過添加更多的硬件和服務(wù)節(jié)點(diǎn)來擴(kuò)展性能和負(fù)載能力。對(duì)于很多需要提供24小時(shí)不間斷服務(wù)的網(wǎng)站來說,對(duì)數(shù)據(jù)庫系統(tǒng)進(jìn)行升級(jí)和擴(kuò)展是非常痛苦的事情,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移,而對(duì)于NoSQL類型的數(shù)據(jù)庫這種擴(kuò)展和遷移的成本卻低很多。
五、它能擔(dān)重任嗎?
對(duì)于未來結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)技術(shù)的發(fā)展來說,NoSQL能否擔(dān)當(dāng)大任現(xiàn)在還不好說,但未來“On Fits All”方式的關(guān)系型數(shù)據(jù)庫技術(shù)會(huì)越來越捉襟見肘,針對(duì)于大型Web應(yīng)用的定制化的存儲(chǔ)方案會(huì)越來越多的被采用,而在這些方案中NoSQL一定有它的用武之地,且讓我們拭目以待。
六、這不是一個(gè)簡(jiǎn)單的輪回
在了解了大量的數(shù)據(jù)庫發(fā)展演變之后,不知道大家是否發(fā)現(xiàn)一個(gè)有趣的規(guī)律,從File→RDBMS,再從RDBMS→NoSQL,就像是轉(zhuǎn)了一個(gè)圈,仿若轉(zhuǎn)到了起點(diǎn),仿佛回到了初始之處。難道退化了嗎?答案,當(dāng)然是No,下面我們請(qǐng)我們的老師——新浪樂居的蔣宗君先生為我們一一道來。
“技術(shù)的發(fā)展會(huì)有一個(gè)周而復(fù)始,循環(huán)往復(fù)的過程,但絕不會(huì)是簡(jiǎn)簡(jiǎn)單單的畫一個(gè)圈,這只是一個(gè)應(yīng)用開發(fā)回歸到關(guān)注數(shù)據(jù)存儲(chǔ)與管理的一個(gè)過程,我們都知道‘數(shù)據(jù)結(jié)構(gòu)+算法=程序’,未來工程師可能要對(duì)數(shù)據(jù)結(jié)構(gòu)投入更多的關(guān)注,我認(rèn)為這是一個(gè)‘認(rèn)祖歸宗,回歸本源’的過程,從這個(gè)層面來考慮應(yīng)用的開發(fā)和架構(gòu)。我認(rèn)為這不是一種退步,而是一個(gè)理性回歸的過程,是一種進(jìn)步,因?yàn)槲覀兏咏藨?yīng)用開發(fā)的本質(zhì)。”
當(dāng)記者問道,老師一直在說這是一個(gè)輪回,那么,這是一個(gè)什么樣子的輪回時(shí),蔣老師為我們解惑曰:“首先,我們要了解結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的過程。關(guān)于這個(gè)過程,我的理解是經(jīng)歷過幾個(gè)時(shí)期,***個(gè)時(shí)期我稱之為數(shù)據(jù)庫技術(shù)的史前時(shí)期,我們姑且以“File”時(shí)期來描述,第二個(gè)時(shí)期是數(shù)據(jù)庫技術(shù)尤其是關(guān)系型數(shù)據(jù)庫大行其道時(shí)期,而第三個(gè)時(shí)期我認(rèn)為正在發(fā)展中,現(xiàn)在看來可能還沒有成型,可能還只是一個(gè)趨勢(shì),而NoSQL我認(rèn)為可算是站在這個(gè)大的趨勢(shì)之上的‘弄潮兒’。所以在我看來結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)經(jīng)歷了一個(gè)從“數(shù)據(jù)管理和應(yīng)用邏輯混在一起”到“數(shù)據(jù)管理與應(yīng)用邏輯分離”再到“應(yīng)用邏輯需要重新關(guān)心數(shù)據(jù)的管理”這一樣一個(gè)輪回,這不是一個(gè)具體的輪回,而是一個(gè)關(guān)于數(shù)據(jù)存儲(chǔ)與管理的理念的輪回,當(dāng)然更不會(huì)是一個(gè)簡(jiǎn)單的輪回。”
它看似簡(jiǎn)單,實(shí)則蘊(yùn)含大門道......
它看似上升,又仿佛回到原點(diǎn)......
它看似回歸,實(shí)則進(jìn)步上升......
【編輯推薦】























