自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

統(tǒng)治50年:為什么SQL在如今仍然很重要?

數(shù)據(jù)庫
SQL是如今最普遍使用的編程語言之一,我們不該忘記它悠久的歷史。它的旅程始于現(xiàn)代計(jì)算的黎明,在兩位圖靈獎(jiǎng)得主的努力下煥發(fā)生機(jī)。

本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)

1971年3月,英特爾公司推出了世界上第一個(gè)通用微處理器,即英特爾4004,它有2300個(gè)晶體管,售價(jià)60美元。將時(shí)間快進(jìn)50年左右,最新的蘋果手機(jī)有將近120億個(gè)晶體管(可惜比60美元更貴一些)。

直至90年代,許多我們目前使用的編程語言才被引入(Java是1996年引入的)。然而,有一種編程語言50年前就被引入,但熱度仍然不減當(dāng)年,那就是SQL。

早期數(shù)據(jù)庫管理史——IDS和CODASYL

 

[[391146]]

 

1962年,查爾斯·W·巴赫曼(Charles W.Bachman)(與硅谷的埃里希·巴赫曼[ErlichBachman]非親)是通用電氣公司一個(gè)小團(tuán)隊(duì)的成員。一年后,巴赫曼的團(tuán)隊(duì)推出了集成數(shù)據(jù)儲(chǔ)存系統(tǒng)(IDS),該系統(tǒng)后來被公認(rèn)為首個(gè)數(shù)據(jù)庫管理系統(tǒng)。

10年后,巴赫曼獲得了眾人向往不已的圖靈獎(jiǎng),也稱為計(jì)算機(jī)科學(xué)領(lǐng)域的諾貝爾獎(jiǎng),以此表彰他對IDS計(jì)算的貢獻(xiàn)。

什么是IDS?

20世紀(jì)60年代初,計(jì)算機(jī)科學(xué)才剛剛開始成為一個(gè)學(xué)術(shù)領(lǐng)域。在這樣的大背景下,美國信息交換標(biāo)準(zhǔn)代碼(ASCII)直到1963年才被引入。要想理解IDS,我們得先了解促進(jìn)其發(fā)展的兩個(gè)主要?jiǎng)恿Γ?/p>

  • 磁盤存儲(chǔ)器的引入
  • 向高水平編程的轉(zhuǎn)變

磁盤存儲(chǔ)器

 

[[391147]]

 

圖:工人正在搬動(dòng)一臺(tái)RAMAC305

1956年,IBM推出了第一個(gè)商用硬盤驅(qū)動(dòng)器——RAMAC 305。磁盤驅(qū)動(dòng)器的引入,使程序員能直接跳轉(zhuǎn)到磁盤的某個(gè)位置來檢索和更新數(shù)據(jù)。相比它的前身磁帶驅(qū)動(dòng)器,這是一個(gè)巨大的進(jìn)步,后者需要在磁帶中順序移動(dòng)來檢索一個(gè)特定片段的數(shù)據(jù)。

但目前開發(fā)者必須找出磁盤上存儲(chǔ)記錄的位置。由于早期操作系統(tǒng)中的文件管理系統(tǒng)具有局限性,這是一項(xiàng)只有經(jīng)驗(yàn)豐富的程序員才能完成的高級任務(wù)。開發(fā)者需要一個(gè)解決方案,以簡化磁盤驅(qū)動(dòng)器的運(yùn)作。

高水平編程

與此同時(shí),在采用曲線上,計(jì)算機(jī)科學(xué)開始從創(chuàng)新者向早期采用者轉(zhuǎn)變。像Assembly這樣的低級編程語言在早期學(xué)術(shù)領(lǐng)域內(nèi)很流行,但普通程序員會(huì)轉(zhuǎn)而使用更高級的編程語言,如COBOL,因?yàn)槠涓资褂谩?/p>

