1971 年 的 3 月,英特爾推出了世界上第一個通用微處理器,即 [Intel 4004],成本 60 美元的它,擁有約 2,300 個電晶體。
如今,最新款的 iPhone 擁有近 120 億個電晶體,以及略高於 60 美元的成本。
50 年帶來的改變是巨大的,但是有的東西卻一直不變。
20 世紀 90 年代有一大批程式語言開始引入,其中 1996 年引入了 Java,歲月無聲,這麼多年過去了,SQL 在眾多程式語言中仍舊擁有著屬於自己的一席之地,甚至和 50 年前一樣流行。
這篇文章將從為何引入關係資料庫以及 SQL 為什麼越來越流行進行分享,同時思考我們能從中學到什麼。
資料庫管理的早期歷史——IDS 和 CODASYL1962年,Charles W. Bachman 在 General Electric 的一個小團隊中工作。
一年後,Charles W. Bachman 的團隊推出了人們口中說的第一個資料庫管理系統——the Intergrated Data Store(IDS)。
10年後,巴赫曼對 IDS 計算的貢獻獲得了被人們成為計算機界諾貝爾獎的圖靈獎。
什麼是IDS?19 世紀 60 年代初,計算機科學剛開始成為一個學術領域。
也是在這個時期,美國資訊交換標準碼(ASCII)才被引入。
想要了解 IDS,我們需要先了解推動其發展的兩個主要力量:
一,磁碟儲存的推行
移動 RAMAC 305
1956年,IBM 推出了第一個商用硬碟驅動器: RAMAC 305。
以前使用磁帶驅動器的時候,需要依次在磁帶中移動以檢索特定的資料,但磁碟驅動器的引入使程式設計師可以直接跳轉到磁碟上的某個位置來檢索和更新資料,為程式設計師帶來了極大的便利。
只是這樣一來,開發人員必須對於磁碟上的儲存位置非常瞭解,受限於早期作業系統中的檔案管理系統 ,磁碟帶來的便利僅供經驗豐富的程式設計師享受。
於是開發人員需要一個能簡化磁碟驅動器使用的解決方案。
二、程式語言從低階向高階的遷移
同時,計算機科學在採用曲線上,人們開始從創新者轉變為早期的採用者。早期流行像 Assembly 這樣的低階程式語言,但隨著對語言的進一步使用,更多程式設計師出於可用性的考慮,改用像 COBOL 這樣的高階程式語言。
到這個時候,我們或許能猜到 IDS 為何存在了,它解決了磁碟儲存的問題,同時方便了高階程式語言的使用。
IDS 允許開發人員使用高階程式語言(例如COBOL)來構建可從磁碟儲存中輸入和檢索資料的應用程式,因此,IDS 作為第一個資料庫管理系統獲得了殊榮。
CODASYL——資料庫管理的新標準1969年,資料系統語言委員會(CODASYL)釋出了一份報告,報告中提出了資料庫管理標準,巴赫曼是這個委員會的成員,這些標準主要來自於 IDS。
CODASYL 資料模型引入了我們今天使用的資料庫管理系統的許多核心功能,其中包括了:
資料定義語言(DDL)資料操作語言(DML)最重要的是,IDS 和 CODASYL引入了一種新的資料建模方法,該方法影響了 SQL 的最終開發,那就是——網路資料模型。
網路資料模型與關係模型資料模型是描述建模世界資料的標準。
以前的分層資料模型使用樹結構來描述資料,讓關係限制在了一對多的組合中。
新的網路模型允許記錄具有多個父級,從而建立了一個“圖結構”,多個父級存在後,網路模型便能對多對一以及多對多的關係進行建模。
在網路模型中,表之間的關係儲存在“集”中。每組都有一個所有者和一個或多個成員 ,就像一個老師會擁有一位或多位學生一般。
網路模型的主要優點之一就是集合中的相關記錄透過指標直接連線。集合是用 next、prior、owner ponters 實現的,這類似於列表的連結,方便了開發者的查閱。
網路資料模型的 低階性質(low-level nature) 提供了效能優勢,但因為每個記錄都必須儲存指向其先前記錄和父記錄的額外指標,它讓我們付出了高儲存成本。
關係模型的到來一個關係模型的例子
1970年,即 IDS 推出 8 年後,埃德加·科德(Edgar F. Codd)在他的開創性論文“大型共享資料庫的資料關係模型”中介紹了關係模型,這篇論文也為他贏得了圖靈獎。
埃德加·科德(Codd)表明,資料庫中的所有資料都可以用元組( SQL中的行)表示,這些元組被分組為關係 ( SQL中的表)。為了描述資料庫查詢,他發明了一種稱為元組關係演算的一階謂詞邏輯 。
元組關係演算引入了一種用於查詢資料的宣告性語言。在宣告性程式語言中,程式設計師不需要說如何執行,只需要說想做什麼,目的就可達成。
對於開發人員而言,這種新的宣告性語言要容易得多。關係模型將所有資料公開,開發人員可以透過一個命令從一個表中檢索所有資料,或讀取一行(這要感謝查詢最佳化器),從此人們告別了用迷宮般的指標來查詢資料的日子。
關係與網路資料模型規範化是分解表以消除冗餘,從而減少磁碟上資料佔用量的過程。關係資料庫透過規範化資料減少了網路資料庫具有的高儲存成本 。
但是,為了處理規範化的資料,關係資料庫必須將表載入到記憶體中,並利用計算能力將表“聯接”在一起,它又增加了 CPU 成本。
透過介紹如何使用關係模型方便老師查詢所有班級和學生,你將會明白為何有如此高的 CPU 成本了:
當老師開始輸入需要查詢的資料時,資料庫系統將首先檢索所有相關類,然後它再進行第二次操作,檢索學生資料。在這個過程中,所有的資料都將儲存在記憶體中,在返回結果之前,將執行第三次操作把資料合併。
關係模型和網路模型之間的效能比較在使用實際資料的效果案例研究中, Raima 發現網路資料庫模型的插入效能是關係模型的 23 倍,查詢效能更是它的 123 倍。
那麼,為什麼關係資料庫是領先的資料庫解決方案?關係模型修改的時候更靈活,它的宣告性語法簡化了程式設計師的工作。
摩爾定律讓計算機的效能獲得極大的提高,計算成本持續下降,最終關係模型的計算成本被提高的生產率抵消了。
時間線拉到 50 年後的今天,以上綜合種種影響下,資料中心中最價格最貴的配置就是 CPU。
SQL 的興起與統治順著時間往下走,我們遇見了我們所喜愛的 SQL。
埃德加·科德(Codd)發表論文 4 年後,Donald Chamberlin 和 Raymond Boyce 發表了名為“ SEQUEL:一種結構化的英語查詢語言”的論文。
他們將 SEQUEL 描述為“對錶格結構的一組簡單操作,等效於一階謂詞演算”。IBM看到了這種潛力,並在 19 世紀 70 年代初迅速開發了 SEQUEL 的第一個版本,將其作為 System R 的一部分。
後來因為與英國霍克·西德利飛機公司的商標發生衝突,SEQUEL 更名為 SQL。
1986年,美國國家標準協會(ANSI)和國際標準化組織(ISO)釋出了第一個正式的 SQL 標準:SQL-86,這是 SQL 被用了十年後走出的重要一步。該標準將 SQL分為幾個部分:
資料定義語言(DDL): 用於定義和修改架構和關係的命令
交易控制: 用於指定交易時間的命令
完整性: 用於設定資料庫資訊約束的命令
檢視: 用於定義檢視的命令
授權: 用於指定使用者訪問許可權的命令
嵌入式SQL: 指定如何以其他語言嵌入SQL的命令
從 1974 年到今天,許多人研發了語法,試圖與 SQL 爭奪查詢語言的市場份額。這些新語法通常迎合了當時特定的新技術:
[Lisp-] > [CLSQL .NET-]> [LINQ] Ruby on [Rails-]> [ActiveRecord]
35年過去了,SQL 在資料庫中仍無處不在,SQL如何維持其作為查詢語言的統治地位,我們又可以從它的故事中學到什麼?
SQL 50 年統治的秘訣,以及我們可以學到什麼2017年堆疊溢位開發人員調查
八年就發生了以上的種種變化。
在接下來的50年中,SQL如何成功地堅持下去?我認為有四個主要原因:
一、建立在第一性原理上第一性原理是不能從任何其他命題或假設中推論得出的基本命題。例如,將碳氫化合物與氧氣結合以產生化學反應,這是為每輛汽車的內燃機提供動力的最基本原理。
1970年,埃德加·科德(Codd)為資料庫建立了一個新的第一性原理:元組關係演算。這個新邏輯保住了關係模型與 SQL 的產生。在這三者中,元組關係演算是化學反應,關係模型是內燃機,SQL 是汽車。
二、布什內爾定律僅憑第一性原理還不能保證成功,彙編程式與程式設計師可以一鍵輸入的 1 和 0 某種程度上非常接近,但它仍被 COBOL(以及後來的C)取代了,因為它缺少了可用性。
從網路到關係模型的轉變,我們也看到了同樣的故事。網路模型具有更快的效能,但是如今,每個公司都使用關係資料庫,因為它初期使用起來非常簡單。
“最好的遊戲總是容易上手但很難掌握”——諾蘭·布什內爾(雅達利公司創始人)
這句話中,諾蘭·布什內爾(Nolan Bushnell)說出了讓人們使用新產品的秘密。
在難學又難掌握的彙編中,SQL 找到了完美的平衡。藉助約 10 條 SQL 命令,任何人都可以從 20% 的知識中獲得 80% 的學習效率。但是,要做到母版、索引、檢視、最佳化,後續學習則還有很長的路要走。
三、傾聽反饋與適應環境查詢語言不是永恆的整體,而是隨時間變化適應環境的標準組,年復一年中,SQL 標準不斷地調整,吸收使用者的反饋完善著自己。
從最初的構想開始統計,我們已經看到 10 種不同的 SQL 標準,每一個標準都有著很重要的更新。其中有 3 個更新非常大,這裡列了出來:
1、1999 年,增加了正則表示式匹配,遞迴查詢(例如,傳遞閉包),觸發器,對過程和流程控制語句的支援,非標量型別(陣列)和一些面向物件的功能(例如結構化型別)。支援在 Java(SQL / OLB)中嵌入 SQL,反之亦然(SQL / JRT)。
2、2003 年,引入了與 XML 相關的功能(SQL / XML),視窗函式,標準化序列以及具有自動生成的值(包括身份列)的列。
3、2016 年,新增行模式匹配,多型表函式,JSON。
SQL 還創造了其他產品可以使用的 Rails 構架。在 SQL 中沒有強制語法,它只是為每個資料庫提供了方便他們自行組建(T-SQL,MySQL,PSQL等)的標準。
四、採用APISQL 成功的最終秘訣是應用程式程式設計介面(API)的興起。API 的抽象化底層實現、僅公開開發人員需要的物件與操作,大大簡化了程式設計。
Hadoop 在 2006 年引入了分散式檔案系統(HDFS),最初 SQL 語法無法訪問,但 2013 年,Apache 建立了 Apache Impala,自此開發人員可以使用 SQL 查詢 HDFS 資料庫。API 讓 SQL 以其特殊語法適應著新技術。
總結SQL 是當今使用最廣泛的程式語言之一,它始於現代計算的曙光,並由 2 點陣圖靈獎獲得者賦予了它生命。
SQL 能保持其主導地位是因為:建立於第一性原理、布什內爾定律的出現、它的自適應性和 API 被使用。
編譯:袁鈺涵 | 發自:思否編輯部
本文是翻譯,閱讀原文:
https://hackernoon.com/sqls-50-year-reign-heres-why-sql-is-still-relevant-today-917z31qb