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