為什么SQL位列前10大編程語言?
SQL到如今已經誕生45年了,如今對SQL進行投票,2019年11月份還是出于前10大編程語言之一。
編程語言排行榜
這對一門已經上了年紀的“老語言”來說是十分了不起的,但你知道sql是怎么誕生的嗎?
關于sql的誕生,我們不得不從計算機的誕生說起。
世界上第一臺通用計算機“ENIAC”于1946年在美國賓夕法尼亞大學誕生,但是很多人不知道第一臺商用電腦的名字叫UNIVAC,1951交付于當時的美國的人口普查局。
世界第一臺計算機
那時的數據管理非常簡單。通過大量的分類、比較和表格繪制的機器運行數百萬穿孔卡片來進行數據的處理,其運行結果在紙上打印出來或者制成新的穿孔卡片。而數據管理就是對所有這些穿孔卡片進行物理的儲存和處理。
穿孔卡片存儲
但這種存儲方式是在太笨重啦!數據量小而且查詢還不方便,因此最終這種方式被后出現的網狀數據庫(Network Databases)和層次數據庫(Hierarchical Databases)所取代。當時網狀DBMS要比層次DBMS用得更普遍。在數據庫發展史上,網狀數據庫占有重要地位。
網狀數據庫模式
層次型數據庫
網狀數據庫與層級型數據庫均有其弊端,而且弊端從本質上無法進行優化避免,其主要缺點如下:
網狀數據庫
(1)結構比較復雜,而且隨著應用環境的擴大,數據庫的結構就變得越來越復雜,不利于最終用戶掌握
(2)其DDL,DML語言復雜,用戶不容易使用。用于記錄之間聯系是通過存取路徑實現的,應用程序訪問數據庫時必須選擇適當的存取路徑。因此,用戶必須了解系統的結構的細節,加重了編寫應用程序的負擔
層次型數據庫
(1)現實世界中很多聯系是非層次性的,如多對多聯系,一個節點具有多個雙親等,層次模型不能自然的表示這類聯系,只能通過引入冗余數據或引入虛擬結點來解決
(2)對插入和刪除操作的限制比較多
(3)查詢子女結點必須通過雙親結點
SQL的出現
1970 年,IBM研究員E.F.Codd博士在刊物Communication of the ACM上發表了一篇名為“A Relational Modelof Data for Large Shared Data Banks”的論文,提出了關系模型的概念,奠定了關系模型的理論基礎。
直到1985年IBM才發布了關系數據庫DB2,那時oracle已經占有了很大的市場,Ellision已經成了千萬富翁。1989年,微軟發布了SQL Server 1.0版。三大商用關系型數據庫的發布年份,也正好對應了市場占有率的排名。
谷歌發布的 MapReduce (2004年)和 Bigtable(2006年),以及亞馬遜發布的Dynamo,這些開創性的論文促使了更多非關系數據庫的出現,包括 Hadoop、Cassandra和 MongoDB。這些新系統基本上都是從零開始編寫的,他們并沒有使用SQL而是都開發了自己的語言,這也就導致了 NoSQL 運動的興起。
不過SQL也不是出現后地位就波瀾不驚,其也受到過NoSQL的沖擊。
NoSQL跟SQL相比,因為操作簡介,接受的群眾范圍更廣了。甚至有人認為這是做項目時候通往成功的捷徑。但后來出現了問題。
開發人員很快發現,沒有SQL實際上是非常有限的。。每個NoSQL數據庫都提供了自己獨特的查詢語言,這意味著:學習更多的語言(并在同事之間傳播知識);增加了將數據庫連接到應用程序的難度,導致代碼之間有很強的耦合性;缺乏第三方生態系統,需要公司開發自己的操作和可視化工具。
一些NoSQL數據庫添加了自己的“類sql”查詢語言,比如Cassandra的CQL。但使用起來效果并不好,往往其把開發的難度又再次增加啦!這跟語言是解決問題的工具的含義所違背。
因此sql憑借其在90%的情況中都能完成任務。這對于身處越來越復雜的技術與集成環境中的開發者而言,就是最大的優點。sql又再一次煥發新生啦!