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