1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        50年長(zhǎng)盛不衰,SQL為什么如此成功?

        共 5619字,需瀏覽 12分鐘

         ·

        2021-02-27 15:21

         △點(diǎn)擊上方“Python貓”關(guān)注 ,回復(fù)“2”加入交流群

        作者 | Felix Schildorfer
        譯者 | 平川
        關(guān)系數(shù)據(jù)模型于 1970 年推出,并已占據(jù)主導(dǎo)地位 50 年。它為什么如此成功?這要?dú)w功第一性原理和布什內(nèi)爾定律。

        1971 年 3 月,英特爾推出世界上第一款通用微處理器——英特爾 4004。它有約 2300 個(gè)晶體管,售價(jià) 60 美元。

        https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-intel-4004-microprocessor

        時(shí)間快進(jìn)到 50 年后,最新的 iPhone 有將近 120 億個(gè)晶體管(但價(jià)格僅為 60 美元多一點(diǎn))。

        我們今天使用的許多編程語(yǔ)言直到 90 年代才推出(Java 是在 1996 年推出的)。不過(guò),有一種編程語(yǔ)言現(xiàn)在仍然像近 50 年前推出時(shí)一樣流行:SQL。本文將討論關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)生的背景、SQL 為什么越來(lái)越流行,以及我們可以從它的成功中學(xué)到什么。

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


        1962 年,查爾斯·w·巴赫曼(與埃利?!ぐ秃章鼪](méi)有關(guān)系)是通用電氣一個(gè)小團(tuán)隊(duì)的一員。一年后,巴赫曼團(tuán)隊(duì)推出了后來(lái)被公認(rèn)為第一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)的集成數(shù)據(jù)存儲(chǔ)系統(tǒng)(IDS)。

        10 年后,巴赫曼獲得圖靈獎(jiǎng)(通常被稱(chēng)為計(jì)算機(jī)科學(xué)領(lǐng)域的諾貝爾獎(jiǎng)),以表彰他對(duì) IDS 計(jì)算的貢獻(xiàn)。

         IDS 是什么?

        在 20 世紀(jì) 60 年代早期,計(jì)算機(jī)科學(xué)剛開(kāi)始成為一個(gè)學(xué)術(shù)領(lǐng)域。ASCII 直到 1963 年才推出。

        要理解 IDS,我們必須首先理解促成其發(fā)展的兩大驅(qū)動(dòng)力:

        • 磁盤(pán)存儲(chǔ)的推出

        • 向高級(jí)編程語(yǔ)言的遷移

        磁盤(pán)存儲(chǔ)


        移動(dòng)一臺(tái) RAMAC 305

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

        但是現(xiàn)在,開(kāi)發(fā)人員必須找出記錄在磁盤(pán)上存儲(chǔ)的位置。由于早期操作系統(tǒng)中文件管理系統(tǒng)的局限性,這是一項(xiàng)只有有經(jīng)驗(yàn)的程序員才能完成的高級(jí)任務(wù)。開(kāi)發(fā)人員需要一種解決方案來(lái)簡(jiǎn)化磁盤(pán)驅(qū)動(dòng)器的使用。

        https://medium.com/@princeabhishek410/understanding-file-management-system-in-operating-system-4c7fbfc306f2

        高級(jí)編程

        與此同時(shí),在采用曲線上,計(jì)算機(jī)科學(xué)開(kāi)始從創(chuàng)新者轉(zhuǎn)變?yōu)樵缙诓捎谜?。像匯編這樣的低級(jí)編程語(yǔ)言早期在學(xué)術(shù)界很流行,但是出于易用性考慮,普通程序員開(kāi)始轉(zhuǎn)向高級(jí)編程語(yǔ)言,比如 COBOL。

        https://en.wikipedia.org/wiki/Diffusion_of_innovations

        那么什么是 IDS 呢?IDS 解決了磁盤(pán)存儲(chǔ)和高級(jí)編程問(wèn)題。IDS 允許開(kāi)發(fā)人員使用高級(jí)編程語(yǔ)言(如 COBOL)來(lái)構(gòu)建從磁盤(pán)存儲(chǔ)輸入和檢索數(shù)據(jù)的應(yīng)用程序。由于這個(gè)功能,IDS 獲得了第一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)的殊榮。

         CODASYL:一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)的新標(biāo)準(zhǔn)

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

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

        • 模式

        • 數(shù)據(jù)定義語(yǔ)言(DDL)

        • 數(shù)據(jù)操作語(yǔ)言(DML)

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

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


        網(wǎng)絡(luò)模型示例

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

        前面的層次數(shù)據(jù)模型使用樹(shù)型結(jié)構(gòu)來(lái)描述數(shù)據(jù),但是這些樹(shù)型結(jié)構(gòu)僅限于一對(duì)多的關(guān)系。新的網(wǎng)絡(luò)模型允許記錄有多條父記錄,從而創(chuàng)建一個(gè)圖結(jié)構(gòu)。通過(guò)支持多個(gè)父節(jié)點(diǎn),網(wǎng)絡(luò)模型能夠?qū)Χ鄬?duì)一和多對(duì)多關(guān)系進(jìn)行建模。

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

        網(wǎng)絡(luò)模型的其中一個(gè)主要好處是,集合中的相關(guān)記錄是通過(guò)指針直接連接的。集合是使用 next、prior 和 owner 指針實(shí)現(xiàn)的,這樣就可以像鏈表一樣輕松遍歷。

        網(wǎng)絡(luò)數(shù)據(jù)模型的低級(jí)特性提供了性能優(yōu)勢(shì),但也付出了代價(jià)。網(wǎng)絡(luò)數(shù)據(jù)模型增加了存儲(chǔ)成本,因?yàn)槊總€(gè)記錄都必須額外存儲(chǔ)指向前一條記錄和父記錄的指針。

        3關(guān)系模型的到來(lái)


        關(guān)系模型示例

        1970 年,在 IDS 誕生 8 年后,Edgar F. Codd 在他的開(kāi)創(chuàng)性論文《A relational model of Data for Large Shared Data Banks》中引入關(guān)系模型(這也為他贏得了圖靈獎(jiǎng))。

        https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf

        Codd 指出,數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)都可以用元組(SQL 中的行)表示,這些元組被分組成關(guān)系(SQL 中的表)。為描述數(shù)據(jù)庫(kù)查詢(xún),他發(fā)明了一種一階謂詞邏輯的形式,稱(chēng)為元組關(guān)系演算。

        元組關(guān)系演算引入了一種聲明性語(yǔ)言用于查詢(xún)數(shù)據(jù)。使用聲明性編程語(yǔ)言,程序員只需說(shuō)明他們想做什么,而不必描述如何做。

        對(duì)開(kāi)發(fā)人員來(lái)說(shuō),這種新的聲明性語(yǔ)言更容易使用。關(guān)系模型公開(kāi)了所有數(shù)據(jù)。開(kāi)發(fā)人員可以用一條命令,從一個(gè)表中檢索所有數(shù)據(jù)或者讀取一行數(shù)據(jù)。

        在指針迷宮中查找數(shù)據(jù)的日子已經(jīng)一去不復(fù)返了。

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

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

        然而,關(guān)系型數(shù)據(jù)庫(kù)增加了 CPU 成本。為了處理規(guī)范化數(shù)據(jù),關(guān)系型數(shù)據(jù)庫(kù)必須將表加載到內(nèi)存中,并使用計(jì)算能力將表“連接”在一起。讓我們通過(guò)一個(gè)例子來(lái)看下這個(gè)過(guò)程:在一個(gè)關(guān)系模型中,給定老師,查找所有的班級(jí)和學(xué)生。

        首先,數(shù)據(jù)庫(kù)系統(tǒng)執(zhí)行一個(gè)操作來(lái)檢索所有相關(guān)的班級(jí)。然后,它將執(zhí)行第二個(gè)操作來(lái)檢索學(xué)生數(shù)據(jù)。所有這些數(shù)據(jù)都將存儲(chǔ)在內(nèi)存中,在返回結(jié)果前,它將運(yùn)行第三個(gè)操作來(lái)合并數(shù)據(jù)。

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

        在一個(gè)使用真實(shí)數(shù)據(jù)的性能案例研究中,Raima 發(fā)現(xiàn),網(wǎng)絡(luò)數(shù)據(jù)庫(kù)模型的插入性能好 23 倍,查詢(xún)性能快 123 倍。

        https://raima.com/network-model-vs-relational-model/

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

        易用性

        關(guān)系模型更容易修改,它的聲明性語(yǔ)法簡(jiǎn)化了程序員的工作。

        摩爾定律在背后發(fā)揮了神奇作用。計(jì)算成本持續(xù)下降,最終,生產(chǎn)力的提高抵消了關(guān)系模型所增加的計(jì)算成本。

        快進(jìn) 50 年,現(xiàn)在,數(shù)據(jù)中心中最昂貴的資源是 CPU。

        5SQL 崛起


        最后,我們迎來(lái)了大家都喜歡的 SQL。

        在 Codd 的論文發(fā)表 4 年后,Donald Chamberlin 和 Raymond Boyce 發(fā)表了《SEQUEL: A Structured English Query Language》。

        https://dl.acm.org/doi/10.1145/800296.811515

        他們將 SEQUEL 描述為“一組關(guān)于表格結(jié)構(gòu)的簡(jiǎn)單操作,[…] 和一階謂詞演算同樣強(qiáng)大。”IBM 看到其潛力,并在 20 世紀(jì) 70 年代早期迅速開(kāi)發(fā)出 SEQUEL 的第一個(gè)版本,作為其 System R 項(xiàng)目的一部分。

        由于與英國(guó) Hawker Siddeley 飛機(jī)公司的商標(biāo)問(wèn)題,其名稱(chēng)后來(lái)改為 SQL。

        https://en.wikipedia.org/wiki/SQL

        SQL 的下一個(gè)大發(fā)展是在近十年后。1986 年,美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)和國(guó)際標(biāo)準(zhǔn)化組織(ISO)發(fā)布第一個(gè)官方 SQL 標(biāo)準(zhǔn):SQL-86。該標(biāo)準(zhǔn)將 SQL 分為以下幾個(gè)部分:

        • 數(shù)據(jù)定義語(yǔ)言(DDL):此類(lèi)命令用于定義和修改模式及關(guān)系;

        • 數(shù)據(jù)操作語(yǔ)言(DML):此類(lèi)命令用于查詢(xún)、插入和刪除數(shù)據(jù)庫(kù)信息;

        • 事務(wù)控制:此類(lèi)命令用于指定事務(wù)的時(shí)間;

        • 完整性:此類(lèi)命令用于對(duì)數(shù)據(jù)庫(kù)信息設(shè)置約束;

        • 視圖:此類(lèi)命令用于定義視圖;

        • 授權(quán):此類(lèi)命令用于指定可以訪問(wèn)的用戶(hù);

        • 嵌入式 SQL:此類(lèi)命令用于具體說(shuō)明如何將 SQL 嵌入其他語(yǔ)言。

        6SQL 的競(jìng)爭(zhēng)者

        從 1974 年到今天,有許多競(jìng)爭(zhēng)者試圖從 SQL 統(tǒng)治的查詢(xún)語(yǔ)言市場(chǎng)中搶占市場(chǎng)份額。通常,這些新語(yǔ)法是針對(duì)特定的新技術(shù):

        • Lisp ->CLSQL

        • .NET ->LINQ

        • Ruby on Rails ->ActiveRecord

        35 年過(guò)去了,在數(shù)據(jù)庫(kù)中,SQL 仍然無(wú)處不在。SQL 作為一種查詢(xún)語(yǔ)言是如何保持統(tǒng)治地位的?我們可以從它的故事中學(xué)到什么?

        7SQL 統(tǒng)治市場(chǎng) 50 年的秘密


        Stack Overflow 開(kāi)發(fā)者調(diào)查,2017

        在文章開(kāi)頭,我們首先介紹了巴赫曼推出的第一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng) IDS。我們討論了為什么磁盤(pán)存儲(chǔ)和高級(jí)編程需要一種處理數(shù)據(jù)的新方法。然后,CODASYL 來(lái)了,規(guī)范了數(shù)據(jù)庫(kù)管理。IDS 和 CODASYL 引入了新的網(wǎng)絡(luò)數(shù)據(jù)模型,而最終,Codd 投下了關(guān)系模型。

        這個(gè)過(guò)程持續(xù)了 8 年。

        SQL 是如何在接下來(lái)的 50 年里堅(jiān)持下去的呢?我認(rèn)為主要有四個(gè)原因:

        • 基于第一性原則構(gòu)建

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

        • 傾聽(tīng)和調(diào)整

        • 采用 API

         基于第一性原則構(gòu)建

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

        1970 年,Codd 為數(shù)據(jù)庫(kù)創(chuàng)建了一個(gè)新的第一性原則:元組關(guān)系演算。這個(gè)新創(chuàng)建的邏輯引出了關(guān)系模型,然后引出 SQL。元組關(guān)系演算是化學(xué)反應(yīng),關(guān)系模型是內(nèi)燃機(jī),SQL 是汽車(chē)。

         布什內(nèi)爾定律

        僅僅建立在第一性原則上并不能保證其成功。匯編是程序員所能做到的最接近輸入 1 和 0 的程序,但它仍然被 COBOL(后來(lái)是 C)所取代。

        它缺少的一個(gè)關(guān)鍵要素是可用性。

        從網(wǎng)絡(luò)模型到關(guān)系模型的轉(zhuǎn)換,我們看到同樣的情況。網(wǎng)絡(luò)模型性能更好,但是現(xiàn)在每個(gè)公司都在使用關(guān)系型數(shù)據(jù)庫(kù),因?yàn)樗苋菀祝ㄈ胧郑?/p>

        最好的游戲易于學(xué)習(xí)而難于精通?!狝tari 創(chuàng)始人諾蘭·布什內(nèi)爾

        諾蘭·布什內(nèi)爾知道如何讓人們使用新產(chǎn)品。但遺憾的是,匯編既難學(xué)又難精通。

        SQL 找到了完美的平衡。10 個(gè)左右的 SQL 命令,任何人都可以學(xué)會(huì)其中的 20%,并完成 80% 的工作。但是要想精通,需要經(jīng)過(guò)長(zhǎng)期的積累,具備豐富的索引、視圖和優(yōu)化經(jīng)驗(yàn)。

         傾聽(tīng)和調(diào)整

        查詢(xún)語(yǔ)言不是一塊永恒的巨石,而是一組隨時(shí)間變化的自適應(yīng)標(biāo)準(zhǔn)。隨著時(shí)間的推移,SQL 標(biāo)準(zhǔn)一直在不斷調(diào)整,并加入了來(lái)自用戶(hù)的反饋。

        從概念最初提出開(kāi)始,我們看到了 10 種不同的 SQL 標(biāo)準(zhǔn),它們都有重要的更新。以下是三項(xiàng)比較大的:

        • SQL:1999:添加了正則表達(dá)式匹配、遞歸查詢(xún)(例如傳遞閉包)、觸發(fā)器、對(duì)過(guò)程語(yǔ)句和流控制語(yǔ)句的支持、非標(biāo)量類(lèi)型(數(shù)組)和一些面向?qū)ο蟮奶匦裕ɡ缃Y(jié)構(gòu)化類(lèi)型)。支持在 Java 中嵌入 SQL(SQL/OLB),反之亦然(SQL/JRT)。

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

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

        SQL 語(yǔ)法不是強(qiáng)制性的,它只是提供了一個(gè)數(shù)據(jù)庫(kù)標(biāo)準(zhǔn),每種數(shù)據(jù)庫(kù)都可以創(chuàng)建它們自己的實(shí)現(xiàn)(T-SQL、MySQL、PSQL 等)。

         采用 API

        SQL 成功的最后一個(gè)秘密是應(yīng)用程序編程接口(API)的興起。API 通過(guò)抽象底層實(shí)現(xiàn),只公開(kāi)開(kāi)發(fā)人員需要的對(duì)象或操作,簡(jiǎn)化了編程。

        API 讓 SQL 可以使用專(zhuān)門(mén)的語(yǔ)法適應(yīng)新技術(shù)的發(fā)展。2006 年,Hadoop 引入分布式文件系統(tǒng)(HDFS),SQL 語(yǔ)法最初是無(wú)法訪問(wèn)該系統(tǒng)的。然后,在 2013 年,Apache 創(chuàng)建了 Apache Impala,它允許開(kāi)發(fā)人員使用 SQL 查詢(xún) HDFS 數(shù)據(jù)庫(kù)。

        8小結(jié)

        SQL 是當(dāng)今最普遍的編程語(yǔ)言之一,但我們經(jīng)常忘記它的歷史有多久了。它的旅程開(kāi)始于現(xiàn)代計(jì)算機(jī)的黎明,由 2 位圖靈獎(jiǎng)獲得者賦予了它生命。對(duì)于為什么 SQL 能夠保持其主導(dǎo)地位,我已經(jīng)分享了我的看法:第一性原則、布什內(nèi)爾定律、調(diào)整和 API。您認(rèn)為促成 SQL 成功的主要因素是什么?

        還有一項(xiàng) 50 年來(lái)都沒(méi)有改變的技術(shù)。

        SQL 編輯器

        隨著越來(lái)越多的人學(xué)習(xí) SQL,數(shù)據(jù)庫(kù)使用越來(lái)越需要協(xié)作。如今,開(kāi)發(fā)人員可能會(huì)與營(yíng)銷(xiāo)團(tuán)隊(duì)的成員一起分析用戶(hù)數(shù)據(jù),或者與數(shù)據(jù)科學(xué)家一起調(diào)試查詢(xún)。

        原文鏈接:https://blog.arctype.com/sql-50-years

        近兩年里,我原創(chuàng)和翻譯了130+技術(shù)文章,主要關(guān)注Python進(jìn)階、小技巧、編程設(shè)計(jì)、PEP翻譯、Python哲學(xué)等話題?,F(xiàn)已集結(jié)出了一本電子書(shū)《優(yōu)雅的Python》,請(qǐng)回復(fù)數(shù)字『1』,獲取下載地址。

        近期熱門(mén)文章推薦:

        Python 有可能刪除 GIL 嗎?
        計(jì)算機(jī)為什么要從 0 開(kāi)始計(jì)數(shù)?
        這有 73 個(gè)例子,徹底掌握 f-string 用法!
        為什么 Python 的 f-string 可以連接字符串與數(shù)字?

        分享在看是對(duì)我最大的支持!

        瀏覽 71
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            人人干人人爱 | 国产成人无码视频在线观看 | 911在线无码精品秘 入口楼风 | 男男互摸gay网站久久久 男女一级黄色 | 妇检台上操美女逼 | 黄色视屏免费观看 | 日本午夜在线播放 | 两根硕大的挺进他身体里的动态图 | 双乳奶水饱满少妇呻吟一好爽毛片_区 | 伊人福利网 |