什么是IDS?IDS解決了磁盤存儲(chǔ)和高級編程問題,允許開發(fā)者使用COBOL之類的高級編程語言,以此來構(gòu)建應(yīng)用程序,從磁盤存儲(chǔ)中輸入及檢索數(shù)據(jù)。由于這個(gè)功能,IDS成為了第一個(gè)數(shù)據(jù)庫管理系統(tǒng)。

CODASYL——數(shù)據(jù)庫管理的新標(biāo)準(zhǔn)

1969年,數(shù)據(jù)系統(tǒng)語言委員會(huì)(CODASYL)發(fā)布了一份報(bào)告,提出了一個(gè)數(shù)據(jù)庫管理的標(biāo)準(zhǔn)。巴赫曼是該委員會(huì)的一員,且該報(bào)告大量引用了IDS。

CODASYL數(shù)據(jù)模型引入了許多如今數(shù)據(jù)庫管理系統(tǒng)的核心特性:

  • 模式數(shù)據(jù)定義語言(DDL)
  • 數(shù)據(jù)操作語言(DML)

最重要的是,IDS和CODASYL引入了一種新的數(shù)據(jù)建模方法,這種方法影響了SQL的最終開發(fā),即網(wǎng)絡(luò)數(shù)據(jù)模型。

網(wǎng)絡(luò)數(shù)據(jù)模型——比如今的關(guān)系模型更勝一籌?

 

統(tǒng)治50年:為什么SQL在如今仍然很重要?

 

圖:網(wǎng)絡(luò)模型范例

數(shù)據(jù)模型是用于描述(模擬)世界(數(shù)據(jù))的標(biāo)準(zhǔn)方法。

從前的分層數(shù)據(jù)模型使用樹狀結(jié)構(gòu)來描述數(shù)據(jù),但其僅限于一對多的關(guān)系。新的網(wǎng)絡(luò)模型允許子記錄有多個(gè)父記錄,從而創(chuàng)建一個(gè)圖形結(jié)構(gòu)。通過允許多個(gè)父記錄,網(wǎng)絡(luò)模型能對多對一和多對多的關(guān)系進(jìn)行建模。

在網(wǎng)絡(luò)模型中,表之間的關(guān)系存儲(chǔ)于集合中。每個(gè)集合都有一個(gè)所有者(即教師)和一個(gè)或多個(gè)成員(即班級和學(xué)生)。

網(wǎng)絡(luò)模型的一個(gè)關(guān)鍵優(yōu)勢是,集合中的相關(guān)記錄是通過指針直接連接的。集合是通過next,prior,以及owner指針實(shí)現(xiàn)的,能像鏈表一樣方便遍歷。

網(wǎng)絡(luò)數(shù)據(jù)模型的底層特性提供了性能上的益處,但這是有代價(jià)的。網(wǎng)絡(luò)數(shù)據(jù)模型增加了存儲(chǔ)成本,因?yàn)槊織l記錄都必須存儲(chǔ)額外指針,這些指針指向先前的記錄和父記錄。

關(guān)系模型的來臨

 

統(tǒng)治50年:為什么SQL在如今仍然很重要?

 

圖:關(guān)系模型的范例

1970年,在IDS之后的8年, 埃德加· F· 科德(Edgar F. Codd)在他的開創(chuàng)性論文《大型共享數(shù)據(jù)庫的數(shù)據(jù)關(guān)系模型》中引入了關(guān)系模型(這篇論文也讓他和巴赫曼一樣,成為了圖靈獎(jiǎng)得主)。

科德表明,數(shù)據(jù)庫里所有的數(shù)據(jù)都能用元組(SQL中的行)表示,這些元組被分組為關(guān)系(SQL中的表)。為了描述數(shù)據(jù)庫查詢,他發(fā)明了一階謂語邏輯的形式,叫元組關(guān)系演算。

元組關(guān)系演算引入了一種用于查詢數(shù)據(jù)的聲明式語言。聲明式編程語言使程序員可以在不描述“如何做”的情況下,直接說出他們“想做什么”。

