SQL的不合理有效性

兩個分數和五年前,兩位年輕的IBM研究人員提出了數據庫; 一種在關係中構思的新語言,致力於數據可以以聲明方式輕鬆操作的命題。自Don Chamberlin和Ramond Boyce發表SQL:結構化英語查詢語言以來,關係模型和SQL已經擴展並適用於大量技術:OLTP,OLAP,對象數據庫,對象關係數據庫,甚至NoSQL。SQL啓發了非關係數據庫的查詢語言設計:對象數據庫的SQL,對象關係的SQL,XML的SQL,空間的SQL,搜索的SQL,JSON的SQL,時間序列的SQL,流的SQL等等。每個BI工具都使用各種SQL與數據交互。事實上,SQL是最多的成功的第四代語言

“SQL是一種只有它的力量才能超越它的神祕設備。”

盧卡斯埃德爾

正如Don最近所說,SQL基於關係代數的基礎,其目標是通過提供類似英語的查詢語言來實現以下目標:

  • 聲明性語言和處理(而不是程序性)

  • 使語言可組合以幫助輕鬆編寫複雜查詢

  • 使用Edger F Codd開發的關係模型

雖然大數據試圖讚美和替換數據倉庫的關係系統,但他們試圖說同一種語言:SQL。Hive,Impala,drill和BigSQL都講SQL啓發語言,優化器和執行類似於SQL的MPP執行。他們還定期添加新的SQL功能。所有這些都在您想到的每種類型的數據存儲和模型上。SQL中數據存儲格式,數據模型和查詢處理的分離產生了顯着的好處。自SQL推出四十五年以來,許多數據庫都來去匆匆; 許多數據處理已經過去了。NoSQL運動中的一些人暗示,即使在不經意間,SQL和SQL數據庫的死亡也是如此。SQL陣營大步邁進,Don Chamberlin最近表示:“當一種語言如此被人們認可,以至於其他語言開始將自己定義爲不是那種語言時,它必須做得非常好。”

另一方面,數據庫只是簡單地使用No-SQL。雖然目前的定義是“Not Only SQL”,但最初的方法是不使用SQL並嘗試替代語言和框架,如map-reduce。十年後,每個流行的NoSQL數據庫都有SQL的變體:Couchbase中的N1QL,Cassandra中的CQL,Elastic中的ElasticSearch SQL。你說,“MongoDB沒有SQL。”我說,“ Squint!您將看到一個非常簡單的SQL實現。“通過在MongoDB中使用簡單,有點過程和臨時設計,查詢鬆散的可組合性,優化以及使用SQL完成的許多創新。

雖然關係模型非常成功,但數據庫支持各種數據模型:JSON,圖形,XML,時間序列,空間,寬列,列,文檔等。大多數(如果不是全部)這些數據庫都有自己的SQL版本。N1QL是JSON的SQL; SQL / XML,來自InfluxDB的SQL,SQL / Spatial,Cassandra中的CQL等。甚至NoSQL數據庫也實現了SQL和SQL啓發的查詢語言。即使在新的酷“數據科學”世界中,強烈建議使用SQL技能Lukas Eder在他必看的談話中闡述了這一點。請參閱下面參考部分中的會談鏈接。

現在,NOSQL數據庫中的SQL項目比SQL數據庫多。

數據模型/格式SQL實現
JSONCouchbase N1QL:用於JSON的SQL
寬柱Cassandra CQL
Hadoop /大數據Hive,Impala,Drill,BigSQL
時間序列Influxdb
圖形SQL Graph數據庫,Oracle Graph
NoSQL數據庫Apache Phoenix
空間的Oracle Spatial
搜索彈性SQL


爲什麼SQL如此成功?

  1. 聲明性:您聲明輸出,查詢引擎找出執行查詢的最佳方式。優化器,尤其是1979年Pat Selinger等人發明的基於成本的優化器,有助於不斷提高性能。這爲每個新進入者提供了一個很高的標準。一個基於Apache蜂巢最近的一篇論文是複雜性和完善涉及的例子。

  2. SQL不僅用於“查詢”,還用於更新執行事務的數據。存儲過程UDF通過將過程語言與聲明性SQL結合起來擴展了範圍。

  3. SQL具有可塑性。它已經多次標準化,每次添加一本功能齊全的書籍,一個充滿語法的商店,以及一個充滿關鍵詞的詞典。當然,並非所有SQL都是相同的。即使是RDBMS上的傳統SQL實現也不完全兼容,除非您小心地將SQL編寫爲兼容。通過所有這些,SQL的原始精神仍然存在。SQL借用於進化的一個例子是SQL ++Don Chamberlin和Mike Carey教授討論了支持複雜數據模型的需求,使用戶和開發人員可以輕鬆訪問JSON中的數據。Don的書SQL ++ For SQL Users:A Tutorial 向您介紹SQL ++的最新發展,SQL ++是爲靈活的JSON數據模型上的數據處理而設計的,但是以SQL兼容的方式。

  4. SQL就像它借用的英語一樣,對新數據類型,訪問方法和用例的新思想和擴展持開放態度。

  5. SQL與數據表示的獨立性允許自己用於非關係數據:CSV,JSON和所有大數據格式。有些人將關係模型表示的剛性與SQL的剛性混爲一談。實際上,在給定的模式中,SQL允許您選擇-joed-group-aggregate-project任何數據格式。

評估SQL支持

現在SQL無處不在,您需要在支持級別上進行盡職調查。

  1. 找出每個工作負載工作負載特徵和目標。例如交互式應用程序或交互式分析或批量分析或BI工作負載等。

  2. 支持的聲明反映了業務能力

  3. 表達式(標量,聚合,布爾),連接(內部,左/右/外部外部),子查詢,派生表,排序和分頁(LIMIT / OFFSET)方面的語言功能

  4. 索引:沒有正確索引的SQL只是圖靈機的原型

  5. 優化器:查詢重寫,選擇正確的訪問路徑,創建最佳查詢執行路徑是SQL成功4GL的原因。有些具有基於規則的優化器,有些具有基於成本的優化器,有些具有基於成本的優化器。評估優化器的質量至關重要。典型的基準測試(TPC-C,TPC-DS,YCSB,YCSB-JSON)在這裏不會幫到你

  6. 俗話說:“數據庫中有三件重要的東西:性能,性能和性能。” 衡量工作負載的性能非常重要。YCSB和擴展的YCSB-JSON將使評估更容易

  7. SDK:豐富的SDK和語言支持可加快您的開發速度

  8. BI工具支持:對於大數據分析,BI工具通常通過標準數據庫連接驅動程序提供支持非常重要

N1QL的創建者Gerald Sangudi曾經說過SQL是成功的,因爲它代表了數據處理的基本操作。SQL支持一組豐富的操作select-join-group-aggregate-having-window-order-paginate-setops。這是我們(或機器)在指定數據操作時的想法嗎?雖然還有待觀察,但其他語言如python和java正在爲數據上的這些操作添加運算符。也許其他人也會效仿。SQL已經走到了關係模型沒有的地方。可以毫不誇張地說:

SQL已經死了。SQL萬歲。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章