來自公衆号:SegmentFault
業内有句俗語:
隻會寫代碼的是碼農;學好資料庫,基本能混口飯吃;在此基礎上再學好作業系統和計算機網絡,就能當一個不錯的程式員。
如果能再把離散數學、數字電路、體系結構、資料結構/算法、編譯原理學通透,再加上豐富的實踐經驗與領域特定知識,就能算是一個優秀的工程師了。
這麼說其實是有一些道理的,因為計算說穿了就是兩個東西:資料與算法。
目前市面上常見的軟體應用,大部分都屬于資料密集型應用。通俗的話來講,就是這些應用幹的事兒就是把資料收集起來,需要的時候再拿出來。而這些操作都需要資料庫來進行承載。
是以說,資料庫離我們很近,也是一項開發者們非常需要掌握的技能。這期的 「SFKP • 計算機百科」,我們就來「SFKP • 資料庫」。
本期内容重點:
資料庫解析,資料庫發展史,我國資料庫程序,對開發者的建議
啥是資料庫?

名詞解析:資料庫
資料庫,簡而言之可視為電子化的檔案櫃 —— 存儲電子檔案的處所,使用者可以對檔案中的資料運作新增、截取、更新、删除等操作。所謂“資料庫”系以一定方式儲存在一起、能予多個使用者共享、具有盡可能小的備援度、與應用程式彼此獨立的資料集合。
資料庫技術産生于 20 世紀 60 年代末 70 年代初,設定的主要目的是有效地管理和存取大量的資料資源。
資料庫其實就是存放資料的倉庫。它的存儲空間很大,可以存放百萬條、千萬條、上億條資料。但是資料庫并不是随意地将資料進行存放,是有一定的規則的,否則查詢的效率會很低。
随着網際網路的發展,當今世界是一個充斥着大量資料的世界。資料的來源有很多,比如出行記錄、消費記錄、浏覽的網頁、發送的消息等等。除了文本類型的資料,圖像、音樂、聲音都是資料。
數年來,資料庫技術和計算機網絡技術的發展互相滲透,互相促進,已成為當今計算機領域發展迅速,應用廣泛的兩大領域。資料庫技術不僅應用于事務處理,并且進一步應用到情報檢索、人工智能、專家系統、計算機輔助設計等領域。
資料庫的概念實際包括兩層意思:
- 資料庫是一個實體,它是能夠合理保管資料的“倉庫”,使用者在該“倉庫”中存放要管理的事務資料,“資料”和“庫”兩個概念結合成為資料庫。
- 資料庫是資料管理的新方法和技術,它能更合适的組織資料、更友善的維護資料、更嚴密的控制資料和更有效的利用資料。
資料庫技術研究和管理的對象是資料,是以資料庫技術所涉及的具體内容主要包括:
- 通過對資料的統一組織和管理,按照指定的結建構立相應的資料庫和資料倉庫;
- 利用資料庫管理系統和資料挖掘系統設計出能夠實作對資料庫中的資料進行添加、修改、删除、處理、分析、了解、報表和列印等多種功能的資料管理和資料挖掘應用系統;
- 利用應用管理系統最終實作對資料的處理、分析和了解。
按類型劃分,資料庫一般分為兩類:
關系型資料庫:
關系型資料庫和常見的表格比較相似,表與表之間有很多複雜的關聯關系。
包含: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 等;
按照層級架構,資料庫的架構一般可以劃分為三層:
- 内層:最接近實際存儲體,亦即有關資料的實際存儲方式;
- 外層:最接近使用者,即有關個别使用者觀看資料的方式;
- 概念層:介于兩者之間的間接層。
從其應用方式來看,資料庫技術主要起着兩方面的作用:
- 資訊系統開發作用:利用資料庫技術以及網際網路技術,結合具體的程式設計語言,可以開發一個資訊系統,進而解決業務資料的輸入和管理問題.
- 資料分析與展示作用:利用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 年底前實施「九七工程」。
「九七工程」共分為九個子系統,其中,營業受理、配線配号、定單管理、機線資源、綜合管理與查詢屬于基本子系統,112、114、計費、号簿子系統與基本子系統完全實作資料共享。
而中國的第一代 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年曆史:隐秘的江湖與恩怨》
常壘資本:《國産資料庫崛起史》