這種新的聲明式語言對開發(fā)者來說更容易使用。關(guān)系模型公開展示了所有數(shù)據(jù)。開發(fā)者能從表中檢索所有數(shù)據(jù),或在單個(gè)命令中讀取單個(gè)行(多虧查詢優(yōu)化器)。跟著指針迷宮尋找數(shù)據(jù)的日子已經(jīng)一去不復(fù)返了。

關(guān)系數(shù)據(jù)模型vs.網(wǎng)絡(luò)數(shù)據(jù)模型

通過規(guī)范數(shù)據(jù),關(guān)系數(shù)據(jù)庫能降低網(wǎng)絡(luò)數(shù)據(jù)庫的高存儲(chǔ)成本。規(guī)范化是一個(gè)分解表以消除冗余的過程,從而減少數(shù)據(jù)占用的磁盤空間。

然而,關(guān)系數(shù)據(jù)庫增加了CPU成本。為了運(yùn)行規(guī)范化數(shù)據(jù),關(guān)系數(shù)據(jù)庫必須將表加載到內(nèi)存中,并使用計(jì)算能力將表“連接”在一起。讓我們通過一個(gè)關(guān)系模型來完成為某個(gè)特定教師找到所有班級和學(xué)生這一過程。

數(shù)據(jù)庫系統(tǒng)首先會(huì)執(zhí)行一個(gè)操作來檢索所有相關(guān)的班級。接著,它的第二步操作就是檢索學(xué)生數(shù)據(jù)。所有的數(shù)據(jù)都會(huì)被存儲(chǔ)到內(nèi)存中,在返還結(jié)果前,它會(huì)進(jìn)行第三步操作來合并數(shù)據(jù)。

 

統(tǒng)治50年:為什么SQL在如今仍然很重要?

 

關(guān)系模型和網(wǎng)絡(luò)模型性能對比圖

在使用真實(shí)數(shù)據(jù)的性能案例研究中,雷瑪數(shù)據(jù)管理公司(Raima)發(fā)現(xiàn),網(wǎng)絡(luò)數(shù)據(jù)庫模型的插入性能優(yōu)于實(shí)際數(shù)據(jù)23倍,且查詢數(shù)據(jù)的速度比實(shí)際數(shù)據(jù)快123倍。

所以,為什么關(guān)系數(shù)據(jù)庫會(huì)成為領(lǐng)先的數(shù)據(jù)庫解決方案呢?

  • 易用性

關(guān)系模型能更加靈活地應(yīng)對變化,而且它的聲明句法簡化了程序員的工作。摩爾定律在其背后發(fā)揮著神奇的作用。計(jì)算成本持續(xù)降低,最終,關(guān)系模型中增加的計(jì)算成本與生產(chǎn)力提高所帶來的收益相抵消。時(shí)間再快進(jìn)50年,如今,數(shù)據(jù)中心最昂貴的資源就是CPU。

  • SQL時(shí)代的崛起

 

統(tǒng)治50年:為什么SQL在如今仍然很重要?

 

在科德的文章發(fā)表4年后,唐納德·張伯倫(Donald Chamberlin)和雷蒙德·博伊斯(Raymond Boyce)發(fā)表了《SEQUEL:結(jié)構(gòu)化英語查詢語言》。

他們將SEQUEL描述為“一組在一階謂語演算冪上的…關(guān)于表格結(jié)構(gòu)的簡單操作”。IBM發(fā)現(xiàn)了這種潛力,并在20世紀(jì)70年代初迅速開發(fā)了第一版SEQUEL,作為其System R項(xiàng)目的一部分。

