業內有句俗語:程序員
只會寫代碼的是碼農;學好數據庫,基本能混口飯吃;在此基礎上再學好操做系統和計算機網絡,就能當一個不錯的程序員。若是能再把離散數學、數字電路、體系結構、數據結構/算法、編譯原理學通透,再加上豐富的實踐經驗與領域特定知識,就能算是一個優秀的工程師了。算法
這麼說實際上是有一些道理的,由於計算說穿了就是兩個東西:數據與算法。數據庫
目前市面上常見的軟件應用,大部分都屬於數據密集型應用。通俗的話來說,就是這些應用乾的事兒就是把數據收集起來,須要的時候再拿出來。而這些操做都須要數據庫來進行承載。編程
因此說,數據庫離咱們很近,也是一項開發者們很是須要掌握的技能。這期的 「SFKP • 計算機百科」,咱們就來「SFKP • 數據庫」。網絡
本期內容重點: 數據庫解析,數據庫發展史,我國數據庫進程,對開發者的建議
名詞解析:數據庫數據庫,簡而言之可視爲電子化的文件櫃 —— 存儲電子文件的處所,用戶能夠對文件中的數據運行新增、截取、更新、刪除等操做。所謂「數據庫」系以必定方式儲存在一塊兒、能予多個用戶共享、具備儘量小的冗餘度、與應用程序彼此獨立的數據集合。數據結構
數據庫技術產生於 20 世紀 60 年代末 70 年代初,設置的主要目的是有效地管理和存取大量的數據資源。架構
數據庫其實就是存放數據的倉庫。它的存儲空間很大,能夠存放百萬條、千萬條、上億條數據。可是數據庫並非隨意地將數據進行存放,是有必定的規則的,不然查詢的效率會很低。併發
隨着互聯網的發展,當今世界是一個充斥着大量數據的世界。數據的來源有不少,好比出行記錄、消費記錄、瀏覽的網頁、發送的消息等等。除了文本類型的數據,圖像、音樂、聲音都是數據。數據結構和算法
數年來,數據庫技術和計算機網絡技術的發展相互滲透,相互促進,已成爲當今計算機領域發展迅速,應用普遍的兩大領域。數據庫技術不只應用於事務處理,而且進一步應用到情報檢索、人工智能、專家系統、計算機輔助設計等領域。編程語言
數據庫的概念實際包括兩層意思:
1.數據庫是一個實體,它是可以合理保管數據的「倉庫」,用戶在該「倉庫」中存放要管理的事務數據,「數據」和「庫」兩個概念結合成爲數據庫。2.數據庫是數據管理的新方法和技術,它能更合適的組織數據、更方便的維護數據、更嚴密的控制數據和更有效的利用數據。
數據庫技術研究和管理的對象是數據,因此數據庫技術所涉及的具體內容主要包括:
1.經過對數據的統一組織和管理,按照指定的結構創建相應的數據庫和數據倉庫;2.利用數據庫管理系統和數據挖掘系統設計出可以實現對數據庫中的數據進行添加、修改、刪除、處理、分析、理解、報表和打印等多種功能的數據管理和數據挖掘應用系統;
3.利用應用管理系統最終實現對數據的處理、分析和理解。
按類型劃分,數據庫通常分爲兩類:
關係型數據庫:關係型數據庫和常見的表格比較類似,表與表之間有不少複雜的關聯關係。
包含:MySQL、PostgreSQL、Microsoft Access、Microsoft SQL Server 、Google Fusion Tables、FileMaker、Oracle 數據庫、dBASE、Clipper 等;
非關係型數據庫(NoSQL):
指的是分佈式的、非關係型的、不保證遵循 ACID 原則的數據存儲系統。
包含:BigTable(Google)、Cassandra、MongoDB、CouchDB、Apache Cassandra、Dynamo、LevelDB 等;
按照層級架構,數據庫的架構通常能夠劃分爲三層:
1.內層:最接近實際存儲體,亦即有關數據的實際存儲方式;2.外層:最接近用戶,即有關個別用戶觀看數據的方式;
3.概念層:介於二者之間的間接層。
從其應用方式來看,數據庫技術主要起着兩方面的做用:
1.信息系統開發做用:利用數據庫技術以及互聯網技術,結合具體的編程語言,能夠開發一個信息系統,從而解決業務數據的輸入和管理問題.2.數據分析與展現做用:利用RDBMS的數據查詢功能對數據庫中的數據進行關聯組合或逐級彙總分析,並以表格,圖形或報表形式將分析結果進行展現,從而解決業務數據的綜合利用問題。
從原理來看,不難知道數據庫技術的核心和基礎就是「數據模型」。因此業內回顧數據庫的發展階段時,通常也是根據數據模型的演進做爲相關的時間節點。
在數據庫的發展歷史上,數據庫前後經歷了層次數據庫、網狀數據庫和關係數據庫等各個階段的發展。在這短短几十年的發展過程當中,數據庫的發展通常劃分爲下面這三代:
第一代:網狀和層次數據庫系統;
第二代:是關係數據庫系統;
第三代:以面向對象數據模型爲主要特徵的數據庫系統。
第一代:網狀和層次數據庫系統
第一代數據庫系統是層次和網狀數據庫系統。層次數據庫系統的典型表明是 1969 年 IBM 公司研製出的層次模型的數據庫管理系統IMS。
第二代:關係數據庫系統
第二代數據庫系統是關係數據庫系統。1970 年 IBM 公司的 San Jose 研究試驗室的研究員 Edgar F. Codd 發表了題爲《大型共享數據庫數據的關係模型》的論文,提出了關係數據模型,開創了關係數據庫方法和關係數據庫理論,爲關係數據庫技術奠基了理論基礎。
20 世紀 70 年代是關係數據庫理論研究和原型開發的時代,大量的理論成果和實踐經驗終於使關係數據庫從實驗室走向了社會,所以,人們通常把 20 世紀 70 年代稱爲數據庫時代。
第三代:以面向對象數據模型爲主要特徵的數據庫系統
1990 年高級 DBMS 功能委員會發表了《第三代數據庫系統宣言》,提出了第三代數據庫管理系統應具備的三個基本特徵:
1.應支持數據管理、對象管理和知識管理;
2.必須保持或繼承第二代數據庫系統的技術;
3.必須對其餘系統開放。
隨着雲計算的發展和大數據時代的到來,關係型數據庫愈來愈沒法知足須要,這主要是因爲愈來愈多的半關係型和非關係型數據須要用數據庫進行存儲管理。
於此同時,分佈式技術等新技術的出現對數據庫的技術提出了新的要求,傳統的關係型數據庫慢慢不能完成知足遇到的新需求,愈來愈多的非關係型數據庫就開始出現。
這類數據庫更強調數據庫數據的高併發讀寫和存儲大數據,這類數據庫通常被稱爲 NoSQL(Not only SQL)數據庫。 但傳統的關係型數據庫在一些傳統領域,依然保持了強大的生命力。
中國的數據庫歷史,要從中國數據庫的開拓者 —— 薩師煊老師(上圖)提及。
上個世紀 50,60 年代,伴隨着登月工程等大型項目而生的數據庫,慢慢走近了大衆的視野。
1961 年,美國通用公司研發的第一個數據庫系統 DBMS 誕生。1976 年霍尼韋爾公司開發了第一個商用關係數據庫系統 —— Multics Relational Data Store。
也是在 20 世紀 60 年代,薩師煊等學者就成立了經濟數學研討會,而且已經預見到了數學和計算機技術在將來經濟管理中的應用前景。
1974 年薩師煊又利用在中國人民銀行和國家計委工做的機會,在計算機上進行實際操做。1978 年人民大學覆校,薩師煊等學者最先引入「信息」一詞做爲中國高等學校經濟管理類的專業名稱,建立了經濟信息管理系。
這是中國高等學校中第一個以信息技術在經濟管理領域中的應用爲特點的系科,薩師煊是第一任系主任,並於 1980 年在中國人民大學開設了中國第一個數據庫系統課程。
1979 年薩師煊將本身的講稿聚集成《數據庫系統簡介》和《數據庫方法》並發表。這是中國大陸最先的數據庫學術論文。1982 年,薩師煊起草了國內第一個計算機專業本科「數據庫系統概論」課程的教學大綱。
中國數據庫的這第一批星星之火,如今大多數人已經沒法經過公開渠道尋找到,可是在薩師煊的線上記念館裏,依然會看到一些名字:王珊《數據庫系統概論》做者,國防科技大學計算機學院教授陽國貴等一串國內學界泰斗,由他們編寫的教材,現在依然是學習數據庫的同窗必看的書籍之一。
與大多數中國老科學家同樣,今天的年輕人已經只能在搜索引擎上找到關於他的隻言片語。但由他引入中國的數據庫行業,卻星火燎原,成爲時代脈搏的紀錄者。
說回數據庫的發展。
1978 年,美國的 Ellison 在爲中央情報局作一個數據項目時候,敏銳的發現關係型數據庫的商機。幾個月後,Oracle 1.0 誕生了,這個看起來只不過是個數據庫玩具的產物,讓 Ellison 今後踏進了信息管理這個巨大的藍海產業,並在短短十幾年間,成長爲世界級的巨人。
1989 年,來自中國臺灣的馮星君將 ORACLE 帶入到中國。商業嗅覺敏銳的他天才般的決定給 Oracle 註冊一箇中文名稱,也就是今天的 —— 甲骨文。
這個將中國歷史上最古老的文字與最早進的數據庫科技鏈接在一塊兒的商業創意,後來成爲了無數的商業教材反覆討論的品牌案例。
中國第一代的 DBA 是從 1997 年開始存在的。
1995 年 5 月,郵電部電信總局提出開發和建設"市內電話業務計算機綜合管理系統",即」九七工程「,並於同年 7 月下發了一系列的技術和業務規範,要求全國縣以上的郵電局在 1997 年末前實施「九七工程」。
「九七工程」共分爲九個子系統,其中,營業受理、配線配號、定單管理、機線資源、綜合管理與查詢屬於基本子系統,1十二、11四、計費、號簿子系統與基本子系統徹底實現數據共享。
而中國的第一代 DBA 就在「九七工程」中崛起。中國數據庫的行業格局就在這一時期造成了:金融行業用 IBM DB2 數據庫,Informix 數據庫,在電信行業則是 Oracle 的天下。
到了 1999年,中國第一家數據庫公司誕生了 —— 由上面提到的王珊老師創辦的北京人大金倉信息技術股份有限公司。
從 1999 年開始,各個 IT 社區開始興起,一些數據庫的同行開始走出封閉的公司,在社區裏活躍起來,更多數據庫從業者獲取知識的形式,也從產品文檔,手冊,變成了社區。
「當時國內的整個技術社區裏面你們能獲得的第一手的資料其實還比較少,因此就有比較強的技術人員會去看英文的文檔,國外的網站,而後回去作作實驗,而後去社區裏分享,幫助別人解決一些問題。」 —— 童家旺
2000 年,武漢的達夢數據庫公司成立。達夢公司的產品在業界有外號,叫中國 ORACLE,其主要特色就是和 ORACLE 基本兼容;2004年,天津南大通用數據技術公司成立。主要的產品是 GBASE。
這個時期的數據庫大部分都是依託大學、國有產業之類,研發的數據庫也都大部分用在銀行,國家政府機關,行政企事業單位等。來知足國家對自研數據庫項目使用的一些要求和建議。
而純商業數據庫公司是在隨着中國互聯網企業的發展,慢慢發展起來的。
2009 年以前,淘寶使用的數據庫產品大部分是 ORACLE,而且有着「全亞洲最大的 RAC 集羣」,隨着成本等問題,淘寶決定開始自研數據庫產品。當時淘寶依託的就是 MYSQL ,並研究出了阿里巴巴本身的 MYSQL 分支 —— AliSQL。
2012 年,Google 的 Spanner 橫空出世,這是一款基於分佈式架構的事務性數據庫。受到 Google 的啓發,國外出現了 CockroachDB(蟑螂數據庫)等一系列解決 TP 問題的新興數據庫廠商,但國內市場還找不到研發這類數據庫的創業公司。2015 年,PingCAP 成立,填補了國內這塊兒的空白。
在不少時候,技術的發展除了像上面這種行業相互促進以外,還和社會大環境有關。2018 年美國對中國的貿易封鎖,就讓數據庫行業進入了第二次的大發展。
不少高科技企業面對這種狀況,紛紛發佈本身的數據庫產品,好比阿里的 Polardb , 華爲的 GaussDB , 騰訊的 Tbase 數據庫等。
以後隨着開源趨勢的影響,一大批國內的大中型科技企業,開始紛紛將本身的數據庫技術進行開源。好比上面提到的 PingCAP,還有和阿里雲共同入選 「Gartner數據庫推薦報告」的中國數據庫廠商 —— 雲杉數據庫。
他們的主要產品包括 SequoiaDB 分佈式關係型數據庫與 SequoiaCM 企業內容管理軟件,應用場景包括分佈式在線交易、數據中臺、分佈式內容管理等。目前服務的企業用戶總數已經超過 1000 家。
2019 年也是 5G元年,隨着 5G 和物聯網的發展,產生的數據量將提高到下一個階段,這對數據庫廠商既是挑戰也是一個大機遇。總之,中國的數據庫市場在今年事後,競爭只會變得更加激烈。
就像開頭咱們說的,如今的應用大部分都屬於數據密集型應用,除非咱們準備從輪子造起,否則根本沒那麼多機會去搞看起來很高端的數據結構和算法。
甚至寫代碼的能力可能也沒那麼重要,這個你們應該都懂。大部分需求都有現成的輪子可使用,主要的創造性工做每每在數據模型與數據流設計上。
實際生產中,數據表就是數據結構,索引與查詢就是算法。而應用代碼每每扮演的是膠水的角色,處理IO與業務邏輯,其餘大部分工做都是在數據系統之間搬運數據。
架構師最重要的能力之一,就是可以靈活地權衡取捨、集成拼接數據系統。絕大多數工程師都不會去從零開始編寫存儲引擎,由於在開發應用時,數據庫已是足夠完美的工具了。關係型數據庫則是目前全部數據系統中使用最普遍的組件,能夠說是程序員吃飯的主要傢伙,重要性不言而喻。
我曾經採訪過不少 SegmentFault 社區的用戶,都表示上學的時候沒有好好學數據庫,如今發現基礎真的很重要又翻出來從新學了一遍。假如你還在上學,建議你抓住如今的機會,好好掌握這些基礎的原理,工做以後很難再有時間和機會去」找補「了。
部分資料來源:維基百科詞條:《數據庫》、《薩師煊》
大學計算機基礎:《數據庫技術簡史》
虎嗅網:《中國數據庫40年曆史:隱祕的江湖與恩怨》
常壘資本:《國產數據庫崛起史》
在本文的最後,但願你們能夠和我一塊兒,向全部爲中國數據庫行業發展作出貢獻的先驅與從業者們致敬#respect#