上一次瞭解到介紹過兩個 IBM 研究員在 1974 年發表了一篇有關結構化英語查詢語言的論文,並將這門語言命名為 SEQUEL。SEQUEL 的語言標準是開放的,但是圍繞它的商業化競爭卻從來沒有停止過。首先因為商標之爭,SEQUEL 改名為 SQL,後來有一個重量級的公司基於那篇論文研發出了商業化的資料庫管理軟體,這就是 Oracle。自此之後,又誕生了一堆大家熟知的 DBMS,比如 MySQL、SQL Server、PostgreSQL、DB2 和 MongoDB 等。

這次學習通過瞭解一下這些資料庫管理軟體,也就是 DBMS。為什麼需要了解它們呢?因為在工作中,我們通常都是和這些資料庫管理軟體打交道,只不過 SQL 是它們的通用語言。


從 SQL 語言中跳脫出來,來分析下這些 DBMS。關於今天的內容,可以從以下幾個方面進行思考學習:

  • 主流的 DBMS 都有哪些,它們各自都有哪些特點;
  • 既然 SQL 是通用的標準語言,為什麼能存在這麼多 DBMS;
  • 從這些 DBMS 的發展史中,有哪些體會感悟。
  • DB、DBS 和 DBMS 的區別是什麼
  • 說到 DBMS,有一些概念你需要了解。

基礎知識

DBMS 的英文全稱是 DataBase Management System,資料庫管理系統,實際上它可以對多個資料庫進行管理,所以你可以理解為 DBMS = 多個資料庫(DB) + 管理程序。

DB 的英文是 DataBase,也就是資料庫。資料庫是存儲數據的集合,你可以把它理解為多個數據表。

DBS 的英文是 DataBase System,資料庫系統。它是更大的概念,包括了資料庫、資料庫管理系統以及資料庫管理人員 DBA。

這裡需要注意的是,雖然有時候我們把 Oracle、MySQL 等稱之為資料庫,但確切講,它們應該是資料庫管理系統,即 DBMS。

瞭解了 DBMS 的概念之後,我們來看下當前主流的 DBMS 都有哪些。下面這張表是 2019 年 5 月 DB-Engines 公佈的 DBMS 的排名(每年的排名會有更新,主要依據這些 DBMS 在搜索引擎上的熱度):

排名前 20 的 DBMS 。從排名中我們能看出來,關係型資料庫絕對是 DBMS 的主流,其中使用最多的 DBMS 分別是 Oracle、MySQL 和 SQL Server。

關係型資料庫(RDBMS)就是建立在關係模型基礎上的資料庫,SQL 就是關係型資料庫的查詢語言。相比於 SQL,NoSQL 泛指非關係型資料庫,包括了榜單上的鍵值型資料庫、文檔型資料庫、搜索引擎和列存儲等,除此以外還包括圖形資料庫。

鍵值型資料庫通過 Key-Value 鍵值的方式來存儲數據,其中 Key 和 Value 可以是簡單的對象,也可以是複雜的對象。Key 作為唯一的標識符,優點是查找速度快,在這方面明顯優於關係型資料庫,同時缺點也很明顯,它無法像關係型資料庫一樣自由使用條件過濾(比如 WHERE),如果你不知道去哪裡找數據,就要遍歷所有的鍵,這就會消耗大量的計算。鍵值型資料庫典型的使用場景是作為內容緩存。Redis 是最流行的鍵值型資料庫。

文檔型資料庫用來管理文檔,在資料庫中文檔作為處理信息的基本單位,一個文檔就相當於一條記錄,MongoDB 是最流行的文檔型資料庫。

列式資料庫是相對於行式存儲的資料庫,Oracle、MySQL、SQL Server 等資料庫都是採用的行式存儲(Row-based),而列式資料庫是將數據按照列存儲到資料庫中,這樣做的好處是可以大量降低系統的 I/O,適合於分散式文件系統,不足在於功能相對有限。

圖形資料庫,利用了圖這種數據結構存儲了實體(對象)之間的關係。最典型的例子就是社交網路中人與人的關係,數據模型主要是以節點和邊(關係)來實現,特點在於能高效地解決複雜的關係問題。

搜索引擎也是資料庫檢索中的重要應用,常見的全文搜索引擎有 Elasticsearch、Splunk 和 Solr。雖然關係型資料庫採用了索引提升檢索效率,但是針對全文索引效率卻較低。搜索引擎的優勢在於採用了全文搜索的技術,核心原理是「倒排索引」。


SQL 陣營與 NoSQL 陣營

