<ins id="jxy61"><option id="jxy61"><menu id="jxy61"></menu></option></ins>
          1. 煉數成金 門戶 大數據 數據庫 查看內容

            50年長盛不衰,SQL為什么如此成功?

            2021-3-12 17:02| 發布者: 煉數成金_小數| 查看: 16957| 評論: 0|原作者: 平川 譯|來自: Info Q

            摘要: 1971 年 3 月,英特爾推出世界上第一款通用微處理器——英特爾 4004。它有約 2300 個晶體管,售價 60 美元。時間快進到 50 年后,最新的 iPhone 有將近 120 億個晶體管(但價格僅為 60 美元多一點)。我們今天使用的 ...
            1971 年 3 月,英特爾推出世界上第一款通用微處理器——英特爾 4004。它有約 2300 個晶體管,售價 60 美元。

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

            時間快進到 50 年后,的 iPhone 有將近 120 億個晶體管(但價格僅為 60 美元多一點)。

            我們今天使用的許多編程語言直到 90 年代才推出(Java 是在 1996 年推出的)。不過,有一種編程語言現在仍然像近 50 年前推出時一樣流行:SQL。

            本文將討論關系型數據庫產生的背景、SQL 為什么越來越流行,以及我們可以從它的成功中學到什么。

            01 早期數據庫管理的歷史——IDS和CODASYL

            1962 年,查爾斯·w·巴赫曼(與埃利!ぐ秃章鼪]有關系)是通用電氣一個小團隊的一員。一年后,巴赫曼團隊推出了后來被公認為第一個數據庫管理系統的集成數據存儲系統(IDS)。

            10 年后,巴赫曼獲得圖靈獎(通常被稱為計算機科學領域的諾貝爾獎),以表彰他對 IDS 計算的貢獻。

            IDS 是什么?
            在 20 世紀 60 年代早期,計算機科學剛開始成為一個學術領域。ASCII 直到 1963 年才推出。

            要理解 IDS,我們必須首先理解促成其發展的兩大驅動力:
            磁盤存儲的推出
            向高級編程語言的遷移
            磁盤存儲

            移動一臺 RAMAC 305

            1956 年,IBM 推出第一款商用硬盤驅動器——RAMAC 305。磁盤驅動器的引入使得程序員可以直接跳轉到磁盤上的某個位置進行數據檢索和更新。與其前身磁帶驅動器相比,這是一個巨大的改進,后者需要在磁帶上順序移動來檢索特定的數據片段。

            但是現在,開發人員必須找出記錄在磁盤上存儲的位置。由于早期操作系統中文件管理系統的局限性,這是一項只有有經驗的程序員才能完成的高級任務。開發人員需要一種解決方案來簡化磁盤驅動器的使用。

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

            高級編程
            與此同時,在采用曲線上,計算機科學開始從創新者轉變為早期采用者。像匯編這樣的低級編程語言早期在學術界很流行,但是出于易用性考慮,普通程序員開始轉向高級編程語言,比如 COBOL。

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

            那么什么是 IDS 呢?IDS 解決了磁盤存儲和高級編程問題。IDS 允許開發人員使用高級編程語言(如 COBOL)來構建從磁盤存儲輸入和檢索數據的應用程序。由于這個功能,IDS 獲得了第一個數據庫管理系統的殊榮。

            CODASYL:一個數據庫管理系統的新標準
            1969 年,數據系統語言委員會(CODASYL)發布了一份報告,提出一個數據庫管理標準。巴赫曼是委員會的一員,該報告主要參照了 IDS。

            CODASYL 數據模型引入了許多我們今天使用的數據庫管理系統的核心特性:
            模式
            數據定義語言(DDL)
            數據操作語言(DML)
            最重要的是,IDS 和 CODASYL 引入了一種新的數據建模方法,這種方法影響了 SQL 的最終開發——網絡數據模型。

            02網絡數據模型——比如今的關系模型更好?

            網絡模型示例

            數據模型是一種描述(模型)世界(數據)的標準化方法。

            前面的層次數據模型使用樹型結構來描述數據,但是這些樹型結構僅限于一對多的關系。新的網絡模型允許記錄有多條父記錄,從而創建一個圖結構。

            通過支持多個父節點,網絡模型能夠對多對一和多對多關系進行建模。

            在網絡模型中,表之間的關系存儲在集合中。每個集合都有一個所有者(即教師)和一個或多個成員(即班級和學生)。

            網絡模型的其中一個主要好處是,集合中的相關記錄是通過指針直接連接的。集合是使用 next、prior 和 owner 指針實現的,這樣就可以像鏈表一樣輕松遍歷。

            網絡數據模型的低級特性提供了性能優勢,但也付出了代價。網絡數據模型增加了存儲成本,因為每個記錄都必須額外存儲指向前一條記錄和父記錄的指針。

            03關系模型的到來

            關系模型示例

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

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

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

            元組關系演算引入了一種聲明性語言用于查詢數據。使用聲明性編程語言,程序員只需說明他們想做什么,而不必描述如何做。

            對開發人員來說,這種新的聲明性語言更容易使用。關系模型公開了所有數據。開發人員可以用一條命令,從一個表中檢索所有數據或者讀取一行數據。

            在指針迷宮中查找數據的日子已經一去不復返了。

            04 關系數據模型vs網絡數據模型
            關系型數據庫通過數據規范化降低了網絡型數據庫的高昂存儲成本。規范化是一個分解表以消除冗余的過程,可以減少磁盤占用。

            然而,關系型數據庫增加了 CPU 成本。為了處理規范化數據,關系型數據庫必須將表加載到內存中,并使用計算能力將表“連接”在一起。讓我們通過一個例子來看下這個過程:在一個關系模型中,給定老師,查找所有的班級和學生。

            首先,數據庫系統執行一個操作來檢索所有相關的班級。然后,它將執行第二個操作來檢索學生數據。所有這些數據都將存儲在內存中,在返回結果前,它將運行第三個操作來合并數據。

            關系模型和網絡模型的性能對比

            在一個使用真實數據的性能案例研究中,Raima 發現,網絡數據庫模型的插入性能好 23 倍,查詢性能快 123 倍。

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

            那么為什么關系型數據庫會成為領先的數據庫解決方案?

            易用性
            關系模型更容易修改,它的聲明性語法簡化了程序員的工作。

            摩爾定律在背后發揮了神奇作用。計算成本持續下降,最終,生產力的提高抵消了關系模型所增加的計算成本。

            快進 50 年,現在,數據中心中最昂貴的資源是 CPU。

            05 SQL崛起

            最后,我們迎來了大家都喜歡的 SQL。

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

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

            他們將 SEQUEL 描述為“一組關于表格結構的簡單操作,[…] 和一階謂詞演算同樣強大!盜BM 看到其潛力,并在 20 世紀 70 年代早期迅速開發出 SEQUEL 的第一個版本,作為其 System R 項目的一部分。

            由于與英國 Hawker Siddeley 飛機公司的商標問題,其名稱后來改為 SQL。

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

            SQL 的下一個大發展是在近十年后。1986 年,美國國家標準協會(ANSI)和國際標準化組織(ISO)發布第一個官方 SQL 標準:SQL-86。該標準將 SQL 分為以下幾個部分:
            數據定義語言(DDL):此類命令用于定義和修改模式及關系;
            數據操作語言(DML):此類命令用于查詢、插入和刪除數據庫信息;
            事務控制:此類命令用于指定事務的時間;
            完整性:此類命令用于對數據庫信息設置約束;
            視圖:此類命令用于定義視圖;
            授權:此類命令用于指定可以訪問的用戶;
            嵌入式 SQL:此類命令用于具體說明如何將 SQL 嵌入其他語言。

            06 SQL的競爭者
            從 1974 年到今天,有許多競爭者試圖從 SQL 統治的查詢語言市場中搶占市場份額。通常,這些新語法是針對特定的新技術:
            Lisp ->CLSQL
            .NET ->LINQ
            Ruby on Rails ->ActiveRecord
            35 年過去了,在數據庫中,SQL 仍然無處不在。SQL 作為一種查詢語言是如何保持統治地位的?我們可以從它的故事中學到什么?

            07 SQL統治市場50年的秘密

            Stack Overflow 開發者調查,2017在文章開頭,我們首先介紹了巴赫曼推出的第一個數據庫管理系統 IDS。我們討論了為什么磁盤存儲和高級編程需要一種處理數據的新方法。然后,CODASYL 來了,規范了數據庫管理。IDS 和 CODASYL 引入了新的網絡數據模型,而最終,Codd 投下了關系模型。這個過程持續了 8 年。

            SQL 是如何在接下來的 50 年里堅持下去的呢?我認為主要有四個原因:
            基于第一性原則構建
            布什內爾定律
            傾聽和調整
            采用 API
             
            基于第一性原則構建
            第一性原則是一個基本命題,它不能從任何其他命題或假設中推導出來。例如,將碳氫化合物與氧氣結合,產生化學反應。這仍然是驅動每一輛車的內燃機原理。

            1970 年,Codd 為數據庫創建了一個新的第一性原則:元組關系演算。這個新創建的邏輯引出了關系模型,然后引出 SQL。元組關系演算是化學反應,關系模型是內燃機,SQL 是汽車。
             
            布什內爾定律
            僅僅建立在第一性原則上并不能保證其成功。匯編是程序員所能做到的最接近輸入 1 和 0 的程序,但它仍然被 COBOL(后來是 C)所取代。

            它缺少的一個關鍵要素是可用性。
            從網絡模型到關系模型的轉換,我們看到同樣的情況。網絡模型性能更好,但是現在每個公司都在使用關系型數據庫,因為它很容易(入手)。

            較好的游戲易于學習而難于精通!狝tari 創始人諾蘭·布什內爾

            諾蘭·布什內爾知道如何讓人們使用新產品。但遺憾的是,匯編既難學又難精通。

            SQL 找到了完美的平衡。10 個左右的 SQL 命令,任何人都可以學會其中的 20%,并完成 80% 的工作。但是要想精通,需要經過長期的積累,具備豐富的索引、視圖和優化經驗。
             
            傾聽和調整
            查詢語言不是一塊永恒的巨石,而是一組隨時間變化的自適應標準。隨著時間的推移,SQL 標準一直在不斷調整,并加入了來自用戶的反饋。

            從概念最初提出開始,我們看到了 10 種不同的 SQL 標準,它們都有重要的更新。以下是三項比較大的:
            SQL:1999:添加了正則表達式匹配、遞歸查詢(例如傳遞閉包)、觸發器、對過程語句和流控制語句的支持、非標量類型(數組)和一些面向對象的特性(例如結構化類型)。支持在 Java 中嵌入 SQL(SQL/OLB),反之亦然(SQL/JRT)。

            SQL:2003:引入了與 XML 相關的特性(SQL/XML)、窗口函數、標準化序列和自動生成值的列(包括標識列)。
            SQL:2016:添加行模式匹配、多態表函數、JSON。
            SQL 語法不是強制性的,它只是提供了一個數據庫標準,每種數據庫都可以創建它們自己的實現(T-SQL、MySQL、PSQL 等)。

            采用 API
            SQL 成功的最后一個秘密是應用程序編程接口(API)的興起。API 通過抽象底層實現,只公開開發人員需要的對象或操作,簡化了編程。

            API 讓 SQL 可以使用專門的語法適應新技術的發展。2006 年,Hadoop 引入分布式文件系統(HDFS),SQL 語法最初是無法訪問該系統的。然后,在 2013 年,Apache 創建了 Apache Impala,它允許開發人員使用 SQL 查詢 HDFS 數據庫。

            08 小結
            SQL 是當今最普遍的編程語言之一,但我們經常忘記它的歷史有多久了。它的旅程開始于現代計算機的黎明,由 2 位圖靈獎獲得者賦予了它生命。對于為什么 SQL 能夠保持其主導地位,我已經分享了我的看法:第一性原則、布什內爾定律、調整和 API。您認為促成 SQL 成功的主要因素是什么?請給我留言。

            還有一項 50 年來都沒有改變的技術。

            SQL 編輯器
            隨著越來越多的人學習 SQL,數據庫使用越來越需要協作。如今,開發人員可能會與營銷團隊的成員一起分析用戶數據,或者與數據科學家一起調試查詢。

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

            聲明:文章收集于網絡,版權歸原作者所有,為傳播信息而發,如有侵權,請聯系小編刪除,謝謝!

            歡迎加入本站公開興趣群
            軟件開發技術群
            興趣范圍包括:Java,C/C++,Python,PHP,Ruby,shell等各種語言開發經驗交流,各種框架使用,外包項目機會,學習、培訓、跳槽等交流
            QQ群:26931708

            Hadoop源代碼研究群
            興趣范圍包括:Hadoop源代碼解讀,改進,優化,分布式系統場景定制,與Hadoop有關的各種開源項目,總之就是玩轉Hadoop
            QQ群:288410967 

            鮮花

            握手

            雷人

            路過

            雞蛋

            相關閱讀

            最新評論

            熱門頻道

            • 大數據

            即將開課

             

            GMT+8, 2021-4-9 23:00 , Processed in 0.135584 second(s), 25 queries .

            年轻人手机在线观看