后來之所以更名為SQL,是因?yàn)榕c英國供應(yīng)商霍克西德利飛機(jī)公司(Hawker Siddeley)存在商標(biāo)糾紛。SQL的下一次飛躍是在近十年后了。1986年,美國國家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)和國際標(biāo)準(zhǔn)化組織(ISO)發(fā)布了第一個(gè)官方的SQL標(biāo)準(zhǔn):SQL-86。該標(biāo)準(zhǔn)將SQL分割成以下幾個(gè)部分:

  • 數(shù)據(jù)定義語言(DDL):用于定義和修改模式和關(guān)系的命令。
  • 數(shù)據(jù)操作語言(DML):用于從數(shù)據(jù)庫中查詢、插入和刪除信息的命令。
  • 事務(wù)控制:指定事務(wù)時(shí)間的命令。
  • 完整性:在數(shù)據(jù)庫信息中設(shè)置約束的命令。
  • 視圖:用于定義視圖的命令。
  • 權(quán)限:指定用戶訪問的命令
  • 嵌入式SQL:指定如何在其他語言中嵌入SQL的命令。

1974年至今,無數(shù)競爭者試圖從占統(tǒng)治地位的查詢語言SQL手中奪取市場份額。這些新的句法通常針對特定的新技術(shù):

 

  1. Lisp -> CLSQL.NET -> LINQRuby on Rails -> ActiveRecord 

35年之后,SQL仍然在數(shù)據(jù)庫中無所不在。它是如何保持其作為查詢語言的統(tǒng)治地位的,我們又能從它的故事中學(xué)到什么?

SQL統(tǒng)治50年的秘訣——我們能從中學(xué)到什么?

 

統(tǒng)治50年:為什么SQL在如今仍然很重要?

 

圖:2017年堆棧溢出開發(fā)者調(diào)查

我們從巴赫曼引入第一個(gè)數(shù)據(jù)庫管理系統(tǒng)IDS講起,討論了從磁盤存儲(chǔ)向高級編程轉(zhuǎn)變,催生了對處理數(shù)據(jù)新方法的需求。接著迎來了CODASYL和標(biāo)準(zhǔn)化數(shù)據(jù)庫管理。IDS和CODASYL引入了新的網(wǎng)絡(luò)數(shù)據(jù)模型。最終,科德放棄了關(guān)系模型。這一切發(fā)展用了超過8年的時(shí)間。

SQL是如何成功在后來的50年間保持流行的?我認(rèn)為有4個(gè)主要原因:

  • 建立在基本原則之上

基本原則是一個(gè)基本命題,不能從其他任何命題或假設(shè)中推導(dǎo)出來。例如,將碳?xì)浠衔锖脱鯕饨Y(jié)合,產(chǎn)生化學(xué)反應(yīng),這仍然是驅(qū)動(dòng)每輛汽車內(nèi)燃機(jī)的原理。

1970年,科德創(chuàng)造了新的數(shù)據(jù)庫基本原則:元組關(guān)系演算。這個(gè)新邏輯的創(chuàng)建產(chǎn)生了關(guān)系模型,之后引出了SQL。元組關(guān)系演算就是化學(xué)反應(yīng),關(guān)系模型就是內(nèi)燃機(jī),而SQL就是汽車。

  • 布什內(nèi)爾定理

僅僅建立在基本原則的基礎(chǔ)上不能保證成功。Assembly是程序員能做出的最接近1和0的程序,但仍然被COBOL(以及后來的C)所取代,其中缺失的成分就是易用性。

無獨(dú)有偶,在從網(wǎng)絡(luò)模型到關(guān)系模型的轉(zhuǎn)變中,網(wǎng)絡(luò)模型性能更好,但如今每家公司都在使用關(guān)系數(shù)據(jù)庫,因?yàn)樗菀?上手)。

Assembly不僅精通難,入門也很難。SQL在二者之間達(dá)到了完美的平衡。通過10個(gè)左右的SQL命令,任何人都能學(xué)會(huì)20%,然后進(jìn)階到80%,但要想成為一名大師,需要經(jīng)過長期的索引、視圖和優(yōu)化過程。

  • 傾聽和適應(yīng)