NoSQL 的分類很多,剛才提到的鍵值型、文檔型、搜索引擎、列式存儲和圖形資料庫等都屬於 NoSQL 陣營。也只有用 NoSQL 一詞才能將這些技術囊括進來。即便如此,在 DBMS 排名中,還是 SQL 陣營的比重更大,影響力前 5 的 DBMS 中有 4 個是關係型資料庫,而排名前 20 的 DBMS 中也有 12 個是關係型資料庫。所以說,掌握 SQL 是非常有必要的。

由於 SQL 一直稱霸 DBMS,因此許多人在思考是否有一種資料庫技術能遠離 SQL,於是 NoSQL 誕生了,但是隨著發展卻發現越來越離不開 SQL。到目前為止 NoSQL 陣營中的 DBMS 都會有實現類似 SQL 的功能。下面是「NoSQL」這個名詞在不同時期的詮釋,從這些釋義的變化中可以看出 NoSQL 功能的演變:

1970:NoSQL = We have no SQL;1980:NoSQL = Know SQL;2000:NoSQL = No SQL!;2005:NoSQL = Not only SQL;2013:NoSQL = No, SQL!

NoSQL 對 SQL 做出了很好的補充,它可以讓我們在雲計算時代,更好地使用資料庫技術,比如快速讀寫,這樣可以用低廉的成本,更方便進行擴展。學習過程中圍繞 SQL 展開,同時你還需要了解 SQL 陣營中不同的 DBMS 之間的使用差異。這些 DBMS 除了支持 SQL 標準以外,還會有自己的「方言」,也就是自己獨有的語法。

SQL 陣營中的 DBMS(這塊屬於擴展部分,不需掌握)

如果我們把數據互通作為當今數字化社會發展的大中臺能力,那麼 DBMS 無疑是一個巨大的市場。在這個市場中,排名前 20 的 DBMS 有 12 個屬於 SQL 陣營,其中排名前 3 名的 DBMS 均為 SQL 陣營,它們分別是 Oracle、MySQL 和 SQL Server。這三家的市場份額遠超其他 DBMS 的市場份額。

下面,簡單介紹下這三個主流 DBMS 的發展。

  • 1979 年,Oracle 2 誕生,它是第一個商用的 RDBMS(關係型資料庫管理系統),隨後被賣給了軍方客戶。隨著 Oracle 軟體的名氣越來越大,公司也改叫 Oracle 公司。20 世紀 90 年代,Oracle 的創始人埃裏森成為繼比爾·蓋茨之後第二富有的人,可以說 IBM 締造了兩個帝國,一個是軟體業的霸主微軟,另一個是企業軟體市場的霸主 Oracle。如今 Oracle 的年收入達到了 400 億美金,足以證明商用資料庫軟體的價值。從這點我們也能看出,如果選擇了一個大的賽道,就要儘早商業化,佔據大型企業客戶完全可以創建巨大的商業價值,也足以證明一個軟體企業不需要靠賣硬體也可以掙到很多錢。
  • MySQL 是 1995 年誕生的開源資料庫管理系統,因為免費開源的特性,得到了開發者的喜愛,用戶量迅速增長,成為開源資料庫的 No.1。但在發展過程中,MySQL 先後兩次被易手,先是在 2008 年被 SUN 收購,然後在 2010 年 SUN 被 Oracle 收購,於是 Oracle 同時擁有了 MySQL 的管理權,至此 Oracle 在資料庫領域中成為絕對的領導者。從這裡我們也能看到,雖然 MySQL 是免費的產品,但是使用人數多,就足以證明巨大的用戶價值。一個有巨大用戶價值的產品,即使沒有直接的商業價值,但作為基礎設施也會被商業巨頭看上。不過在 Oracle 收購 MySQL 的同時,MySQL 的創造者擔心 MySQL 有閉源的風險,因此創建了 MySQL 的分支項目 MariaDB,MariaDB 在絕大部分情況下都是與 MySQL 兼容的,並且增加了許多新的特性,比如支持更多的存儲引擎類型。許多企業也由原來的 MySQL 紛紛轉向了 MariaDB。
  • SQL Server 是微軟開發的商業資料庫,誕生於 1989 年。實際上微軟還推出了 Access 資料庫,它是一種桌面資料庫,同時具備後臺存儲和前臺界面開發的功能,更加輕量級,適合小型的應用場景。因為後臺的存儲空間有限,一般只有 2G,Access 的優勢在於可以在前臺便捷地進行界面開發。而 SQL Server 是大型資料庫,用於後臺的存儲和查詢,不具備界面開發的功能。從這裡我們也能看出,即使 SQL 語言是通用的,但是為了滿足不同用戶的使用場景,會存在多個 DBMS。比如 Oracle 更適合大型跨國企業的使用,因為他們對費用不敏感,但是對性能要求以及安全性有更高的要求,而 MySQL 更受到許多互聯網公司,尤其是早期創業公司的青睞。

推薦閱讀:

相關文章