1. 
          

          1. 新聞動(dòng)態(tài)

            SQL 已死,但 SQL 將永存!

            行業(yè)資訊 發(fā)布者:cya 2020-01-09 08:54 訪(fǎng)問(wèn)量:147

            本文經(jīng)授權轉自公眾號CSDN(ID:CSDNnews)

            作者 | Jennifer Ouellette

            譯者 | 彎月

            責編 | 屠敏

            在 SQL 被引入的 45 年中,它經(jīng)歷了許多數據庫的誕生和消亡,也經(jīng)歷了許多數據處理方式的誕生和消亡。

            以下為譯文:

            四十五年前,兩位年輕的IBM研究人員在數據庫上提出了一種新的語(yǔ)言,這是一種關(guān)系型語(yǔ)言,它奉行一切數據可以被聲明性地操作和容易操作的思想。自Don Chamberlin和Ramond Boyce出版《SEQUEL:結構化英語(yǔ)查詢(xún)語(yǔ)言》一書(shū)后的幾年里,關(guān)系模型和SQL已經(jīng)擴展并被大量的技術(shù)所采納,如OLTP、OLAP、對象數據庫、對象關(guān)系數據庫,甚至NoSQL等等。SQL同時(shí)也啟發(fā)了非關(guān)系數據庫的查詢(xún)語(yǔ)言設計:如SQL for Object-Database(用于對象數據庫的SQL),SQL for Object-Relational(用于對象關(guān)系型數據庫的SQL),SQL for XML、SQL for Spatial、SQL for Search、SQL for JSON、SQL for Timeseries、SQL for Streams等等。每個(gè)BI工具都使用各種各樣的SQL與數據交互。實(shí)際上,SQL是最成功的第四代語(yǔ)言。

            “SQL是一種只有它自己的力量才能超越它的神秘手段?!薄狶ukas Eder

            正如Don最近所說(shuō)的,SQL是基于關(guān)系代數的基礎,目的是通過(guò)提供一個(gè)類(lèi)似于英語(yǔ)的查詢(xún)語(yǔ)言來(lái)更簡(jiǎn)單地實(shí)現以下目標:

            • 聲明性的語(yǔ)言和流程(而不是程序性的)

            • 使語(yǔ)言可組合以幫助輕松編寫(xiě)復雜的查詢(xún)

            • 和Edger F Codd開(kāi)發(fā)的關(guān)系模型共同工作

            雖然大數據試圖為數據倉庫擴展和替換關(guān)系型系統,但它們試圖使用相同的SQL語(yǔ)言。Hive, Impala、Drill、BigSQL使用的語(yǔ)言都深受SQL啟發(fā),優(yōu)化器和執行類(lèi)似于SQL的MPP執行。他們還定期添加新的SQL功能。所有這些都發(fā)生在你能想到的每種類(lèi)型的數據存儲和模型上。SQL中數據存儲格式、數據模型和查詢(xún)處理的分離帶來(lái)了顯著(zhù)的好處。在SQL被引入的45年中,它經(jīng)歷了許多數據庫的誕生和消亡,也經(jīng)歷了許多數據處理方式的誕生和消亡。支持NoSQL運動(dòng)的一些人暗示SQL和SQL數據庫不能將會(huì )消亡,即使是無(wú)意的。但SQL陣營(yíng)已經(jīng)邁步前進(jìn),Don Chamberlin最近說(shuō)道:“當一種語(yǔ)言得到了普遍認可,以至于其他語(yǔ)言開(kāi)始將自己定義為不是那種語(yǔ)言時(shí),它必須做得非常好?!?/span>

            另一方面,數據庫只是轉向了No-SQL。雖然目前對No-SQL的定義是“Not Only SQL”,但最初的想法是不使用SQL,而代之以其他語(yǔ)言和框架,如map-reduce。然而十年后,每個(gè)流行的NoSQL數據庫都有了一個(gè)SQL變體:如Couchbase的N1QL,Cassandra的CQL,Elastic的ElasticSearch。你會(huì )說(shuō),“MongoDB沒(méi)有SQL”。我會(huì )說(shuō),“瞇眼想一想!你會(huì )看到一個(gè)非常簡(jiǎn)單的SQL實(shí)現?!?通過(guò)在MongoDB中使用一個(gè)簡(jiǎn)單的,有些程序化的,特別的設計,一些松散組合性的查詢(xún),優(yōu)化以及許多創(chuàng )新都可以使用SQL完成。

            雖然關(guān)系模型非常成功,但是數據庫支持各種數據模型:如JSON, Graph, XML, Timeseries, Spatial, Wide-column, Columnar, Document等等。大多數(如果不是全部)數據庫都有自己的SQL版本。如N1Q1(SQL for Jason)、SQL/XML、SQL from InfluxDB、SQL/Spatial、CQL in Cassandra等等,甚至NoSQL數據庫也實(shí)現了SQL和SQL啟發(fā)的查詢(xún)語(yǔ)言。即使在新的酷炫的“數據科學(xué)”世界中,SQL技能也是強烈推薦的。Lukas Eder在他的“must-see”談話(huà)中闡述了這一點(diǎn)。有關(guān)他的談話(huà),請參見(jiàn)相關(guān)鏈接。

            現在,NoSQL數據庫相關(guān)的SQL項目要比SQL數據庫的項目多。

            1、SQL 為何會(huì )成功?

            1. 聲明性:你只需要聲明輸出,查詢(xún)引擎就會(huì )找出執行查詢(xún)的最佳方式。優(yōu)化器,特別是1979年P(guān)at Selinger等人發(fā)明的基于成本的優(yōu)化器,幫助持續地改進(jìn)性能。這為每個(gè)新進(jìn)入者提供了一個(gè)很高的標準。最近一篇關(guān)于A(yíng)pache Hive的論文就是一個(gè)復雜性和完善涉及的例子為什么SQL如此成功?

            2. SQL不僅用于“查詢(xún)”,還用于更新數據、執行事務(wù)。存儲過(guò)程,UDF通過(guò)將過(guò)程語(yǔ)言與聲明性SQL相結合來(lái)擴展訪(fǎng)問(wèn)范圍。

            3. SQL具有可塑性。它已經(jīng)多次標準化,每次都會(huì )添加一本功能齊全的書(shū),一個(gè)充滿(mǎn)語(yǔ)法的商店,以及一個(gè)充滿(mǎn)關(guān)鍵詞的詞典。當然,并非所有的SQL都是相同的。即使是RDBMS上的傳統SQL實(shí)現也不完全兼容,除非您小心地編寫(xiě)SQL使其兼容。通過(guò)所有這些,SQL的原始精神得以保留。SQL的一個(gè)進(jìn)化的例子是SQL++。Don Chamberlin和Mike Carey教授討論了支持復雜數據模型的需求,使用戶(hù)和開(kāi)發(fā)人員可以輕松訪(fǎng)問(wèn)JSON中的數據。Don寫(xiě)的書(shū)《SQL++ for SQL users:A Tutorial》介紹了SQL++的最新發(fā)展,SQL++這種語(yǔ)言是為靈活的JSON數據模型上的數據處理而設計的,它保持了與SQL的兼容。

            4. 就像它所借用的英語(yǔ)一樣,SQL對新數據類(lèi)型、訪(fǎng)問(wèn)方法和用例的新思想和擴展持開(kāi)放態(tài)度。

            5. SQL與數據表示的獨立性使其可以用于非關(guān)系數據:CSV, JSON和所有大數據格式。有些人把關(guān)系模型表示的剛性和SQL的剛性混為一談。實(shí)際上,對于任何給定的Schema,SQL允許你對任何數據格式執行select-join-group-aggregate-project操作

            2、評估SQL支持

            既然SQL無(wú)處不在,那么你就需要在支持級別上進(jìn)行盡職調查。

            1. 找出每個(gè)工作負載的特征和目標。例如,交互式應用程序,或交互式分析,或批量分析,或BI工作負載等等。

            2. 支持的聲明反映了操作能力。

            3. 在表達式(標量、聚合、布爾值)、聯(lián)接(內聯(lián)、左聯(lián)/右聯(lián)/全聯(lián))、子查詢(xún)、派生表、排序和分頁(yè)(LIMIT / OFFSET)方面的語(yǔ)言能力。

            4. 索引:沒(méi)有正確索引的SQL只是一個(gè)圖靈機器原型。

            5. 優(yōu)化器:查詢(xún)重寫(xiě),選擇正確的訪(fǎng)問(wèn)路徑,創(chuàng )建最佳執行路徑是使得SQL語(yǔ)言成為成功的第4代語(yǔ)言的原因。有些具有基于規則的優(yōu)化器,有些具有基于成本的優(yōu)化器,而有些則兩者都有。評估優(yōu)化器的質(zhì)量至關(guān)重要。典型的基準(TPC-C、TPC-DS、YCSB、YCSB-JSON)在這里對你沒(méi)有幫助。

            6. 正如我們常說(shuō):“數據庫有三個(gè)重要方面:性能、性能和性能”。測量工作負載的性能很重要。YCSB和擴展的YCSB-JSON將使評估更容易。

            7. SDK:豐富的SDK和語(yǔ)言支持,加快你的開(kāi)發(fā)速度。

            8. BI工具支持:對于大型數據分析,通過(guò)標準數據庫連接驅動(dòng)程序來(lái)支持BI工具通常非常重要。

            N1QL的創(chuàng )建者Gerald Sangudi曾經(jīng)說(shuō)過(guò),SQL是成功的,因為它代表了數據處理的基本操作。SQL支持一組豐富的操作:select-join-nest-unnest-group-aggregate-having-window-order-paginate-set-ops。這是我們(或機器)在指定數據操作時(shí)的想法嗎?雖然還有待觀(guān)察,但像Python和Java這樣的語(yǔ)言正在為數據的這些操作添加運算符。也許,其他人也會(huì )效仿。SQL已經(jīng)進(jìn)入了關(guān)系型數據庫模型不曾涉足的領(lǐng)域??梢院敛豢鋸埖卣f(shuō):

            SQL已死,但SQL將永存!



            關(guān)鍵字: SQL 開(kāi)封晨展科技

            文章連接: http://www.gostscript.com/hyzx/676.html

            版權聲明:文章由 晨展科技 整理收集,來(lái)源于互聯(lián)網(wǎng)或者用戶(hù)投稿,如有侵權,請聯(lián)系我們,我們會(huì )立即刪除。如轉載請保留

            双腿国产亚洲精品无码不卡|国产91精品无码麻豆|97久久久久久久极品|无码人妻少妇久久中文字幕
                1.