查詢語言不是永恒的單一語言,而是一組與時(shí)俱進(jìn)的適應(yīng)性標(biāo)準(zhǔn)。SQL標(biāo)準(zhǔn)一直在隨時(shí)間進(jìn)行調(diào)整,并吸收來自用戶的反饋。

從最初的概念以來,我們已經(jīng)看到了10種不同的SQL標(biāo)準(zhǔn),每種都做出了重要的改變。以下是其中的3大更新:

1.SQL:1999:添加了正則表達(dá)式匹配、遞歸查詢(如傳遞閉包)、觸發(fā)器、對過程語句和流控制語句的支持、非標(biāo)量類型(數(shù)組)和一些面向?qū)ο筇匦?如結(jié)構(gòu)化類型)。支持在Java中嵌入SQL(SQL/OLB),反之亦然(SQL/JRT)。

2.SQL:2003:引入了與XML相關(guān)的特性(SQL/XML)、窗口函數(shù)、標(biāo)準(zhǔn)化序列和自動(dòng)生成值的列(包括標(biāo)識列)。

3.SQL:2016:增加行模式匹配、多態(tài)表函數(shù)、JSON。

SQL還展示了創(chuàng)造軌道的能力,且其他產(chǎn)品都建立在該軌道之上。SQL沒有需要強(qiáng)制執(zhí)行的語法,而是為每個(gè)數(shù)據(jù)庫提供一個(gè)標(biāo)準(zhǔn),讓其完成自我實(shí)現(xiàn)(T-SQL, MySQL, PSQL, etc)。

  • API的采用

SQL成功的最后一個(gè)秘訣,是應(yīng)用程序編程接口(API)的興起。API通過抽象底層操作簡化了編程,只公開開發(fā)人員需要的對象或操作。API使SQL得以使用特定句法來持續(xù)適應(yīng)新科技。

2006年,Hadoop引入了分布式文件系統(tǒng)(HDFS),起初SQL句法無法訪問該系統(tǒng)。然而到了2013年,Apache創(chuàng)建了Apache Impala,使開發(fā)者可以使用SQL來查詢HDFS數(shù)據(jù)庫。

SQL是如今最普遍使用的編程語言之一,我們不該忘記它悠久的歷史。它的旅程始于現(xiàn)代計(jì)算的黎明,在兩位圖靈獎(jiǎng)得主的努力下煥發(fā)生機(jī)。

 

 

責(zé)任編輯:華軒 來源: 讀芯術(shù)
相關(guān)推薦

2021-09-23 09:35:00

編程技能開發(fā)

2014-07-16 09:45:36

DOS

2020-08-11 11:51:47

標(biāo)準(zhǔn)物聯(lián)網(wǎng)IOT

2023-02-13 11:06:58

決策智能數(shù)據(jù)分析

2024-04-11 07:00:00

人工智能

2021-02-14 13:38:17

Python開發(fā)函數(shù)

2022-07-15 13:43:40

網(wǎng)絡(luò)安全黑客

2024-01-08 13:28:00

5G低延遲

2023-05-23 16:08:19

2022-01-10 23:39:18

Java測試開發(fā)

2022-11-07 11:22:33

2020-12-30 13:30:38

數(shù)據(jù)中心計(jì)算機(jī)超級計(jì)算機(jī)

2022-05-11 15:08:16

加密貨幣私鑰安全

2022-08-24 15:03:21

數(shù)據(jù)智能數(shù)據(jù)分析

2013-01-08 14:58:48

Firefox OS

2015-10-19 17:57:33

容器OpenStack微服務(wù)

2010-10-26 13:44:15

2022-12-29 10:16:12

觀察性系統(tǒng)監(jiān)視

2022-11-15 14:52:09

虛擬孿生數(shù)字孿生

2024-04-22 15:31:02

物聯(lián)網(wǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號