成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

 

[[391146]]

 

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

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

什么是IDS?

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

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

磁盤存儲器

 

[[391147]]

 

圖:工人正在搬動一臺RAMAC305

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

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

高水平編程

與此同時,在采用曲線上,計算機科學(xué)開始從創(chuàng)新者向早期采用者轉(zhuǎn)變。像Assembly這樣的低級編程語言在早期學(xué)術(shù)領(lǐng)域內(nèi)很流行,但普通程序員會轉(zhuǎn)而使用更高級的編程語言,如COBOL,因為其更易使用。

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

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

1969年,數(shù)據(jù)系統(tǒng)語言委員會(CODASYL)發(fā)布了一份報告,提出了一個數(shù)據(jù)庫管理的標(biāo)準(zhǔn)。巴赫曼是該委員會的一員,且該報告大量引用了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ò)模型允許子記錄有多個父記錄,從而創(chuàng)建一個圖形結(jié)構(gòu)。通過允許多個父記錄,網(wǎng)絡(luò)模型能對多對一和多對多的關(guān)系進(jìn)行建模。

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

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

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

關(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)系模型(這篇論文也讓他和巴赫曼一樣,成為了圖靈獎得主)。

科德表明,數(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ù),或在單個命令中讀取單個行(多虧查詢優(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ù)庫的高存儲成本。規(guī)范化是一個分解表以消除冗余的過程,從而減少數(shù)據(jù)占用的磁盤空間。

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

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

 

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

 

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

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

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

  • 易用性

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

  • SQL時代的崛起

 

統(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項目的一部分。

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

  • 數(shù)據(jù)定義語言(DDL):用于定義和修改模式和關(guān)系的命令。
  • 數(shù)據(jù)操作語言(DML):用于從數(shù)據(jù)庫中查詢、插入和刪除信息的命令。
  • 事務(wù)控制:指定事務(wù)時間的命令。
  • 完整性:在數(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)查

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

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

  • 建立在基本原則之上

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

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

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

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

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

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

  • 傾聽和適應(yīng)

查詢語言不是永恒的單一語言,而是一組與時俱進(jìn)的適應(yīng)性標(biāo)準(zhǔn)。SQL標(biāo)準(zhǔn)一直在隨時間進(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)化序列和自動生成值的列(包括標(biāo)識列)。

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

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

  • API的采用

SQL成功的最后一個秘訣,是應(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)代計算的黎明,在兩位圖靈獎得主的努力下煥發(fā)生機。

 

 

責(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

人工智能

2022-07-15 13:43:40

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

2021-02-14 13:38:17

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

2022-01-10 23:39:18

Java測試開發(fā)

2022-11-07 11:22:33

2023-05-23 16:08:19

2024-01-08 13:28:00

5G低延遲

2020-12-30 13:30:38

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

2022-08-24 15:03:21

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

2022-05-11 15:08:16

加密貨幣私鑰安全

2015-10-19 17:57:33

容器OpenStack微服務(wù)

2013-01-08 14:58:48

Firefox OS

2013-09-02 10:05:06

C編程語言

2022-11-15 14:52:09

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

2024-04-22 15:31:02

物聯(lián)網(wǎng)

2010-10-26 13:44:15

點贊
收藏

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

主站蜘蛛池模板: 日韩欧美手机在线 | av日韩在线播放 | 欧美激情国产日韩精品一区18 | 亚洲精品成人av久久 | 日韩精品一区二区三区中文字幕 | 中文字幕第一页在线 | 日韩精品一区二区三区在线播放 | 欧美性受xxxx白人性爽 | 99精品欧美一区二区蜜桃免费 | 亚洲欧美日韩在线不卡 | 91.色 | av超碰 | 午夜av免费| 日韩av三区| 国产精品免费一区二区三区四区 | 亚洲乱码国产乱码精品精的特点 | 黄篇网址 | 337p日本欧洲亚洲大胆 | 国产人免费人成免费视频 | 国产极品91 | 久久综合99 | 精品一区二区在线观看 | 久久久精品视频免费看 | 日本成人午夜影院 | 欧美精品第一页 | 欧美精品电影一区 | 欧美福利 | 欧洲亚洲视频 | 日本精品视频 | 国产午夜精品理论片a大结局 | 欧美一级精品片在线看 | 国产免费黄网 | 久久亚洲一区 | 亚洲欧美综合精品久久成人 | 国产精品久久久久久久久久久久 | 国产精品久久久久久久久久免费看 | 国产精品亚洲第一 | 99久久国产综合精品麻豆 | 久久精品国产99国产精品 | 在线欧美视频 | 成人小视频在线观看 |